PHP結合Ffmpeg快速搭建流媒體服務的實踐記錄_第1頁
PHP結合Ffmpeg快速搭建流媒體服務的實踐記錄_第2頁
PHP結合Ffmpeg快速搭建流媒體服務的實踐記錄_第3頁
PHP結合Ffmpeg快速搭建流媒體服務的實踐記錄_第4頁
PHP結合Ffmpeg快速搭建流媒體服務的實踐記錄_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論