ZLMediaKit icon indicating copy to clipboard operation
ZLMediaKit copied to clipboard

[技术咨询] 关于ZLM的RTP服务长期驻留问题咨询

Open xuandu opened this issue 1 year ago • 7 comments

咨询的功能模块 前方需求, NVR---转码---ZLM---播放器;播放器看NVR回放流;(为什么不直接访问NVR?因为要做转码,转码组件又不支持高并发,和均衡负载)

如果播放器点击暂停;需要保证ZLM的某端口的RTPserver依然存在,播放器会每隔一段时间进行检测是否存在数据源; 但是播放器暂停的时间是不定的,可能1分钟,可能1天,可能很久;我本来想,这对于ZLM就是直播拉流,暂停以后载播放重拉不就好了。但是他们的逻辑非要要求ZLM那个数据源的服务就要一直在。em....

我看之前有大佬开发了:下边这个接口,用于5分钟左右检测一次服务是否在;我想配合着使用; {{ZLMediaKit_URL}}/index/api/pauseRtpCheck?secret={{ZLMediaKit_secret}}&stream_id=test

想把RTP超时时间改成永久;或者n天; 或者这里,点击暂停后,我加个接口,超时之后不erase server->start( local_port, stream_id, (RtpServer::TcpMode)tcp_mode, local_ip.c_str(), re_use_port, ssrc, only_audio, disableUdp); server->setOnDetach(stream_id { //设置rtp超时移除事件 lock_guard<recursive_mutex> lck(s_rtpServerMapMtx);

    s_rtpServerMap.erase(stream_id);-----if(pauseRTPserver){ not erase }
    });

咨询的具体内容和问题 (1)如果我不删除 s_rtpServerMap的streamid;或者指定某个streamID的超时时间很长;这个是否会影响正常功能,或者造成资源浪费,亦或是引发其他严重问题? (2)如果能设置长期超时或者不erase rtpserver;我除了修改下边,还需要一些别的吗?比如心跳?不咋董网络的东西,所以多问下。 server->start( local_port, stream_id, (RtpServer::TcpMode)tcp_mode, local_ip.c_str(), re_use_port, ssrc, only_audio, disableUdp); server->setOnDetach(stream_id { //设置rtp超时移除事件 lock_guard<recursive_mutex> lck(s_rtpServerMapMtx);

      s_rtpServerMap.erase(stream_id);----->>>if(pauseRTPserver){ not erase }
      });

注意事项

  • 技术咨询前请先认真阅读readme, wiki,如有必要,您也可以同时搜索已经答复的issue,如果没找到答案才在此提issue

  • 技术咨询不属于bug缺陷,要求用户先star(收藏)本项目,否则会直接关闭issue

xuandu avatar Jun 14 '23 04:06 xuandu

udp的可以这么搞 tcp的不行 tcp链接如果没数据好像最大保留2个小时左右吧

xia-chu avatar Jun 14 '23 07:06 xia-chu

你这个其实可以做成按需推流功能

xia-chu avatar Jun 14 '23 07:06 xia-chu

你这个其实可以做成按需推流功能

刚问了下他们是UDP的,所以我想保底我还能加个Pause接口,让这个rtpserver长期驻留;

您说的按需推是?点击暂停之后,MediaServer一直开着,恢复的时候再拉流触发on_play,在on——play的回调里 调用openrtpserver,并让转码组拉数据源然后推流给ZLM?大佬细说

xuandu avatar Jun 14 '23 08:06 xuandu

你这个其实可以做成按需推流功能

刚问了下他们是UDP的,所以我想保底我还能加个Pause接口,让这个rtpserver长期驻留;

您说的按需推是?点击暂停之后,MediaServer一直开着,恢复的时候再拉流触发on_play,在on——play的回调里 调用openrtpserver,并让转码组拉数据源然后推流给ZLM?大佬细说

通过hook的streamnotfound 与 streamnoreader 来完成按需拉流与无人观看关闭推流

xiongguangjie avatar Jun 15 '23 01:06 xiongguangjie

好的,多谢两位大佬的回复

xuandu avatar Jun 15 '23 01:06 xuandu

想咨询一下这个问题: TCP连接不传输数据最长保持2小时(之后Keepalive);因为看网上很多CSDN博客都有说,但是我自己从网上搞了个tcp demo 测试了两天之后发现仍然能连接,就不知道该怎么理解这个TCP保持时间了 3088f tcp.pcap.zip 测试demo.zip

xuandu avatar Apr 15 '24 03:04 xuandu

在tcp协议中tcp链接长时间传输数据是可行的(在协议上),但是一般运营商,会强制掐断链接

xiongguangjie avatar Apr 15 '24 11:04 xiongguangjie