最近項(xiàng)目中需要實(shí)時(shí)播放攝像頭rtsp視頻流,于是就專門做了些研究。而瀏覽器不能直接播放,只有通過(guò)插件或者轉(zhuǎn)碼來(lái)實(shí)現(xiàn)這個(gè)需求。
要實(shí)現(xiàn)這個(gè)目的,可以采用的方案非常得多,有商業(yè)的也有開(kāi)源的,這里主要列舉一些開(kāi)源的方案。這里的方案都是我嘗試過(guò)了的,有些成功,有些沒(méi)成功。但是因?yàn)槊總€(gè)項(xiàng)目情況不同,這次沒(méi)成的方法,換個(gè)項(xiàng)目也許就能成。
方案一: html5 + websocket_rtsp_proxy 實(shí)現(xiàn)視頻流直播
實(shí)現(xiàn)步驟
服務(wù)器安裝streamedian服務(wù)器
客戶端通過(guò)video標(biāo)簽播放
if (window.Streamedian) {
var errHandler = function(err){
console.log('err', err.message);
};
var infHandler = function(inf) {
console.log('info', inf)
};
var playerOptions = {
socket: "ws://localhost:8088/ws/",
redirectNativeMediaErrors : true,
bufferDuration: 30,
errorHandler: errHandler,
infoHandler: infHandler
};
var html5Player = document.getElementById("test_video");
html5Player.src = "rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov";
var player = Streamedian.player('test_video', playerOptions);
window.onbeforeunload = function(){
player && player.destroy();
player = null;
Request = null;
}
}
?方案二:ffmpeg + ngnix + video,rtsp轉(zhuǎn)rtmp播放
rtmp是adobe開(kāi)發(fā)的協(xié)議,一般使用adobe media server 可以方便的搭建起來(lái);隨著開(kāi)源時(shí)代的到來(lái),有大神開(kāi)發(fā)了 nginx 的rtmp插件,也可以直接使用nginx實(shí)現(xiàn)rtmp
rtmp方式的最大的優(yōu)點(diǎn)在于低延時(shí),經(jīng)過(guò)測(cè)試延時(shí)普遍在1-3秒,可以說(shuō)很實(shí)時(shí)了;缺點(diǎn)在于它是adobe開(kāi)發(fā)的,rtmp的播放嚴(yán)重依賴flash,而由于flash本身的安全,現(xiàn)代瀏覽器大多禁用flash
實(shí)現(xiàn)步驟
安裝nginx 注意:linux系統(tǒng)需要安裝 nginx-rtmp-module 模塊,Windows系統(tǒng)安裝包含rtmp的(如nginx 1.7.11.3 Gryphon)
更改nginx配置
rtmp{
server{
listen 1935;
application live{
live on;
record off;
}
application hls{
live on;
hls on;
hls_path nginx-rtmp-module/hls;
hls_cleanup off;
}
}
}
ffmpeg轉(zhuǎn)碼
ffmpeg -i "rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov" -f flv -r 25 -s 1080*720 -an "rtmp://127.0.0.1:1935/hls/mystream"
video 播放
video
videojs.options.flash.swf = "./videojs/video-js.swf"
var player = videojs('test_video', {"autoplay":true});
player.play();
方案三:ffmpeg + video,rtsp轉(zhuǎn)hls播放
HLS (HTTP Live Streaming) 直播 是有蘋果提出的一個(gè)基于http的協(xié)議。其原理是把整個(gè)流切分成一個(gè)個(gè)的小視頻文件,然后通過(guò)一個(gè)m3u8的文件列表來(lái)管理這些視頻文件
HTTP Live Streaming 并不是一個(gè)真正實(shí)時(shí)的流媒體系統(tǒng),這是因?yàn)閷?duì)應(yīng)于媒體分段的大小和持續(xù)時(shí)間有一定潛在的時(shí)間延時(shí)。在客戶端,至少在一個(gè)分段媒體文件被完全下載后才能夠開(kāi)始播放,而通常要求下載完兩個(gè)媒體文件之后才開(kāi)始播放以保證不同分段音視頻之間的無(wú)縫連接。
此外,在客戶端開(kāi)始下載之前,必須等待 服務(wù)器 端的編碼器和流分割器至少生成一個(gè)TS文件,這也會(huì)帶來(lái)潛在的時(shí)延。
服務(wù)器軟件將接收到的流每緩存一定時(shí)間后包裝為一個(gè)新的TS文件,然后更新m3u8文件。m3u8文件中只保留最新的幾個(gè)片段的索引,以保證觀眾任何時(shí)候連接進(jìn)來(lái)都會(huì)看到較新的內(nèi)容,實(shí)現(xiàn)近似直播的效果。
這種方式的理論最小延時(shí)為一個(gè)ts文件的時(shí)長(zhǎng),一般為2-3個(gè)ts文件的時(shí)長(zhǎng)。
實(shí)現(xiàn)步驟
ffmpeg轉(zhuǎn)碼
ffmpeg -i "rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov" -c copy -f hls -hls_time 2.0 -hls_list_size 0 -hls_wrap 15 "D:/Program Files/html/hls/test.m3u8"
復(fù)制代碼
ffmpeg 關(guān)于hls方面的指令說(shuō)明
-hls_time n: 設(shè)置每片的長(zhǎng)度,默認(rèn)值為2。單位為秒
-hls_list_size n:設(shè)置播放列表保存的最多條目,設(shè)置為0會(huì)保存有所片信息,默認(rèn)值為5
-hls_wrap n:設(shè)置多少片之后開(kāi)始覆蓋,如果設(shè)置為0則不會(huì)覆蓋,默認(rèn)值為0.這個(gè)選項(xiàng)能夠避免在磁盤上存儲(chǔ)過(guò)多的片,而且能夠限制寫入磁盤的最多的片的數(shù)量
-hls_start_number n:設(shè)置播放列表中sequence number的值為number,默認(rèn)值為0
方案四:liveweb
liveweb是一款超低延時(shí)(150-200毫秒)、秒啟動(dòng)、無(wú)插件web實(shí)時(shí)視頻播放器,h5視頻播放器,支持egde、firefox、Chrome、safari等常見(jiàn)瀏覽器。支持h264、h265、AAC、G711等常見(jiàn)音視頻格式。
支持協(xié)議:RTSP、RTMP、HLS、HTTP-FLV、WebSocket-FLV、GB28181、HTTP-TS、WebSocket-TS、HTTP-fMP4、WebSocket-fMP4、MP4、WebRTC。
支持RTSP/Onvif/GB/T28181/EHome/??礢DK/大華SDK等設(shè)備或者平臺(tái)接入
服務(wù)器包含設(shè)備接入、音視頻直播、流媒體分發(fā)服務(wù)器、錄像存儲(chǔ)和回放服務(wù)等功能。
提供GB28181信令轉(zhuǎn)接和平臺(tái)級(jí)聯(lián)
支持HTTPS 加密等;文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-754699.html
對(duì)外提供HTTP API二次開(kāi)發(fā)接口;文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-754699.html
到了這里,關(guān)于如何解決html播放rtsp視頻,瀏覽器播放rtsp視頻流方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!