Commit 9f9b3a5a by xiongziliang

提高http-ts直播性能:#961

parent c393cc7c
...@@ -110,6 +110,7 @@ void TsMuxer::inputFrame(const Frame::Ptr &frame) { ...@@ -110,6 +110,7 @@ void TsMuxer::inputFrame(const Frame::Ptr &frame) {
_is_idr_fast_packet = have_idr; _is_idr_fast_packet = have_idr;
mpeg_ts_write(_context, track_info.track_id, have_idr ? 0x0001 : 0, mpeg_ts_write(_context, track_info.track_id, have_idr ? 0x0001 : 0,
pts_out * 90LL, dts_out * 90LL, buffer->data(), buffer->size()); pts_out * 90LL, dts_out * 90LL, buffer->data(), buffer->size());
flushCache();
}); });
break; break;
} }
...@@ -129,6 +130,7 @@ void TsMuxer::inputFrame(const Frame::Ptr &frame) { ...@@ -129,6 +130,7 @@ void TsMuxer::inputFrame(const Frame::Ptr &frame) {
} }
mpeg_ts_write(_context, track_info.track_id, frame->keyFrame() ? 0x0001 : 0, mpeg_ts_write(_context, track_info.track_id, frame->keyFrame() ? 0x0001 : 0,
pts_out * 90LL, dts_out * 90LL, frame->data(), frame->size()); pts_out * 90LL, dts_out * 90LL, frame->data(), frame->size());
flushCache();
break; break;
} }
} }
...@@ -154,8 +156,7 @@ void TsMuxer::init() { ...@@ -154,8 +156,7 @@ void TsMuxer::init() {
}, },
[](void *param, const void *packet, size_t bytes) { [](void *param, const void *packet, size_t bytes) {
TsMuxer *muxer = (TsMuxer *) param; TsMuxer *muxer = (TsMuxer *) param;
muxer->onTs(packet, bytes, muxer->_timestamp, muxer->_is_idr_fast_packet); muxer->onTs_l(packet, bytes);
muxer->_is_idr_fast_packet = false;
return 0; return 0;
} }
}; };
...@@ -164,6 +165,16 @@ void TsMuxer::init() { ...@@ -164,6 +165,16 @@ void TsMuxer::init() {
} }
} }
void TsMuxer::onTs_l(const void *packet, size_t bytes) {
_cache.append((char *) packet, bytes);
}
void TsMuxer::flushCache() {
onTs(_cache.data(), _cache.size(), _timestamp, _is_idr_fast_packet);
_cache.clear();
_is_idr_fast_packet = false;
}
void TsMuxer::uninit() { void TsMuxer::uninit() {
if (_context) { if (_context) {
mpeg_ts_destroy(_context); mpeg_ts_destroy(_context);
......
...@@ -57,6 +57,8 @@ private: ...@@ -57,6 +57,8 @@ private:
void uninit(); void uninit();
//音视频时间戳同步用 //音视频时间戳同步用
void stampSync(); void stampSync();
void onTs_l(const void *packet, size_t bytes);
void flushCache();
private: private:
bool _have_video = false; bool _have_video = false;
...@@ -70,6 +72,7 @@ private: ...@@ -70,6 +72,7 @@ private:
}; };
unordered_map<int, track_info> _codec_to_trackid; unordered_map<int, track_info> _codec_to_trackid;
FrameMerger _frame_merger{FrameMerger::h264_prefix}; FrameMerger _frame_merger{FrameMerger::h264_prefix};
BufferLikeString _cache;
}; };
}//namespace mediakit }//namespace mediakit
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论