优化pauseRtpCheck接口,新增pause_seconds参数
Some checks are pending
Android / build (push) Waiting to run
CodeQL / Analyze (cpp) (push) Waiting to run
CodeQL / Analyze (javascript) (push) Waiting to run
Docker / build (push) Waiting to run
Linux / build (push) Waiting to run
macOS / build (push) Waiting to run
Windows / build (push) Waiting to run

This commit is contained in:
xia-chu 2025-09-09 23:11:19 +08:00
parent 5686027fc2
commit 88b422db08
5 changed files with 28 additions and 25 deletions

View File

@ -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);
} }
} }

View File

@ -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
} }
] ]
} }

View File

@ -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;
} }

View File

@ -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();
} }
} }

View File

@ -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 (); 0300
* [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;