live555流媒体服务器在解决客户端异常掉线后没有释放相应资源问题的解决方法后续

在上一篇《live555流媒体服务器在解决客户端异常掉线后没有释放相应资源问题的解决方法》的没有释放稍有区别,上一篇是某一个通道没有客户端访问了, 要释放相应资源,而今天要说的,是多个客户端访问同一路源, 其中某个客户端异常断电了(比如NVR断电), 上次的方法就不适用于这种情况了。

例如,两台电脑上分别打开一个客户端,连接EasyRTSPServer中的同一个源,在播放过程中,将一台电脑的网卡直接禁用(模拟突然掉电), 而另一台电脑上的客户端还在正常播放;

通过命令ss -ntp | grep 554 查看当前连接; 发现连接仍然在, 相应的socket没有被关闭,但通过打印可以看出,已经执行了RTSPClientSession的析构了, 而没有执行到RTSPClientConnection的析构;

顺便说一下: Windows环境下没有该问题, 只有Linux环境下会出现;

解决方法

在ClientSession中,保存相应的RTSPClientConnection的指针, 当ClientSession被析构时,创建一个延时任务来关闭相应的RTSPClientConnection, 代码如下:

void GenericMediaServer::ClientSession::CloseConnectionTask(ClientConnection *clientConnection)
{
	if (NULL == clientConnection)			return;
	if (clientConnection->GetFlag() != LIVE_FLAG)		return;

	clientConnection->handleRequestBytes(-1, clientConnection->pClientConnectionEnv);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值