mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-03-14 18:10:55 +08:00
优化pauseRtpCheck接口,新增pause_seconds参数
This commit is contained in:
@@ -102,7 +102,7 @@ API_EXPORT void API_CALL mk_rtp_pause_check(const char *app, const char *stream)
|
|||||||
auto src = MediaSource::find(DEFAULT_VHOST, app, stream);
|
auto src = MediaSource::find(DEFAULT_VHOST, app, stream);
|
||||||
auto process = src ? src->getRtpProcess() : nullptr;
|
auto process = src ? src->getRtpProcess() : nullptr;
|
||||||
if (process) {
|
if (process) {
|
||||||
process->setStopCheckRtp(true);
|
process->pauseRtpTimeout(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ API_EXPORT void API_CALL mk_rtp_resume_check(const char *app, const char *stream
|
|||||||
auto src = MediaSource::find(DEFAULT_VHOST, app, stream);
|
auto src = MediaSource::find(DEFAULT_VHOST, app, stream);
|
||||||
auto process = src ? src->getRtpProcess() : nullptr;
|
auto process = src ? src->getRtpProcess() : nullptr;
|
||||||
if (process) {
|
if (process) {
|
||||||
process->setStopCheckRtp(false);
|
process->pauseRtpTimeout(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2019,6 +2019,12 @@
|
|||||||
"key": "stream_id",
|
"key": "stream_id",
|
||||||
"value": "test",
|
"value": "test",
|
||||||
"description": "该端口绑定的流id"
|
"description": "该端口绑定的流id"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "pause_seconds",
|
||||||
|
"value": "300",
|
||||||
|
"description": "暂停超时监测后,将在pause_seconds时间后恢复",
|
||||||
|
"disabled": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1734,7 +1734,7 @@ void installWebApi() {
|
|||||||
auto src = MediaSource::find(vhost, app, allArgs["stream_id"]);
|
auto src = MediaSource::find(vhost, app, allArgs["stream_id"]);
|
||||||
auto process = src ? src->getRtpProcess() : nullptr;
|
auto process = src ? src->getRtpProcess() : nullptr;
|
||||||
if (process) {
|
if (process) {
|
||||||
process->setStopCheckRtp(true);
|
process->pauseRtpTimeout(true, allArgs["pause_seconds"]);
|
||||||
} else {
|
} else {
|
||||||
val["code"] = API::NotFound;
|
val["code"] = API::NotFound;
|
||||||
}
|
}
|
||||||
@@ -1754,7 +1754,7 @@ void installWebApi() {
|
|||||||
auto src = MediaSource::find(vhost, app, allArgs["stream_id"]);
|
auto src = MediaSource::find(vhost, app, allArgs["stream_id"]);
|
||||||
auto process = src ? src->getRtpProcess() : nullptr;
|
auto process = src ? src->getRtpProcess() : nullptr;
|
||||||
if (process) {
|
if (process) {
|
||||||
process->setStopCheckRtp(false);
|
process->pauseRtpTimeout(false);
|
||||||
} else {
|
} else {
|
||||||
val["code"] = API::NotFound;
|
val["code"] = API::NotFound;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -203,27 +203,24 @@ void RtpProcess::doCachedFunc() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool RtpProcess::alive() {
|
bool RtpProcess::alive() {
|
||||||
if (_stop_rtp_check.load()) {
|
if (_pause_timeout) {
|
||||||
if(_last_check_alive.elapsedTime() > 5 * 60 * 1000){
|
if (_last_check_alive.elapsedTime() < _pause_seconds * 1000) {
|
||||||
// 最多暂停5分钟的rtp超时检测,因为NAT映射有效期一般不会太长 [AUTO-TRANSLATED:2df59aad]
|
|
||||||
// Pause the RTP timeout detection for a maximum of 5 minutes, because the NAT mapping validity period is generally not very long.
|
|
||||||
_stop_rtp_check = false;
|
|
||||||
} else {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
// 最多暂停_pause_seconds秒的rtp超时检测,因为NAT映射有效期一般不会太长
|
||||||
|
_pause_timeout = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
_last_check_alive.resetTime();
|
_last_check_alive.resetTime();
|
||||||
GET_CONFIG(uint64_t, timeoutSec, RtpProxy::kTimeoutSec)
|
GET_CONFIG(uint64_t, timeoutSec, RtpProxy::kTimeoutSec)
|
||||||
if (_last_frame_time.elapsedTime() / 1000 < timeoutSec) {
|
return _last_frame_time.elapsedTime() < timeoutSec * 1000;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RtpProcess::setStopCheckRtp(bool is_check){
|
void RtpProcess::pauseRtpTimeout(bool pause, uint32_t pause_seconds) {
|
||||||
_stop_rtp_check = is_check;
|
_pause_timeout = pause;
|
||||||
if (!is_check) {
|
// 默认5分钟恢复超时监测
|
||||||
|
_pause_seconds = pause_seconds ? pause_seconds : 300;
|
||||||
|
if (!pause) {
|
||||||
_last_frame_time.resetTime();
|
_last_frame_time.resetTime();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,12 +69,11 @@ public:
|
|||||||
void setOnDetach(onDetachCB cb);
|
void setOnDetach(onDetachCB cb);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置onDetach事件回调,false检查RTP超时,true停止
|
* 暂停或恢复rtp超时监测
|
||||||
* Set onDetach event callback, false checks RTP timeout, true stops
|
* @param pause 是否暂停超时检测
|
||||||
|
* @param pause_seconds 暂停超时检测最大时间(单位秒),超过这个时间后将恢复超时检测; 设置为0时默认为300
|
||||||
* [AUTO-TRANSLATED:2780397f]
|
|
||||||
*/
|
*/
|
||||||
void setStopCheckRtp(bool is_check=false);
|
void pauseRtpTimeout(bool pause, uint32_t pause_seconds = 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置为单track,单音频/单视频时可以加快媒体注册速度
|
* 设置为单track,单音频/单视频时可以加快媒体注册速度
|
||||||
@@ -129,10 +128,12 @@ private:
|
|||||||
void createTimer();
|
void createTimer();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
OnlyTrack _only_track = kAll;
|
bool _pause_timeout = false;
|
||||||
std::string _auth_err;
|
uint32_t _pause_seconds = 5 * 60;
|
||||||
uint64_t _dts = 0;
|
uint64_t _dts = 0;
|
||||||
uint64_t _total_bytes = 0;
|
uint64_t _total_bytes = 0;
|
||||||
|
OnlyTrack _only_track = kAll;
|
||||||
|
std::string _auth_err;
|
||||||
std::unique_ptr<sockaddr_storage> _addr;
|
std::unique_ptr<sockaddr_storage> _addr;
|
||||||
toolkit::Socket::Ptr _sock;
|
toolkit::Socket::Ptr _sock;
|
||||||
MediaInfo _media_info;
|
MediaInfo _media_info;
|
||||||
@@ -142,7 +143,6 @@ private:
|
|||||||
std::shared_ptr<FILE> _save_file_video;
|
std::shared_ptr<FILE> _save_file_video;
|
||||||
ProcessInterface::Ptr _process;
|
ProcessInterface::Ptr _process;
|
||||||
MultiMediaSourceMuxer::Ptr _muxer;
|
MultiMediaSourceMuxer::Ptr _muxer;
|
||||||
std::atomic_bool _stop_rtp_check{false};
|
|
||||||
toolkit::Timer::Ptr _timer;
|
toolkit::Timer::Ptr _timer;
|
||||||
toolkit::Ticker _last_check_alive;
|
toolkit::Ticker _last_check_alive;
|
||||||
std::recursive_mutex _func_mtx;
|
std::recursive_mutex _func_mtx;
|
||||||
|
|||||||
Reference in New Issue
Block a user