公司趁着疫情做了款熱成像攝像頭,需要做個客戶端來播放熱成像畫面和記錄體溫等等。
因為項目急用的是electron+EasyPlayer的方案 用electron來實現界面,EasyPlayer播放RTSP流。
EasyPlayer疊加在electron上,設置窗體為WS_EX_NOACTIVATE 這樣就不會獲得焦點,還能處理鼠標點擊,electrion最小化 失焦時還要隱藏EasyPlayer
兩個程序通信使用JsonRpc,微軟給提供了C#的實現https://github.com/Microsoft/vs-streamjsonrpc
不過最終目標還是想實現網頁播放rtsp,所以找到了兩個方案 RTSP轉WebRTC和RTSP WebSocket MSE實現
https://github.com/deepch/RTSPtoWebRTC RTSP轉WebRTC
https://github.com/deepch/RTSPtoWSMP4f RTSP WebSocket MSE實現
先研究的RTSP轉WebRTC,這個項目使用Go語言實現,又要學習新語言了。。。
首先clone下來
git clone --depth=1 https://github.com/deepch/RTSPtoWebRTC.git
第一次運行提示 Session Description must not be empty
排查代碼應該是stun服務器連不上 刪掉/web/static/js/app.js第二行的stun:stun.l.google.com:19302
http.go里也有一個,刪之。
再運行發現一直加載出不來畫面,這個問題困擾了好幾天,排查代碼是RTSP協議發送完PLAY命令了始終收不到數據
調試到/github.com/deepch/vdk/format/rtsp/client.go 的readPacket()中 卡在了poll()函數上
最后終於發現換個rtsp服務器就好了,之前用VLC編的RTSP流無法播放,但用VLC播放沒問題。
更新下 已經調通了監控攝像頭,要求設置為H264 HIGH Profile 不然報SPS PPS錯誤
另外SDP解析也有問題 無法識別m=application
瀏覽器版本也有要求 chrome 72以上 跟webrtc的plan-b和unified-plan有關