前幾天經理給我安排了一個新任務,將網絡攝像頭用rtsp協議在頁面播放,由於我之前作的是http協議的,根據攝像頭的API來實現的,因此這一塊根本不懂,看了前輩們寫的博客,學習到了許多,在這裏記錄下來,之後用的時候還能看看。
目前須要用到技術有ffmpeg、nginx、rtsp以及rtmp協議,頁面播放器VLC、flash、video.js均可以,在使用以前先對這些技術作一個大致的瞭解。
- RTSP
要知道什麼是RTSP?點擊連接
- RTMP
什麼是RTMP?點擊連接
- ffmpeg
什麼是ffmpeg?點擊連接
- nginx
什麼是nginx?點擊連接
ffmpeg的下載地址:https://ffmpeg.zeranoe.com/builds/win64/static/
nginx的下載地址:http://nginx-win.ecsds.eu/download/
根據須要下載本身所須要的版本以後,接下來開始搭建服務器。javascript
將下載下來的ffmpeg的壓縮文件解壓,而後到C盤下面,新建一個文件夾,名稱就是ffmpeg(在原來的路徑也能夠,只不過路徑太麻煩了),而後將解壓的文件所有複製到C://ffmpeg文件夾下面,而後右擊個人電腦圖標——選擇屬性,選擇高級系統設置命令,而後在彈出的窗口中選擇環境變量
在系統變量點擊添加,新建一個Path變量,變量值爲解壓的根文件夾,而後打開bin,個人是在C盤下,因此就是:
而後點擊肯定,退出頁面。
按win+R打開命令行窗口,輸入ffmpeg -version,查看是否安裝成功,若是成功的話,顯示下圖。
步驟進行到這裏,ffmpeg已經配置完成了。css
首先下載本身須要的版本,點擊連接進行下載,將下載的文件解壓到本地,而後再下載一個文件,nginx-rtmp-module-master,將此文件下載以後,解壓放到上面的文件根目錄下便可,下面是配置文件:
一、配置nginx文件,在conf文件夾裏面有一個nginx-win.conf文件,將文件更名爲nginx.conf(此處不改我也不知道可不能夠,看到博客上這樣寫,我就改了),而後裏面配置文件以下:html
……
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;
}
}
}
http{
……
}
原文中還有許多配置,可是我引用以後報錯,不可以實現,因此我就講其餘的刪除了,有須要的能夠看一下原文這個地方的配置信息。
二、使用cmd命令啓動nginx,在命令窗口進入以前解壓的文件夾根目錄,而後輸入start nginx.exe,會彈出一個窗口,閃一下就關閉,以下所示
而後在任務管理器的進程管理中,能夠看到nginx.exe正在運行,到此nginx搭建完畢。
三、在瀏覽器輸入localhost或者127.0.0.1或者本機的IP地址,彈出以下頁面表示搭建成功。
前端
接下來要作的就是把rtsp流轉換爲rtmp流,能夠在播放器中實時播放。
一、在cmd窗口中,打開nginx以後,輸入命令ffmpeg -i 「rtsp://admin:123456@192.168.2.165:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif」 -vcodec copy -acodec copy -f flv 「rtmp://[此處能夠用localhost,能夠用127.0.0.1,也能夠用本機ip]:1935/live/」,以後顯示以下界面表示轉碼成功:
二、轉碼成功以後,將轉碼以後的地址,我這裏是rtmp://127.0.0.1:1935/live,放在vlc播放器中查看實時視頻
三、使用ffplay命令也能夠查看,在命令行輸入ffplay 「rtmp://127.0.0.1:1935/live」,就會看到實時視頻。
四、若是要在頁面中使用的話,須要進行推流處理,就是將rtmp流經過命令進行推流操做,經過本條命令(start ffmpeg -re -i 「rtmp://localhost:1935/live」 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec copy -f flv 「rtmp://localhost:1935/hls/mystream -loglevel quiet)能夠將rtmp流視頻推送到rtmp://localhost:1935/hls/mystream,這個地址後面的mystream能夠隨意寫,可是要跟前面推流過程當中寫的同樣;
五、頁面中使用video.js來播放推送過來的rtmp視頻,頁面是要放到服務器中打開的,單獨打開靜態頁面是沒有用的。
六、還有一種方法,不須要轉碼兩次,直接將rtsp視頻轉碼爲能夠在頁面播放的rtmp流,命令行爲(ffmpeg -re -i 「rtsp://admin:123456@192.168.2.165:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif」 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec copy -f flv 「rtmp://localhost:1935/hls/mystream」)或者(ffmpeg -i 「rtsp://admin:123456@192.168.2.165:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif」 -f flv -r 25 -s 640*480 -an 「rtmp://localhost:1935/hls/mystream」),便可在頁面使用rtmp://localhost:1935/hls/mystream來播放視頻。
頁面部分具體代碼:java
<!DOCTYPE html>
<html lang="en">
<head>
<script src="jquery.js"></script>
<script src="video.js"></script>
<link href="video-js.css" rel="stylesheet">
<script> videojs.options.flash.swf = "video-js.swf"; </script>
</head>
<body>
<video id="my-video" class="video-js vjs-default-skin vjs-big-play-centered" width="800" height="600">
<source src='rtmp://localhost:1935/hls/mystream' type='rtmp/flv'/>
</video>
<script> var player = videojs('my-video'); player.play(); </script>
</body>
</html>
借鑑的博文:
一、http://www.javashuo.com/article/p-wlsuxqkj-p.html
二、http://blog.csdn.net/opengpeng12345/article/details/48492727
三、雷神博客http://blog.csdn.net/leixiaohua1020/article/category/1360795
四、前端播放流媒體(包括RTSP、RTMP、HLS)
五、http://www.bubuko.com/infodetail-580061.htmljquery