




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第PHP結合Ffmpeg快速搭建流媒體服務的實踐記錄一、背景
ffmpeg應該是目前最強大的視頻管理程序,當你需要截取視頻第一幀,對視頻類型進行轉換,截取gif圖片等一系列對視頻的操作,ffmpeg絕對是最好的擴展
筆者想將自己收藏的一些電影放到網站上可以用來隨時播放,不過遇到了一個問題,便是如果直接將MP4文件放放到網站目錄當中,手機端必須下載整個視頻才可以播放,而如果跨外網傳輸,這實在是不太現(xiàn)實。
為了解決這個問題,便想著搭建一套流媒體服務,這樣手機就可以邊看邊下載,查詢了一些資料了了解到需要先將視頻分成一小片來傳輸,比如將MP4轉碼為M3U8格式,查詢了相關轉碼方法,比較主流的方式是使用ffmpeg這個開源工具
二、操作概要
安裝Ffmpeg
服務搭建
功能測試
三、搭建ffmpeg
視頻轉碼的工具可能有很多,但開源且使用人數(shù)最多的還是莫過于ffmpeg這個工具,具體功能筆者不在這里詳細講解;安裝此工具的方式有很多,比如apt安裝、源碼安裝、docker安裝等等,不過docker是跨平臺的,因此筆者這里將以docker方式安裝為例
3.1鏡像下載
首先筆者需要下載對應的docker鏡像,參考命令如下
dockerpulljrottenberg/ffmpeg
命令執(zhí)行過程中將會從遠處下載鏡像,這個時間由當前的網絡帶寬所決定,當下載完成之后,可以看到如下參考信息
Usingdefaulttag:latest
latest:Pullingfromjrottenberg/ffmpeg
b234f539f7a1:Pullcomplete
55172d420b43:Pullcomplete
5ba5bbeb6b91:Pullcomplete
43ae2841ad7a:Pullcomplete
f6c9c6de4190:Pullcomplete
2a0ef76bfa54:Pullcomplete
40ddf796a4bb:Pullcomplete
32ba137d2764:Pullcomplete
Digest:sha256:bcf65375f593518de7e450fd6b775d16a047d3ded00957c2e794e2fe8f7e1590
Status:Downloadednewerimageforjrottenberg/ffmpeg:latest
3.2容器運行
當容器下載完畢之后,可以用一些命令進行驗證是否能夠正常運行,如下參考命令
dockerrunjrottenberg/ffmpeg
命令執(zhí)行完畢之后,會返回如下結果
HyperfastAudioandVideoencoder
usage:ffmpeg[options][[infileoptions]-iinfile]...{[outfileoptions]outfile}...
Gettinghelp:
.....省略
Audiooptions:
-aframesnumbersetthenumberofaudioframestooutput
-aqqualitysetaudioquality(codec-specific)
-arratesetaudiosamplingrate(inHz)
-acchannelssetnumberofaudiochannels
-andisableaudio
-acodeccodecforceaudiocodec('copy'tocopystream)
-volvolumechangeaudiovolume(256=normal)
-affilter_graphsetaudiofilters
Subtitleoptions:
-ssizesetframesize(WxHorabbreviation)
-sndisablesubtitle
-scodeccodecforcesubtitlecodec('copy'tocopystream)
-stagfourcc/tagforcesubtitletag/fourcc
-fix_sub_durationfixsubtitlesduration
-canvas_sizesizesetcanvassize(WxHorabbreviation)
-sprepresetsetthesubtitleoptionstotheindicatedpreset
3.3查看支持協(xié)議
FFmpeg所支持的輸入輸出協(xié)議非常多,比如可以選擇file協(xié)議作為來源,使用hls協(xié)議作為輸出結果,具體所支持的協(xié)議可以通過如下命令查看
dockerrunjrottenberg/ffmpeg-protocols
執(zhí)行命令之后,參考結果如下
ffmpegversion3.4.2Copyright(c)2000-2025theFFmpegdevelopers
builtwithgcc5.4.0(Ubuntu5.4.0-6ubuntu1~16.04.9)20160609
configuration:--disable-debug--disable-doc--disable-ffplay--enable-shared--enable-avresample--enable-libopencore-amrnb--enable-libopencore-amrwb--enable-gpl--enable-libass--enable-libfreetype--enable-libvidstab--enable-libmp3lame--enable-libopenjpeg--enable-libopus--enable-libtheora--enable-libvorbis
.....省略
Supportedfileprotocols:
Input:
async
cache
concat
crypto
data
.....省略
Output:
crypto
file
.....省略
udp
3.4轉換測試
現(xiàn)在筆者使用FFmpeg對視頻進行轉碼測試,命令非常簡單,首先需要通過-v將視頻所在的目錄掛載到容器中,然后使用-i選項找到容器中對應的視頻文件;
接著就可以對編碼進行一些選項,比如-hls_time10便是將文件沒10秒輸出一個TS文件,-hls_list_size0則是在m3u8文件中記錄所以ts文件(默認是記錄最后五個TS文件),參數(shù)最后則填寫文件輸出路徑,具體參考命令如下:
dockerrun-v/Users/song/video:/root/downloadjrottenberg/ffmpeg:latest-i/root/download/1.mp4-hls_time10-hls_list_size0-fhls/root/download/index.m3u8
命令執(zhí)行過程中會展示轉換進度,參考如下返回所示
Metadata:
major_brand:mp42
minor_version:0
compatible_brands:mp42mp41
encoder:Lavf57.83.100
Stream#0:0(eng):Video:h264(libx264),yuv420p(progressive),1920x1080,q=-1--1,30fps,90ktbn,30tbc(default)
Metadata:
creation_time:2025-08-21T15:09:24.000000Z
handler_name:AliasDataHandler
encoder:Lavc57.107.100libx264
Sidedata:
cpb:bitratemax/min/avg:0/0/0buffersize:0vbv_delay:-1
Stream#0:1(eng):Audio:aac,48000Hz,stereo,fltp,128kb/s(default)
Metadata:
creation_time:2025-08-21T15:09:24.000000Z
handler_name:AliasDataHandler
encoder:Lavc57.107.100aac
frame=82fps=12q=29.0size=N/Atime=00:00:02.62bitrate=N/Aspeed=0.381x
此時便可以在剛才的掛載點查看TS文件,如下圖所示
現(xiàn)在筆者將剛才的TS文件都刪除,在下面將使用自動化完成。
四、服務搭建
在上一步中筆者已經成功通過終端使用FFmpeg將視頻進行轉碼,下面筆者將結合PHP代碼將這些操作完全自動化實現(xiàn),這樣便可以達到通過手機訪問網站,服務端自動完成轉碼播放的需求,這個過程包括創(chuàng)建虛擬主機、編寫展示視頻列表、視頻自動解碼三個部分
4.1創(chuàng)建虛擬主機
首先筆者需要借助nginx搭建一個web服務,這時便需要修改配置文件,但并不記得nginx配置文件存放位置,此時可以借助如下命令
sudonginx-t
得到結果如下,在結果中可以便可以看到nginx的配置文件存放位置
nginx:theconfigurationfile/usr/local/etc/nginx/nginx.confsyntaxisok
nginx:configurationfile/usr/local/etc/nginx/nginx.conftestissuccessful
使用vim編輯器直接編輯nginx配置文件
vim/usr/local/etc/nginx/nginx.conf
然后在配置文件中加入如下參考配置信息
server{
listen8089;
server_namelocalhost;
root/Users/song/mycode/work/test/video;
location/{
indexindex.htmlindex.htmindex.php;
location~\.php${
fastcgi_pass127.0.0.1:9000;
fastcgi_indexindex.php;
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
includefastcgi_params;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年血透室護理查房記錄
- 供暖安規(guī)知識培訓課件
- 2024年湖南省衡陽市中考道德與法治真題(附答案)
- 供應鏈管理第五章課件
- 2025年文化藝術經紀代理服務項目建議書
- 供應鏈物流管理課件
- 2025-2030租賃服務行業(yè)市場現(xiàn)狀業(yè)務模式投資機會規(guī)劃分析研究報告
- 供應鏈培訓基礎知識課件
- 供應課件教學課件
- 2025年不透明石英爐襯合作協(xié)議書
- 高二班主任班級管理課件
- 侵蝕性葡萄胎護理查房
- 2025年行政執(zhí)法證考試題庫及參考答案
- 2025年校招:招商銀行試題及答案(可下載)
- 2025年安防生產行業(yè)技能考試-安防工程企業(yè)技術人員能力驗證考試歷年參考題庫含答案解析(5卷100道集合-單選題)
- 2025年康復治療師資格考試試題及答案
- 國際營銷中心管理辦法
- 無痛人流知識課件
- 全國律師會費管理辦法
- 2024年四川省北川縣人民醫(yī)院公開招聘護理工作人員試題帶答案詳解
- 2025年天文知識競賽考試試題
評論
0/150
提交評論