Commit 4d0db1b7 by ziyue

兼容时间戳不规范的H265流:#894

parent 24ab876f
...@@ -169,11 +169,23 @@ bool FrameMerger::willFlush(const Frame::Ptr &frame) const{ ...@@ -169,11 +169,23 @@ bool FrameMerger::willFlush(const Frame::Ptr &frame) const{
//时间戳变化了 //时间戳变化了
return true; return true;
} }
if (frame->getCodecId() == CodecH264 && switch (frame->getCodecId()) {
H264_TYPE(frame->data()[frame->prefixSize()]) == H264Frame::NAL_B_P) { case CodecH264 : {
if (H264_TYPE(frame->data()[frame->prefixSize()]) == H264Frame::NAL_B_P) {
//如果是264的b/p帧,那么也刷新输出 //如果是264的b/p帧,那么也刷新输出
return true; return true;
} }
break;
}
case CodecH265 : {
if (H265_TYPE(frame->data()[frame->prefixSize()]) == H265Frame::NAL_TRAIL_R) {
//如果是265的TRAIL_R帧,那么也刷新输出
return true;
}
break;
}
default : break;
}
return _frameCached.size() > kMaxFrameCacheSize; return _frameCached.size() > kMaxFrameCacheSize;
} }
default: /*不可达*/ assert(0); return true; default: /*不可达*/ assert(0); return true;
......
...@@ -169,7 +169,7 @@ void H265RtmpEncoder::inputFrame(const Frame::Ptr &frame) { ...@@ -169,7 +169,7 @@ void H265RtmpEncoder::inputFrame(const Frame::Ptr &frame) {
return; return;
} }
if(_lastPacket && _lastPacket->time_stamp != frame->dts()) { if (_lastPacket && (_lastPacket->time_stamp != frame->dts() || type == H265Frame::NAL_TRAIL_R)) {
RtmpCodec::inputRtmp(_lastPacket); RtmpCodec::inputRtmp(_lastPacket);
_lastPacket = nullptr; _lastPacket = nullptr;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论