diff --git a/src/Rtmp/RtmpMediaSource.h b/src/Rtmp/RtmpMediaSource.h index dc8c3415..99ff7d8e 100644 --- a/src/Rtmp/RtmpMediaSource.h +++ b/src/Rtmp/RtmpMediaSource.h @@ -100,9 +100,10 @@ public: MediaSource::regist(); _bRegisted = true; } + } else{ + _mapStamp[pkt->typeId] = pkt->timeStamp; + _pRing->write(pkt,pkt->isVideoKeyFrame()); } - _mapStamp[pkt->typeId] = pkt->timeStamp; - _pRing->write(pkt,pkt->isVideoKeyFrame()); } uint32_t getTimeStamp(TrackType trackType) override { diff --git a/src/RtmpMuxer/H264RtmpCodec.cpp b/src/RtmpMuxer/H264RtmpCodec.cpp index f1f59df2..a48e6014 100644 --- a/src/RtmpMuxer/H264RtmpCodec.cpp +++ b/src/RtmpMuxer/H264RtmpCodec.cpp @@ -153,10 +153,6 @@ void H264RtmpEncoder::inputFrame(const Frame::Ptr &frame) { switch (type){ case 5: - //在IDR帧之前插入config包 - if(_gotSpsPps){ - makeVideoConfigPkt(); - } case 1:{ //I or P or B frame int8_t flags = 7; //h.264 @@ -230,7 +226,7 @@ void H264RtmpEncoder::makeVideoConfigPkt() { rtmpPkt->streamId = STREAM_MEDIA; rtmpPkt->timeStamp = 0; rtmpPkt->typeId = MSG_VIDEO; - RtmpCodec::inputRtmp(rtmpPkt, true); + RtmpCodec::inputRtmp(rtmpPkt, false); } diff --git a/src/RtspMuxer/H264RtpCodec.cpp b/src/RtspMuxer/H264RtpCodec.cpp index f02b68cb..4510bd64 100644 --- a/src/RtspMuxer/H264RtpCodec.cpp +++ b/src/RtspMuxer/H264RtpCodec.cpp @@ -257,7 +257,7 @@ void H264RtpEncoder::makeH264Rtp(const void* data, unsigned int len, bool mark, rtppkt->offset = 16; uint8_t type = ((uint8_t *) (data))[0] & 0x1F; - RtpCodec::inputRtp(rtppkt,type == 5); + RtpCodec::inputRtp(rtppkt,type == 7); _ui16Sequence++; _ui32TimeStamp = uiStamp; }