mirror of
https://github.com/cnotch/ipchub.git
synced 2025-09-26 19:41:18 +08:00
update muxer'videometa
This commit is contained in:
@@ -132,16 +132,6 @@ func (muxer *MuxerAvcAac) muxVideoTag(frame *codec.Frame) error {
|
||||
if frame.Payload[0]&0x1F == h264.NalSps {
|
||||
if len(muxer.videoMeta.Sps) == 0 {
|
||||
muxer.videoMeta.Sps = frame.Payload
|
||||
var rawSps h264.RawSPS
|
||||
err := rawSps.Decode(muxer.videoMeta.Sps)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
muxer.videoMeta.Width = rawSps.Width()
|
||||
muxer.videoMeta.Height = rawSps.Height()
|
||||
muxer.videoMeta.FrameRate = rawSps.FrameRate()
|
||||
muxer.dtsStep = 1000.0 / muxer.videoMeta.FrameRate
|
||||
}
|
||||
return muxer.muxSequenceHeaderTag()
|
||||
}
|
||||
@@ -277,11 +267,16 @@ func (muxer *MuxerAvcAac) muxSequenceHeaderTag() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
if len(muxer.videoMeta.Sps) == 0 || len(muxer.videoMeta.Pps) == 0 {
|
||||
if !h264.MetadataIsReady(&muxer.videoMeta) {
|
||||
// not enough
|
||||
return nil
|
||||
}
|
||||
|
||||
if muxer.videoMeta.FixedFrameRate {
|
||||
muxer.dtsStep = 1000.0 / muxer.videoMeta.FrameRate
|
||||
} else { // TODO:
|
||||
muxer.dtsStep = 1000.0 / 30
|
||||
}
|
||||
muxer.spsMuxed = true
|
||||
|
||||
record := NewAVCDecoderConfigurationRecord(muxer.videoMeta.Sps, muxer.videoMeta.Pps)
|
||||
|
@@ -32,6 +32,7 @@ type MuxerAvcAac struct {
|
||||
recvQueue *queue.SyncQueue
|
||||
tsframeWriter FrameWriter
|
||||
closed bool
|
||||
metaReady bool
|
||||
basePts int64
|
||||
nextDts float64
|
||||
dtsStep float64
|
||||
@@ -141,16 +142,7 @@ func (muxer *MuxerAvcAac) muxVideoTag(frame *codec.Frame) (err error) {
|
||||
if len(muxer.videoMeta.Sps) == 0 {
|
||||
muxer.videoMeta.Sps = frame.Payload
|
||||
}
|
||||
var rawSps h264.RawSPS
|
||||
err = rawSps.Decode(muxer.videoMeta.Sps)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
muxer.videoMeta.Width = rawSps.Width()
|
||||
muxer.videoMeta.Height = rawSps.Height()
|
||||
muxer.videoMeta.FrameRate = rawSps.FrameRate()
|
||||
muxer.dtsStep = 1000.0 / muxer.videoMeta.FrameRate
|
||||
muxer.preparMetadata()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -158,6 +150,7 @@ func (muxer *MuxerAvcAac) muxVideoTag(frame *codec.Frame) (err error) {
|
||||
if len(muxer.videoMeta.Pps) == 0 {
|
||||
muxer.videoMeta.Pps = frame.Payload
|
||||
}
|
||||
muxer.preparMetadata()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -183,6 +176,24 @@ func (muxer *MuxerAvcAac) muxVideoTag(frame *codec.Frame) (err error) {
|
||||
return muxer.tsframeWriter.WriteMpegtsFrame(tsframe)
|
||||
}
|
||||
|
||||
func (muxer *MuxerAvcAac) preparMetadata() {
|
||||
if muxer.metaReady {
|
||||
return
|
||||
}
|
||||
|
||||
if !h264.MetadataIsReady(&muxer.videoMeta) {
|
||||
// not enough
|
||||
return
|
||||
}
|
||||
|
||||
if muxer.videoMeta.FixedFrameRate {
|
||||
muxer.dtsStep = 1000.0 / muxer.videoMeta.FrameRate
|
||||
} else { // TODO:
|
||||
muxer.dtsStep = 1000.0 / 30
|
||||
}
|
||||
muxer.metaReady = true
|
||||
}
|
||||
|
||||
func (muxer *MuxerAvcAac) muxAudioTag(frame *codec.Frame) error {
|
||||
pts := frame.AbsTimestamp - muxer.basePts + ptsDelay
|
||||
pts *= 90
|
||||
|
Reference in New Issue
Block a user