一、HLS轉碼fmp4文件:
1、h264:
.\bin\ffmpeg -i .\input\bbb_sunflower_1080p_30fps_normal.h264 -loglevel verbose -vcodec libx264 -force_key_frames "expr:gte(t,n_forced*4)" -f hls -hls_time 4 -hls_list_size 10 -start_number 1 -hls_segment_type fmp4 -hls_fmp4_init_filename .\fmp4_x264\init.mp4 -t 44 .\fmp4_x264\playlist.m3u8
2、h265:
.\bin\ffmpeg -i .\input\bbb_sunflower_1080p_30fps_normal.h265 -loglevel verbose -vcodec libx265 -force_key_frames "expr:gte(t,n_forced*4)" -f hls -hls_time 4 -hls_list_size 10 -start_number 1 -hls_segment_type fmp4 -hls_fmp4_init_filename .\fmp4_x265\init.mp4 -t 44 .\fmp4_x265\playlist.m3u8
參數說明:-i: 輸入文件
-loglevel:輸出log
-vcodec:輸入文件的編碼格式
-force_key_frames:強制4s分割一個m4s
-f hls:格式
-hls_time:hls片段(m4s)的duration
-hls_list_size:播放列表的個數
-start_number:起始的標號
-hls_segment_type:hls封裝格式(fmp4或ts)
-hls_fmp4_init_filename:init.mp4文件
-t 44:視頻分割的總時長
-hls_wrap:最大循環數
m3u8文件:.\fmp4_x264\playlist.m3u8
-
二、HLS轉碼ts文件:
1、h264:
.\bin\ffmpeg -i .\input\input.mp4 -vcodec libx264 -f hls -hls_wrap 10 -hls_time 4 -hls_list_size 10 -t 44 .\ts_x264\playlist.m3u8
h265:
.\bin\ffmpeg -i .\input\bbb_sunflower_1080p_30fps_normal.h265 -vcodec libx265 -acodec libaac -force_key_frames "expr:gte(t,n_forced*4)" -f hls -hls_list_size 10 -hls_wrap 10 -hls_time 4 -t 44 .\ts_x265\playlist.m3u8
三、搭建ngnix服務器
解壓nginx軟件後,雙擊nginx.exe,注意路徑中不能有中文,設置端口不被佔用。將ffmpeg生成的ts片段和playlist.m3u8文件放在html目錄下。進入html目錄點擊index.html文件打開nginx服務,瀏覽器中顯示如下信息,則表示nginx服務器啓動成功。
四、測試
【note】:VCL只能測試ts流,不能測試fmp4流
1、ts流測試
搭建好nginx服務器後,可以使用VLC進行播放驗證。
-
打開VLC軟件,選擇 “媒體 - 打開網絡串流” 選項
-
填入網絡串流的url,點擊 “播放” 按鈕
url:http://127.0.0.1::1080/fmp4_x265/playlist.m3u8
2、fmp4流測試
執行下面的批處理,將init.mp4和playlistx.m4s連接成完整的mp4文件。如果mp4文件播放成功,則說明測試成功。
- init.mp4包含頭信息(VPS、SPS、PPS等參數)
- playlist.m4s包含流媒體內容。
@echo off
:HLS generate
cd .>playlist.mp4
copy /b playlist.mp4+init.mp4 playlist.mp4
for /L %%a in (1,1,10) do (
copy /b playlist.mp4+playlist%%a.m4s playlist.mp4)
pause