support WriteNALU
This commit is contained in:
parent
cdeeeaa557
commit
90b650ed17
@ -15,6 +15,18 @@ type AVCDecoderConfRecord struct {
|
|||||||
PictureParamSet [][]byte
|
PictureParamSet [][]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func WriteSampleByNALU(w io.Writer, nalu []byte) (size int, err error) {
|
||||||
|
if err = WriteInt(w, len(nalu), 4); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
size += 4
|
||||||
|
if _, err = w.Write(nalu); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
size += len(nalu)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func CreateAVCDecoderConfRecord(
|
func CreateAVCDecoderConfRecord(
|
||||||
SeqenceParamSet []byte,
|
SeqenceParamSet []byte,
|
||||||
PictureParamSet []byte,
|
PictureParamSet []byte,
|
||||||
|
21
writer.go
21
writer.go
@ -57,13 +57,30 @@ func (self *SimpleH264Writer) prepare() (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *SimpleH264Writer) WriteSample(sync bool, duration int, data []byte) (err error) {
|
func (self *SimpleH264Writer) WriteSample(sync bool, duration int, data []byte) (err error) {
|
||||||
|
return self.writeSample(func (w io.Writer, data []byte) (int, error) {
|
||||||
|
if _, err = self.mdatWriter.Write(data); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return len(data), nil
|
||||||
|
}, sync, duration, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *SimpleH264Writer) WriteNALU(sync bool, duration int, data []byte) (err error) {
|
||||||
|
return self.writeSample(atom.WriteSampleByNALU, sync, duration, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *SimpleH264Writer) writeSample(
|
||||||
|
writeFunc func(io.Writer, []byte) (int,error),
|
||||||
|
sync bool, duration int, data []byte,
|
||||||
|
) (err error) {
|
||||||
if self.mdatWriter == nil {
|
if self.mdatWriter == nil {
|
||||||
if err = self.prepare(); err != nil {
|
if err = self.prepare(); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err = self.mdatWriter.Write(data); err != nil {
|
var sampleSize int
|
||||||
|
if sampleSize, err = writeFunc(self.mdatWriter, data); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +102,7 @@ func (self *SimpleH264Writer) WriteSample(sync bool, duration int, data []byte)
|
|||||||
self.sampleIdx++
|
self.sampleIdx++
|
||||||
self.timeToSample.Count++
|
self.timeToSample.Count++
|
||||||
self.sampleToChunk.SamplesPerChunk++
|
self.sampleToChunk.SamplesPerChunk++
|
||||||
self.sample.SampleSize.Entries = append(self.sample.SampleSize.Entries, len(data))
|
self.sample.SampleSize.Entries = append(self.sample.SampleSize.Entries, sampleSize)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user