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 frame.Payload[0]&0x1F == h264.NalSps {
|
||||||
if len(muxer.videoMeta.Sps) == 0 {
|
if len(muxer.videoMeta.Sps) == 0 {
|
||||||
muxer.videoMeta.Sps = frame.Payload
|
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()
|
return muxer.muxSequenceHeaderTag()
|
||||||
}
|
}
|
||||||
@@ -277,11 +267,16 @@ func (muxer *MuxerAvcAac) muxSequenceHeaderTag() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(muxer.videoMeta.Sps) == 0 || len(muxer.videoMeta.Pps) == 0 {
|
if !h264.MetadataIsReady(&muxer.videoMeta) {
|
||||||
// not enough
|
// not enough
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if muxer.videoMeta.FixedFrameRate {
|
||||||
|
muxer.dtsStep = 1000.0 / muxer.videoMeta.FrameRate
|
||||||
|
} else { // TODO:
|
||||||
|
muxer.dtsStep = 1000.0 / 30
|
||||||
|
}
|
||||||
muxer.spsMuxed = true
|
muxer.spsMuxed = true
|
||||||
|
|
||||||
record := NewAVCDecoderConfigurationRecord(muxer.videoMeta.Sps, muxer.videoMeta.Pps)
|
record := NewAVCDecoderConfigurationRecord(muxer.videoMeta.Sps, muxer.videoMeta.Pps)
|
||||||
|
@@ -32,6 +32,7 @@ type MuxerAvcAac struct {
|
|||||||
recvQueue *queue.SyncQueue
|
recvQueue *queue.SyncQueue
|
||||||
tsframeWriter FrameWriter
|
tsframeWriter FrameWriter
|
||||||
closed bool
|
closed bool
|
||||||
|
metaReady bool
|
||||||
basePts int64
|
basePts int64
|
||||||
nextDts float64
|
nextDts float64
|
||||||
dtsStep float64
|
dtsStep float64
|
||||||
@@ -141,16 +142,7 @@ func (muxer *MuxerAvcAac) muxVideoTag(frame *codec.Frame) (err error) {
|
|||||||
if len(muxer.videoMeta.Sps) == 0 {
|
if len(muxer.videoMeta.Sps) == 0 {
|
||||||
muxer.videoMeta.Sps = frame.Payload
|
muxer.videoMeta.Sps = frame.Payload
|
||||||
}
|
}
|
||||||
var rawSps h264.RawSPS
|
muxer.preparMetadata()
|
||||||
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
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,6 +150,7 @@ func (muxer *MuxerAvcAac) muxVideoTag(frame *codec.Frame) (err error) {
|
|||||||
if len(muxer.videoMeta.Pps) == 0 {
|
if len(muxer.videoMeta.Pps) == 0 {
|
||||||
muxer.videoMeta.Pps = frame.Payload
|
muxer.videoMeta.Pps = frame.Payload
|
||||||
}
|
}
|
||||||
|
muxer.preparMetadata()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,6 +176,24 @@ func (muxer *MuxerAvcAac) muxVideoTag(frame *codec.Frame) (err error) {
|
|||||||
return muxer.tsframeWriter.WriteMpegtsFrame(tsframe)
|
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 {
|
func (muxer *MuxerAvcAac) muxAudioTag(frame *codec.Frame) error {
|
||||||
pts := frame.AbsTimestamp - muxer.basePts + ptsDelay
|
pts := frame.AbsTimestamp - muxer.basePts + ptsDelay
|
||||||
pts *= 90
|
pts *= 90
|
||||||
|
Reference in New Issue
Block a user