Nginx+FFmpeg實現rtsp流轉hls流,在WEB通過H5 video實現視訊播放

打不死的小強lee發表於2019-07-31

一、FFmpeg+Nginx轉流hls

1、FFmpeg安裝

官網:http://ffmpeg.org

windows下安裝:

http://ffmpeg.zeranoe.com/builds/ ,下載並解壓FFmpeg資料夾,配置環境變數:在“Path”變數原有變數值內容上加上d:\ffmpeg\bin,驗證:ffmpeg -version 出現版本號則成功。

Linux下安裝:

(1)下載最新原始碼包並解壓

$ wget http://ffmpeg.org/releases/ffmpeg-4.1.tar.gz
$ tar zxvf ffmpeg-4.1.tar.gz

(2)安裝ffmpeg

$ cd ffmpeg-4.1/
$ ./configure

報錯:
在這裡插入圖片描述
(3)安裝yasm

$ yum install yasm

(4)繼續安裝ffmpeg

$ ./configure
$ make
$ make install

(5)測試

$ ffmpeg

輸入ffmpeg列印了相關資訊,表示安裝成功
在這裡插入圖片描述

2、Nginx安裝

Windows下安裝:

windows下安裝nginx

Linux下安裝:

Centos7下安裝Nginx

3、Nginx配置

修改配置檔案:nginx/conf/nginx.conf
在http --> server下增加:

# ffmpeg生成hls流的http訪問配置
location /hls {
    #若nginx\conf\mime.types中沒有配置如下type,請加上,或直接在mime.types加
	#types{
	#	application/vnd.apple.mpegurl m3u8;
	#	application/x-mpegURL m3u8;
	#	video/mp2t ts;
	#}
	root html;
	#add_header Cache-Control no-cache;
	add_header Access-Control-Allow-Origin *;
}

注: 下面用ffmepg轉流需要指定目標路徑為上面配置的nginx/html/hls
然後,啟動nginx服務

4、FFmpeg命令列轉流

ffmpeg -i "rtsp://admin:ajb123456@192.168.10.36" -c copy -f hls -hls_time 2.0 -hls_list_size 1 -hls_wrap 15 D:/nginx/html/hls/test.m3u8

其中: D:/nginx/html/hls/test.m3u8 是對應nginx.conf配置中的hls訪問路徑/hls

ffmpeg 關於hls方面的指令說明:

  • -hls_time n: 設定每片的長度,預設值為2。單位為秒
  • -hls_list_size n:設定播放列表儲存的最多條目,設定為0會儲存有所片資訊,預設值為5
  • -hls_wrap n:設定多少片之後開始覆蓋,如果設定為0則不會覆蓋,預設值為0.這個選項能夠避免在磁碟上儲存過多的片,而且能夠限制寫入磁碟的最多的片的數量
  • -hls_start_number n:設定播放列表中sequence number的值為number,預設值為0

用java封裝了操作FFmpeg的util。參見:https://github.com/powerLeePlus/java-FFmpeg-rtsp2hls

二、HTML通過H5播放

參考 瀏覽器播放m3u8檔案 ,將source --> src改為:http://192.168.5.202:80/hls/test.m3u8,如下:

<source src="http://192.168.5.202/hls/test.m3u8" type="application/x-mpegURL">

瀏覽器開啟index.html。點選開始播放,即可看到效果。
在這裡插入圖片描述

參考:
Linux-安裝FFmpeg
ffmpeg+nginx+video實現rtsp流轉hls流,通過H5檢視監控視訊
ffmpeg java 實時視訊流轉碼(ffmpeg-cli-wrapper
https://github.com/bramp/ffmpeg-cli-wrapper/
java封裝FFmpeg命令,支援原生ffmpeg全部命令,實現FFmpeg多程式處理與多執行緒輸出控制(開啟、關閉、查詢),rtsp/rtmp推流、拉流

相關文章