mirror of
https://gitee.com/xia-chu/ZLMediaKit.git
synced 2026-05-19 00:07:49 +08:00
parent
5a10db5f1b
commit
32ab752263
@ -157,7 +157,6 @@ bool H264Track::inputFrame(const Frame::Ptr &frame) {
|
|||||||
// AUD帧丢弃
|
// AUD帧丢弃
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((type == H264Frame::NAL_B_P || type == H264Frame::NAL_IDR) && ready()) {
|
if ((type == H264Frame::NAL_B_P || type == H264Frame::NAL_IDR) && ready()) {
|
||||||
return inputFrame_l(frame);
|
return inputFrame_l(frame);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -205,11 +205,7 @@ bool FrameMerger::willFlush(const Frame::Ptr &frame) const{
|
|||||||
|
|
||||||
case mp4_nal_size:
|
case mp4_nal_size:
|
||||||
case h264_prefix: {
|
case h264_prefix: {
|
||||||
if (frame->dropAble() && !_have_config_frame) {
|
if (!_have_decode_able_frame) {
|
||||||
// 遇到SEI帧且未缓存配置帧,flush之前的帧
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (!_have_decode_able_frame && !_have_drop_able_frame) {
|
|
||||||
// 缓存中没有有效的能解码的帧,所以这次不flush [AUTO-TRANSLATED:5d860722]
|
// 缓存中没有有效的能解码的帧,所以这次不flush [AUTO-TRANSLATED:5d860722]
|
||||||
// There are no valid frames that can be decoded in the cache, so no flush this time.
|
// There are no valid frames that can be decoded in the cache, so no flush this time.
|
||||||
return _frame_cache.size() > kMaxFrameCacheSize;
|
return _frame_cache.size() > kMaxFrameCacheSize;
|
||||||
@ -294,8 +290,6 @@ bool FrameMerger::inputFrame(const Frame::Ptr &frame, onOutput cb, BufferLikeStr
|
|||||||
cb(back->dts(), back->pts(), merged_frame, have_key_frame);
|
cb(back->dts(), back->pts(), merged_frame, have_key_frame);
|
||||||
_frame_cache.clear();
|
_frame_cache.clear();
|
||||||
_have_decode_able_frame = false;
|
_have_decode_able_frame = false;
|
||||||
_have_drop_able_frame = false;
|
|
||||||
_have_config_frame = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!frame) {
|
if (!frame) {
|
||||||
@ -305,12 +299,6 @@ bool FrameMerger::inputFrame(const Frame::Ptr &frame, onOutput cb, BufferLikeStr
|
|||||||
if (frame->decodeAble()) {
|
if (frame->decodeAble()) {
|
||||||
_have_decode_able_frame = true;
|
_have_decode_able_frame = true;
|
||||||
}
|
}
|
||||||
if (frame->dropAble()) {
|
|
||||||
_have_drop_able_frame = true;
|
|
||||||
}
|
|
||||||
if (frame->configFrame()) {
|
|
||||||
_have_config_frame = true;
|
|
||||||
}
|
|
||||||
_cb = std::move(cb);
|
_cb = std::move(cb);
|
||||||
_frame_cache.emplace_back(Frame::getCacheAbleFrame(frame));
|
_frame_cache.emplace_back(Frame::getCacheAbleFrame(frame));
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -660,8 +660,6 @@ private:
|
|||||||
private:
|
private:
|
||||||
int _type;
|
int _type;
|
||||||
bool _have_decode_able_frame = false;
|
bool _have_decode_able_frame = false;
|
||||||
bool _have_drop_able_frame = false;
|
|
||||||
bool _have_config_frame = false;
|
|
||||||
onOutput _cb;
|
onOutput _cb;
|
||||||
toolkit::List<Frame::Ptr> _frame_cache;
|
toolkit::List<Frame::Ptr> _frame_cache;
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user