mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2025-02-17 13:29:56 +08:00
Feature: 新增转协议超时等相关配置项( #1241)
This commit is contained in:
parent
d69f7ad637
commit
4700ab77de
@ -80,6 +80,14 @@ ts_demand=0
|
||||
#http[s]-fmp4、ws[s]-fmp4协议是否按需生成
|
||||
fmp4_demand=0
|
||||
|
||||
#最多等待未初始化的Track时间,单位毫秒,超时之后会忽略未初始化的Track
|
||||
wait_track_ready_ms=10000
|
||||
#如果流只有单Track,最多等待若干毫秒,超时后未收到其他Track的数据,则认为是单Track
|
||||
#如果协议元数据有声明特定track数,那么无此等待时间
|
||||
wait_add_track_ms=3000
|
||||
#如果track未就绪,我们先缓存帧数据,但是有最大个数限制,防止内存溢出
|
||||
unready_frame_cache=100
|
||||
|
||||
[hls]
|
||||
#hls写文件的buf大小,调整参数可以提高文件io性能
|
||||
fileBufSize=65536
|
||||
|
@ -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();
|
||||
|
@ -75,6 +75,9 @@ const string kRtmpDemand = GENERAL_FIELD"rtmp_demand";
|
||||
const string kTSDemand = GENERAL_FIELD"ts_demand";
|
||||
const string kFMP4Demand = GENERAL_FIELD"fmp4_demand";
|
||||
const string kEnableAudio = GENERAL_FIELD"enable_audio";
|
||||
const string kWaitTrackReadyMS = GENERAL_FIELD"wait_track_ready_ms";
|
||||
const string kWaitAddTrackMS = GENERAL_FIELD"wait_add_track_ms";
|
||||
const string kUnreadyFrameCache = GENERAL_FIELD"unready_frame_cache";
|
||||
|
||||
onceToken token([](){
|
||||
mINI::Instance()[kFlowThreshold] = 1024;
|
||||
@ -94,7 +97,9 @@ onceToken token([](){
|
||||
mINI::Instance()[kTSDemand] = 0;
|
||||
mINI::Instance()[kFMP4Demand] = 0;
|
||||
mINI::Instance()[kEnableAudio] = 1;
|
||||
|
||||
mINI::Instance()[kWaitTrackReadyMS] = 10000;
|
||||
mINI::Instance()[kWaitAddTrackMS] = 3000;
|
||||
mINI::Instance()[kUnreadyFrameCache] = 100;
|
||||
},nullptr);
|
||||
|
||||
}//namespace General
|
||||
|
@ -186,6 +186,13 @@ extern const string kTSDemand;
|
||||
extern const string kFMP4Demand;
|
||||
//转协议是否全局开启或忽略音频
|
||||
extern const string kEnableAudio;
|
||||
//最多等待未初始化的Track 10秒,超时之后会忽略未初始化的Track
|
||||
extern const string kWaitTrackReadyMS;
|
||||
//如果直播流只有单Track,最多等待3秒,超时后未收到其他Track的数据,则认为是单Track
|
||||
//如果协议元数据有声明特定track数,那么无此等待时间
|
||||
extern const string kWaitAddTrackMS;
|
||||
//如果track未就绪,我们先缓存帧数据,但是有最大个数限制(100帧时大约4秒),防止内存溢出
|
||||
extern const string kUnreadyFrameCache;
|
||||
}//namespace General
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user