以前用的是srs+http-flv/rtmp+flv.js/jwplayer,延時大概2~3秒
爲了進一步減少延時,客戶端選擇直接用webrtc,那麼服務器呢?
由於如今網絡攝像頭大都是rtsp協議,那麼有沒有webrtc+rtsp作直播的呢?(同道中人:https://stackoverflow.com/questions/23461914/use-an-ip-camera-with-webrtc)
google了很久,終於找到了一個叫Kurento的東西。javascript
http://www.kurento.org/
http://doc-kurento.readthedocs.io/en/stable/what_is_kurento.htmlcss
Kurento is a WebRTC media server and a set of client APIs simplifying the development of advanced video applications for web and smartphone platforms. Kurento features include group communications, transcoding, recording, mixing, broadcasting and routing of audiovisual flows.
html
https://github.com/lulop-k/kurento-rtsp2webrtc
這個demon依賴Kurentojava
搭好環境後測試(網頁直接播放網絡攝像頭視頻),效果不理想,延時仍是2秒左右。
可是這個的優化可能性比以前的要大,還要研究下。linux
通過一番努力終於找到解決辦法:
https://github.com/Kurento/kms-elements/pull/3
https://github.com/Kurento/bugtracker/issues/22
修改index.jsgit
pipeline.create("PlayerEndpoint", {networkCache: 0, uri: address.value}, function(error, player){...
原來kurento客戶端提供了接口,延時變爲0.2秒,簡直太他媽爽了。github
官網:http://jsmpeg.com/
Github:https://github.com/phoboslab/jsmpegweb
Kurento確實牛逼,可是要把它移植到ARM上簡直是找虐,我甚至沒有成功移植到個人物理機(kali linux)上,在Ubuntu12上測試成功!
即使是能成功移植,可是體積估計超過咱們的預期容量。在這點上Jsmpeg體現了優點,僅僅須要NodeJS環境,即使不能把NodeJS移植進去,用C寫一個WebSocket服務應該不難。
Github有詳細的安裝教程,我不詳述,簡單記下測試步驟:
一、獲取攝像頭rtsp視頻流發送到websocket服務器(jsmpeg/websocket-relay.js)服務器
ffmpeg -i rtsp://192.168.2.61 -f mpegts -codec:v mpeg1video -s 960x540 -b:v 1500k -r 30 -bf 0 -codec:a mp2 -ar 44100 -ac 1 -b:a 128k http://localhost:8081/supersecret ffmpeg -i rtsp://192.168.2.32 -s 860x640 -f mpegts -vcodec mpeg1video -b 800k -r 30 http://192.168.2.250:8081/supersecret
二、訪問:http://127.0.0.1:8080/view-stream.html (jsmpeg/view-stream.html)就能看到攝像頭的畫面,延時很低具體沒測,實時性知足要求。websocket
top數據:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3815 root 20 0 565184 74264 10972 S 54.2 1.9 1:06.32 ffmpeg 1970 root 20 0 2716632 475728 138652 S 28.2 12.1 13:12.39 Web Content 1879 root 20 0 2613608 383752 127160 S 13.3 9.7 6:37.71 firefox-esr