libRTSPServer 频繁断连测试崩溃问题解决

##libRTSPServer 频繁断连测试崩溃问题解决

###背景

这个问题困扰了好久, 60路视频,每5秒断开一次连接再重连,少则一小时,多则一天, 直接崩溃.
分析调试了比较长一段时间, 结论如下:
rtsp客户端已关闭, 相应的ServerMediaSession也已释放, 并且已回调出关闭流的命令, 而此时在队列中仍有一个延时任务, 等到超时时,任务执行, 但相应的资源已不存在, 则直接崩溃了;

修改代码如下:

	LiveServerMediaSession::~LiveServerMediaSession() 
	{
		RTSPSvrCallBack	pCallback = (RTSPSvrCallBack )*callbackPtr;

		if (NULL != channelPtr)
		{
			LIVE_CHANNEL_OBJ_T	*pChannel = (LIVE_CHANNEL_OBJ_T *)channelPtr;
			if (NULL != pChannel)
			{
				if (NULL != pChannel->liveSource)
				{
					Medium::close(pChannel->liveSource, pChannel->liveSource->GetEnvironment());
					pChannel->liveSource = NULL;
				}
				if (NULL != pCallback)
				{
					envir().SetEnvirCount(-1);

					pCallback(RTSP_CHANNEL_STOP_STREAM, pChannel->streamName, (RTSP_CHANNEL_HANDLE*)&pChannel, &pChannel->mediainfo, NULL, userPtr, pChannel->channelUserPtr);
					pCallback(RTSP_CHANNEL_CLOSE_STREAM, pChannel->streamName, (RTSP_CHANNEL_HANDLE*)&pChannel, &pChannel->mediainfo, NULL, userPtr, pChannel->channelUserPtr);

					envir().SetEnvirCount(-1);

					envir().ResetChannel(1, NULL);		//执行通道复位, 复位部分在上一篇"libRTSPServer实现主动关闭指定通道"中;
				}
			}
		}
	}

因本代码中增加了多线程及其它功能,所以参数上会与live555官方代码有些许不同;

####下载地址:
https://pan.baidu.com/s/129_dxIrui3YB69L3YAKqVw

交流QQ: 760983740

你可能感兴趣的:(live555)