add isNALU param to writeSample
This commit is contained in:
parent
90b650ed17
commit
0a8a72ae7d
41
writer.go
41
writer.go
@ -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 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user