瀏覽器不支持flash插件之後,h5播放rtmp直播流的解決方案
JavaCV轉封裝rtsp到rtmp(無需轉碼,低資源消耗)
海康sdk捕獲碼流數據通過JavaCV推成rtmp流的實現思路(PS流轉封裝RTMP)
相關資源:
nginx-http-flv:https://download.csdn.net/download/weixin_40777510/12513147
nginx-rtmp:https://download.csdn.net/download/weixin_40777510/12270281
RTSPtoRTMP開源項目地址:https://gitee.com/banmajio/RTSPtoRTMP
HCSDKtoRTMP項目地址:https://gitee.com/banmajio/HCSDKtoRTMP
rtmp在線測試地址:http://cloud.liveqing.com:10080/#/liveplayer
http-flv在線測試地址:http://bilibili.github.io/flv.js/demo/
背景
目前監控直播大多采用rtmp-nginx-flash來進行無插件播放的。但是2020年底,所有瀏覽器不再支持flash插件之後,rtmp的視頻流就不能在瀏覽器中播放了。這個時候可以採用將rtmp重新封裝成http-flv的視頻流,採用flv.js來進行播放。
幾種視頻流比較
協議 | http-flv | rtmp | hls |
---|---|---|---|
傳輸方式 | http流 | tcp流 | http流 |
視頻封裝格式 | flv | flv | Ts文件 |
延遲 | 低 | 低 | 高 |
數據分段 | 連續流 | 連續流 | 切片文件 |
h5播放 | flv.js | video.js | hls.js |
http-flv搭配flv.js播放方案
rtmp和http-flv的視頻格式都是flv格式的,只是傳輸協議而不同。rtmp是tcp的傳輸協議,而http-flv是http長鏈接的傳輸協議。
可以採用搭載http-flv模塊的nginx服務對rtmp流重新封裝爲http-flv的流進行分發。搭載http-flv的nginx服務可以通過nginx-http-flv此處下載,已經編譯成可執行的.exe文件,直接雙擊即可運行。端口即其他配置修改nginx.conf文件即可。
也可以通過下載源碼,自行編譯生成可執行文件:https://github.com/winshining/nginx-http-flv-module
rtmp與http-flv地址格式
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#error_log logs/error.log debug;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
# 添加RTMP服務
rtmp {
server {
listen 1935;
application live {
live on;
}
}
}
# 添加http-flv服務
http {
server {
listen 8080;
server_name localhost;
location /live {
flv_live on;
chunked_transfer_encoding on; #open 'Transfer-Encoding: chunked' response
add_header 'Access-Control-Allow-Credentials' 'true'; #add additional HTTP header
add_header 'Access-Control-Allow-Origin' '*'; #add additional HTTP header
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
add_header 'Cache-Control' 'no-cache';
}
}
}
如上配置,可以通過nginx服務同時分發rtmp流和http-flv流。
rtmp直播地址:rtmp://192.168.0.31:1935/live/streamid
http-flv直播地址:http://192.168.0.31:8080/live?port=1935&app=live&stream=streamid
直播在線測試地址:
rtmp在線測試地址:http://cloud.liveqing.com:10080/#/liveplayer(需要加載flash插件)
http-flv在線測試地址:http://bilibili.github.io/flv.js/demo/(不需要flash插件)