RTSP WebRTC 折腾
公司趁着疫情做了款热成像摄像头,需要做个客户端来播放热成像画面和记录体温等等。
因为项目急用的是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有关