Bug #3398
SHL15CISCS列车cctvL15CZuid和cctvL15Trainuid.dll对收到RTP码流后的10秒保活发送ip错误(需要从invite回答的200OK中提取码流服务器ip)
0%
Description
QTISCSv304R4 win10
SHL15CISCS列车拉流插件cctvL15CZuid和cctvL15Trainuid.dll对收到RTP码流后的15秒保活发送ip错误(需要从invite回答的200OK中提取码流服务器ip)
导致收到ip159的码流后,仍然向ip158发送RTCP心跳,159收不到心跳保活后,停止发送码流
抓包位置==\\192.168.2.250\upload\M15\0备份\SHL15wifi车载摄像头159Mark码流卡断停止推送2024041015-RTCP心跳固定网158发错.pcapng
cctv信令服务器ip=10.21.0.6;LTE码流服务器ip=10.21.0.158;WIFI码流服务器ip=10.21.0.159
调度工作站插件ip=10.43.91.39
cfg\CZCctvUISet.ini(所有列车拉流,bin\cctvL15CZuid.dll)
cfg\TrainCctvUISet.ini(单列车电子地图拉流,bin\cctvL15Trainuid.dll)
的VideoSrcServerIP配置视频RTP码流源ip,不能固定配置死。
int MainForm::getServerRtcpPort(QString szReturn)跟据200 OK返回消息,增加提取码流服务器ip地址,更新m_szVideoServerIP,用于void MainForm::sendRTCPToServer()
Files
History
Updated by yufeng wu 6 months ago
//收到INVITE 200 OK的包以后,要解析消息体里面的 m: video XXXXX RTP/AVP 取中间的端口,
//加1以后的端口号,就是服务用来接收RTCP流的端口(这个流内容没有特定要求,每隔10S发送一次,不然视频流会停止).
int MainForm::getServerRtcpPort(QString szReturn)
{//Added by WYF 20240428
QString szStartIp = "c=IN IP4 "; QString szEndIp = "\r";//\r\n
int nStartIp = szReturn.lastIndexOf(szStartIp, -1, Qt::CaseInsensitive);
if (nStartIp == -1 )
{
return -1;
}
nStartIp += szStartIp.length();
QString szVideoServerIP = szReturn.mid(nStartIp, 15);//255.255.255.255
int nEndIp = szVideoServerIP.lastIndexOf(szEndIp, -1, Qt::CaseInsensitive);
if (nEndIp == -1)
m_szVideoServerIP=szVideoServerIP;
else
m_szVideoServerIP = szVideoServerIP.mid(1, nEndIp - 1);
//Added by WYF 20240428
QString szStart = "video";// "VIDEO";
QString szEnd = "RTP/AVP";
int nStart = szReturn.lastIndexOf(szStart, -1, Qt::CaseInsensitive);
int nEnd = szReturn.lastIndexOf(szEnd, -1, Qt::CaseInsensitive);
if (nStart -1 || nEnd -1)
{
return -1;
}
nStart += szStart.length();
QString szPort = szReturn.mid(nStart, nEnd - nStart);
int nRtcpPort = szPort.trimmed().toInt() + 1;
return nRtcpPort;
}