修复有些rtmp包FFmpeg无法解码的问题
This commit is contained in:
parent
7586070255
commit
214cc4c505
|
|
@ -153,28 +153,33 @@ void H264RtmpEncoder::inputFrame(const Frame::Ptr &frame) {
|
||||||
switch (type){
|
switch (type){
|
||||||
case H264Frame::NAL_IDR:
|
case H264Frame::NAL_IDR:
|
||||||
case H264Frame::NAL_B_P:{
|
case H264Frame::NAL_B_P:{
|
||||||
//I or P or B frame
|
if(_lastPacket && _lastPacket->timeStamp != frame->stamp()) {
|
||||||
int8_t flags = 7; //h.264
|
RtmpCodec::inputRtmp(_lastPacket, _lastPacket->isVideoKeyFrame());
|
||||||
bool is_config = false;
|
_lastPacket = nullptr;
|
||||||
bool keyFrame = frame->keyFrame();
|
}
|
||||||
flags |= ((keyFrame ? FLV_KEY_FRAME : FLV_INTER_FRAME) << 4);
|
|
||||||
|
|
||||||
RtmpPacket::Ptr rtmpPkt = ResourcePoolHelper<RtmpPacket>::obtainObj();
|
if(!_lastPacket) {
|
||||||
rtmpPkt->strBuf.clear();
|
//I or P or B frame
|
||||||
|
int8_t flags = 7; //h.264
|
||||||
|
bool is_config = false;
|
||||||
|
flags |= ((frame->keyFrame() ? FLV_KEY_FRAME : FLV_INTER_FRAME) << 4);
|
||||||
|
|
||||||
rtmpPkt->strBuf.push_back(flags);
|
_lastPacket = ResourcePoolHelper<RtmpPacket>::obtainObj();
|
||||||
rtmpPkt->strBuf.push_back(!is_config);
|
_lastPacket->strBuf.clear();
|
||||||
rtmpPkt->strBuf.append("\x0\x0\x0", 3);
|
_lastPacket->strBuf.push_back(flags);
|
||||||
|
_lastPacket->strBuf.push_back(!is_config);
|
||||||
|
_lastPacket->strBuf.append("\x0\x0\x0", 3);
|
||||||
|
|
||||||
|
_lastPacket->chunkId = CHUNK_VIDEO;
|
||||||
|
_lastPacket->streamId = STREAM_MEDIA;
|
||||||
|
_lastPacket->timeStamp = frame->stamp();
|
||||||
|
_lastPacket->typeId = MSG_VIDEO;
|
||||||
|
|
||||||
|
}
|
||||||
auto size = htonl(iLen);
|
auto size = htonl(iLen);
|
||||||
rtmpPkt->strBuf.append((char *) &size, 4);
|
_lastPacket->strBuf.append((char *) &size, 4);
|
||||||
rtmpPkt->strBuf.append(pcData, iLen);
|
_lastPacket->strBuf.append(pcData, iLen);
|
||||||
|
_lastPacket->bodySize = _lastPacket->strBuf.size();
|
||||||
rtmpPkt->bodySize = rtmpPkt->strBuf.size();
|
|
||||||
rtmpPkt->chunkId = CHUNK_VIDEO;
|
|
||||||
rtmpPkt->streamId = STREAM_MEDIA;
|
|
||||||
rtmpPkt->timeStamp = frame->stamp();
|
|
||||||
rtmpPkt->typeId = MSG_VIDEO;
|
|
||||||
RtmpCodec::inputRtmp(rtmpPkt,keyFrame);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,7 @@ private:
|
||||||
private:
|
private:
|
||||||
H264Track::Ptr _track;
|
H264Track::Ptr _track;
|
||||||
bool _gotSpsPps = false;
|
bool _gotSpsPps = false;
|
||||||
|
RtmpPacket::Ptr _lastPacket;
|
||||||
};
|
};
|
||||||
|
|
||||||
}//namespace mediakit
|
}//namespace mediakit
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue