問題現象:現場hik ipc在vlc通過rtsp取流位址(rtsp://admin:[email protected]:554/Streaming/Channels/101?transportmode=unicast)取流,發現vlc界面并沒有畫面,但是看編碼統計卻是有收到碼流包的。而且換另一個ipc可以預覽,僅僅這個可以而已。
分析:據我所了解,rtsp取流跟onvif是一緻的,也就是根據封包互動來确定取流、發流的相關屬性。思路:分别抓包,看封包,對比,猜測,驗證。
首先抓了個能預覽的:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 來的碼流包是RTP?納尼,發現了些什麼東西。熟悉的作案手法,RTP分析一波:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 丢包率看起來還稍微能接收的樣子。此時想起現場回報過這個ipc能預覽,但是有時會卡,猜測就是這1%+的丢包所緻,繼續看其他的:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 另外一個是UDP,轉RTP分析看看:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... WC!這丢包率能播放就神奇了,再看另一個,
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 好吧,基本上能确定是網絡丢包所導緻的。但是平常見到hik rtsp取流不都是tcp嗎,怎麼這裡是udp的?問了下,才知道原來vlc可以設定的。
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 預設是通過HTTP進行流傳輸,也就是udp,網絡不太好的時候,要改成tcp才行。測試一發,果然沒問題。
到這裡問題是查出原因了,接下來繼續了解下rtsp吧!抓一下tcp和udp的封包,compare對比一下看看有何差異:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 就是SETUP指令,這裡預設是通過UDP進行流傳輸,指定TCP後才會通過tcp流傳輸。
然後看到這篇文章,講解很詳細!
以下内容轉載:
下面是我用VLC播放器擷取海康NVR視訊的截圖(此次擷取是基于TCP的):
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 下面來看一下針對每一條消息的詳細截圖:
用戶端發送的OPTION消息:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 伺服器對OPTION回複的200OK消息:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 用戶端發送的DESCRIBE不帶鑒權的消息:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 伺服器回複的401消息:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 用戶端請求帶鑒權的DESCRIBE消息:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 伺服器回複200OK消息帶SDP消息體:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 用戶端請求的SETUP消息:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 伺服器對SETUP回複的200OK消息:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 用戶端發起PLAY消息:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 伺服器針對PLAY回複的200OK消息:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 伺服器發送完PLAY的200OK消息以後就開始發送資料,RTP基于TCP的資料傳輸截圖如下:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)...
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 用戶端發送的TEARDOWN消息:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... VLC停止播放時沒有收到伺服器針對TEARDOWN消息發送的200OK消息,不知道是什麼原因,初步懷疑是海康NVR沒有發送這個消息。
以上是基于TCP的截圖,下面是針對UDP的截圖,隻截取和TCP不同的部分,相同的部分不再截圖,請參考TCP截圖:
第一個不同點是SETUP消息及回複部分:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)...
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 資料傳輸部分:
vlc搭建rtsp伺服器不顯示路徑,VLC通過RTSP位址向IPC取流播放不了問題排查(示例代碼)... 總結:以上是RTP基于TCP和UDP傳輸資料不同的地方