1. 程式人生 > 實用技巧 >使用FFmpeg+Nginx+VideoJS將攝像頭rtsp流轉碼成rtmp流並播放

使用FFmpeg+Nginx+VideoJS將攝像頭rtsp流轉碼成rtmp流並播放

工具介紹

FFmpeg:FFmpeg是一套可以用來記錄、轉換數字音訊、視訊,並能將其轉化為流的開源計算機程式。github地址:https://github.com/FFmpeg/FFmpeg

Nginx:Nginx(engine x) 是一個高效能的HTTP和反向代理web伺服器,同時也提供了IMAP/POP3/SMTP服務。因它的穩定性、豐富的功能集、示例配置檔案和低系統資源的消耗而聞名。

nginx-rtmp 是由俄羅斯人開發的 NGINX 模組,該模組完善了 NGINX 對視訊的支援,並且實現了對 HLS 的支援。

VideoJS:Video.js 是一個通用的在網頁上嵌入視訊播放器的 JS 庫,Video.js 自動檢測瀏覽器對 HTML5 的支援情況,如果不支援 HTML5 則自動使用 Flash 播放器。

轉流步驟

攝像頭IP Camera輸出的視訊流一般為rtsp流,系統播放需要先將rtsp流轉為rtmp流.

轉流可以使用ffmpeg程式,將攝像頭rtsp流轉為rtmp流,推送給nginx-rtmp伺服器,釋出出來.

1.啟動nginx-rtmp伺服器

雙擊啟動nginx.exe, 伺服器視窗會一閃而過, 此時檢視工作管理員, 如果有兩個nginx程序在執行, 則說明啟動成功

2.使用FFmpeg轉流, 並推送給nginx

win+r開啟cmd視窗, 進入FFmpeg伺服器所在的目錄, 使用如下命令將本地攝像頭的rtsp碼流轉成rtmp碼流, 並推送給nginx

ffmpeg -i "rtsp://admin:[email protected]:554/h264/ch1/main/av_stream" -vcodec copy -an -f flv "rtmp://127.0.0.1:1935/live/test"

其中rtsp://admin:[email protected]:554/h264/ch1/main/av_stream為本地攝像頭的碼流地址,rtmp://127.0.0.1:1935/live/test是nginx推送rtmp的地址(具體埠可以在nginx.conf中修改)

此時rtsp流就通過FFmpeg轉碼, 並通過nginx伺服器釋出出來了

3.使用VideoJS播放rtmp視訊流

3.1.在web工程中匯入VideoJS專案

3.2.配置rtmp地址到VideoJS

<!DOCTYPE html>
<html lang="en">
 
    <head>
        <meta charset="
UTF-8"> <title>Test</title> <script src="js/video-js-5.19.2/video.js"></script> <link type="text/css" rel="stylesheet" href="js/video-js-5.19.2/video-js.css" /> <!--<script> videojs.options.flash.swf = "video-js.swf"; </script>--> </head> <body> <video id="example_video_1" class="video-js vjs-default-skin" controls preload="none" width="640" height="480" data-setup="{}"> <source src="rtmp://127.0.0.1:1935/live/test" type="rtmp/flv" /> <!--<source src="http://localhost:10080/hls/ipc1/ipc1.m3u8" />--> </video> </body> </html>

3.3.執行播放

如果chrome瀏覽器無法播放, 則設定啟用flash控制元件

3.4.播放效果

到此, 攝像頭rtsp流通過FFmpeg成功轉成了rtmp流並在nginx中釋出, 並在video.js中播放

測試工程包地址

https://download.csdn.net/download/liu844133828/11175176