add isNALU param to writeSample

This commit is contained in:
nareix 2015-11-26 16:21:26 +08:00
parent 90b650ed17
commit 0a8a72ae7d

View File

@ -57,22 +57,29 @@ 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) { return self.writeSample(false, sync, duration, data)
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) { func (self *SimpleH264Writer) WriteNALU(sync bool, duration int, data []byte) (err error) {
return self.writeSample(atom.WriteSampleByNALU, sync, duration, data) return self.writeSample(true, sync, duration, data)
} }
func (self *SimpleH264Writer) writeSample( func splitNALUByStartCode(data []byte) (out [][]byte) {
writeFunc func(io.Writer, []byte) (int,error), last := 0
sync bool, duration int, data []byte, for i := 0; i < len(data)-3; {
) (err error) { if data[i] == 0 && data[i+1] == 0 && data[i+2] == 1 {
out = append(out, data[last:i])
i += 3
last = i
} else {
i++
}
}
out = append(out, data[last:])
return
}
func (self *SimpleH264Writer) writeSample(isNALU, 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
@ -80,8 +87,16 @@ func (self *SimpleH264Writer) writeSample(
} }
var sampleSize int var sampleSize int
if sampleSize, err = writeFunc(self.mdatWriter, data); err != nil {
return if isNALU {
if sampleSize, err = atom.WriteSampleByNALU(self.mdatWriter, data); err != nil {
return
}
} else {
sampleSize = len(data)
if _, err = self.mdatWriter.Write(data); err != nil {
return
}
} }
if sync { if sync {