Feature: 新增转协议超时等相关配置项( #1241)

This commit is contained in:
ziyue
2021-11-30 18:02:52 +08:00
parent d69f7ad637
commit 4700ab77de
4 changed files with 25 additions and 10 deletions

View File

@@ -11,15 +11,6 @@
#include "MediaSink.h"
#include "Extension/AAC.h"
//最多等待未初始化的Track 10秒超时之后会忽略未初始化的Track
static size_t constexpr kMaxWaitReadyMS= 10000;
//如果直播流只有单Track最多等待3秒超时后未收到其他Track的数据则认为是单Track
static size_t constexpr kMaxAddTrackMS = 3000;
//如果track未就绪我们先缓存帧数据但是有最大个数限制(100帧时大约4秒),防止内存溢出
static size_t constexpr kMaxUnreadyFrame = 100;
namespace mediakit{
bool MediaSink::addTrack(const Track::Ptr &track_in) {
@@ -50,6 +41,8 @@ bool MediaSink::addTrack(const Track::Ptr &track_in) {
return onTrackFrame(frame);
}
auto &frame_unread = _frame_unread[frame->getTrackType()];
GET_CONFIG(uint32_t, kMaxUnreadyFrame, General::kUnreadyFrameCache);
if (frame_unread.size() > kMaxUnreadyFrame) {
//未就绪的的track不能缓存太多的帧否则可能内存溢出
frame_unread.clear();
@@ -102,6 +95,7 @@ void MediaSink::checkTrackIfReady(){
}
if(!_all_track_ready){
GET_CONFIG(uint32_t, kMaxWaitReadyMS, General::kWaitTrackReadyMS);
if(_ticker.elapsedTime() > kMaxWaitReadyMS){
//如果超过规定时间那么不再等待并忽略未准备好的Track
emitAllTrackReady();
@@ -119,6 +113,7 @@ void MediaSink::checkTrackIfReady(){
return;
}
GET_CONFIG(uint32_t, kMaxAddTrackMS, General::kWaitAddTrackMS);
if(_track_map.size() == 1 && _ticker.elapsedTime() > kMaxAddTrackMS){
//如果只有一个Track那么在该Track添加后我们最多还等待若干时间(可能后面还会添加Track)
emitAllTrackReady();