yangjiechina / JGB28181

基于Java实现的GB28181平台
159 stars 75 forks source link

好像当IPC已经开始推流,TCPServer却还没启动成功时,会导致IPC停止推流。 #6

Open hudt opened 4 years ago

hudt commented 4 years ago

ActionController的Play方法里,先通知IPC推流(mSipLayer.sendInvite),等待响应之后,才启动TCPServer的。 如果IPC推流较慢,TCPServer已经启动完成,则没有什么问题。 但如果IPC推流时间比TCPServer启动时间早,则可能会导致IPC认为不可达断流。 重现方法: if(response != null ){ Thread.sleep(1000) //code }

我有两台IPC,其中一台(电信)与服务器(移动)是跨运营商的,推流一直可以推。另一台IPC(移动)则不怎么容易推流成功。所以我猜测是这个原因

yangjiechina commented 4 years ago

有抓包的数据吗,如果握手失败,就是这个问题。

hudt commented 4 years ago

我刚才把TCPServer启动提前了,并且1秒后再向IPC发送推流(mSipLayer.sendInvite)命令,这个问题就没有再出现过了。再在TCPSever中加入这样一个功能,10秒内没有收到推流帧,自动关闭TCPSever,这样来防止TCPSever启动了,IPC却没有推流或者Respnse失败。

hudt commented 4 years ago

我试试看能不能抓包

hudt commented 4 years ago

有抓包的数据吗,如果握手失败,就是这个问题。

第一台抓包数据图片 第二台抓包数据图片

第一台抓包数据 第二台抓包数据