add adts aac auto convert

This commit is contained in:
nareix 2016-04-18 14:25:23 +08:00
parent 897221b6a6
commit cb12a946ff

View File

@ -145,7 +145,33 @@ func (self *Track) SetTimeScale(timeScale int64) {
return return
} }
func (self *Track) WriteSample(pts int64, dts int64, isKeyFrame bool, data []byte) (err error) { func (self *Track) WriteSample(pts int64, dts int64, isKeyFrame bool, frame []byte) (err error) {
if self.Type == AAC && isom.IsADTSFrame(frame) {
config := self.mpeg4AudioConfig.Complete()
if config.SampleRate == 0 {
err = fmt.Errorf("invalid sample rate")
return
}
for len(frame) > 0 {
var payload []byte
var samples int
var framelen int
if _, payload, samples, framelen, err = isom.ReadADTSFrame(frame); err != nil {
return
}
delta := int64(samples)*self.TimeScale()/int64(config.SampleRate)
pts += delta
dts += delta
frame = frame[framelen:]
if self.writeSample(pts, dts, isKeyFrame, payload); err != nil {
return
}
}
}
return self.writeSample(pts, dts, isKeyFrame, frame)
}
func (self *Track) writeSample(pts int64, dts int64, isKeyFrame bool, data []byte) (err error) {
var filePos int64 var filePos int64
sampleSize := len(data) sampleSize := len(data)
if filePos, err = self.writeMdat(data); err != nil { if filePos, err = self.writeMdat(data); err != nil {