
FFmpeg 是一個基于命令行的工具,可以利用它進行轉(zhuǎn)碼和推流。這篇文章介紹了如何將FFmpeg當作一個實時編碼器,推流到Wowza Streaming Engine™軟件。
注意: 需要FFmpeg N-52458-gaa96439 及以上版本的支持。隨著新版本的發(fā)布,F(xiàn)Fmpeg 的命令可能會變化很快,所以你最好是從它的官方文檔FFmpeg documentation 了解更多的編碼細節(jié)。
FFmpeg的基本命令說明
FFmpeg的基本命令格式,如下所示:
ffmpeg [input-options] -i [input-file] [output-options][output-stream-URI]
其中:
· [input-options]是一些針對輸入源的可選參數(shù)。例如,如果輸入源是視頻文件,那么-re參數(shù)會根據(jù)輸入文件的幀率對外推送流。
· [input-file]是作為輸入源的視頻文件或要轉(zhuǎn)發(fā)的直播流
· [output-options] 是一些針對輸出流的可選參數(shù)。例如-f參數(shù)設(shè)置了輸入流的格式。
· [output-stream-URI]是輸出流的URL,URL的具體格式依賴輸出流的格式。
使用FFmpeg轉(zhuǎn)發(fā)流下面的這個例子是將Wowza安裝目錄[install-dir]/content/sample.mp4文件作為視頻源對外推送視頻流。
安裝FFmpeg (Windows):
1.下載FFmpeg的最新版本,下載地址:http://ffmpeg.zeranoe.com/builds//。將其解壓縮到Wowza所在的服務(wù)器上。
2.創(chuàng)建一個新的目錄C:/usr/local/share/ffmpeg。將FFmpeg的presets目錄拷貝到這個新的目錄下。
3.打開命令行提示窗口,輸入以下命令,進入FFmpeg的安裝目錄下的bin目錄:
cd[ffmpeg-install-dir]\bin
4.輸入下面的FFmpeg命令將Wowza安裝目錄/content/下的sample.mp4文件做為視頻源通過UDP推送到本機端口:
ffmpeg -re -i"%WMSAPP_HOME%/content/sample.mp4" -vcodec libx264 -vb 150000 -g 60-vprofile baseline -level 2.1 -acodec aac -ab 64000 -ar 48000 -ac 2 -vbsfh264_mp4toannexb -strict experimental -f mpegtsudp://127.0.0.1:10000?pkt_size=1316
5.根據(jù)How to publish and play a livestream (MPEG-TS based encoder) 的介紹配置一個直播應(yīng)用來發(fā)布FFmpeg推送過來的流。當你配置stream file的時候,請使用udp://127.0.0.1:10000?pkt_size=1316作為源流的Stream URI.
在上面的例子中,F(xiàn)Fmpeg推送了一個低碼率、低編碼復(fù)雜度、低質(zhì)量的流,以保障它在大多數(shù)設(shè)備上都可以正常播放。要推送出去一個高質(zhì)量的流,請使用下面的例子:
ffmpeg -re -i"%WMSAPP_HOME%/content/sample.mp4" -vcodec libx264 -vb 500000 -g 60-vprofile main -acodec aac -ab 128000 -ar 48000 -ac 2 -vbsf h264_mp4toannexb-strict experimental -f mpegts udp://127.0.0.1:10000?pkt_size=1316
注意:
· sample.mp4文件的時長大約是6分鐘。在流傳輸結(jié)束后,F(xiàn)Fmpeg將停止推流。因此如果測試期間你要繼續(xù)推流,你就得反復(fù)啟動FFmpeg推流命令。用下面的prefix 參數(shù)可以讓FFmpeg持續(xù)不間斷地循環(huán)推送流:
FOR /L %% IN(0) DO
· 如果Wowza server安裝在另外一臺服務(wù)器上,你需要將udp://127.0.0.1:10000中的IP地址改為Wowza server所在服務(wù)器的IP地址,端口可以改為任意UDP端口。另外要確認這個端口沒被路由器、防火墻屏蔽。
· Microsoft Silverlight 播放器需要關(guān)鍵幀間隔為2秒,因此需要將-r參數(shù) (幀率) 設(shè)置為-g 值(GOP or i-frameinterval)的一半。
用FFmpeg進行轉(zhuǎn)碼
FFmpeg可以用來對RTSP流、native RTP流或MPEG-TS流進行轉(zhuǎn)碼。要對一個視頻源做轉(zhuǎn)碼,請在命令行將輸入源(也就上面例子中的sample.mp4文件)改為對應(yīng)的輸入源,去掉-re參數(shù)。下面是幾個例子:
RTSP/RTP camera
ffmpeg -i"rtsp://[camera-ip-address]/[camera-URI-syntax]" -vcodec libx264 -vb150000 -g 60 -vprofile baseline -level 2.1 -acodec aac -ab 64000 -ar 48000 -ac2 -vbsf h264_mp4toannexb -strict experimental -f mpegtsudp://127.0.0.1:10000?pkt_size=1316
MPEG-TS stream
ffmpeg -i"udp://localhost:[port]" -vcodec libx264 -vb 150000 -g 60 -vprofilebaseline -level 2.1 -acodec aac -ab 64000 -ar 48000 -ac 2 -vbsfh264_mp4toannexb -strict experimental -f mpegtsudp://127.0.0.1:10000?pkt_size=1316
Native RTP stream
ffmpeg -i"unicast.sdp" -vcodec libx264 -vb 150000 -g 60 -vprofile baseline-level 2.1 -acodec aac -ab 64000 -ar 48000 -ac 2 -vbsf h264_mp4toannexb -strictexperimental -f mpegts udp://127.0.0.1:10000?pkt_size=1316
其它推流協(xié)議
FFmpeg 也可以用其它協(xié)議推流,例如RTMP、RTSP/RTP (QuickTime ANNOUNCE).
RTMP
要推送RTMP流,將FFmpeg命令行中輸出流的url做如下修改:
-f mpegts udp://127.0.0.1:10000?pkt_size=1316改為:
-f flv rtmp://127.0.0.1/live/myStream
rtmp流的url格式:rtmp://[wowza-ip-address]:1935/[application]/[streamName].
RTSP/RTP
要推送RTSP/RTP流, 將FFmpeg命令行中輸出流的url做如下修改:
-f mpegts udp://127.0.0.1:10000?pkt_size=1316
改為:
-f rtsp rtsp://127.0.0.1:1935/live/myStream.sdp
RTSP流的url格式: rtsp://[wowza-ip-address]:1935/[application]/[streamName].
其中:
· [wowza-ip-address] 是Wowza服務(wù)器的IP地址
· The [application] Wowza服務(wù)器中應(yīng)用名(例如live 或 vod)。
· The [stream-name] 流的名字。
其它一些FFmpeg命令的例子
需要進行用戶名和密碼驗證的RTSP推流
下面的例子使用了推流認證、H.264/AAC、baselineprofile、level 3.0、24 fps (幀率)、2秒的關(guān)鍵幀間隔、350kbps 碼率, 44.1khz采樣率、立體聲。
ffmpeg -re -isample.mp4 -c:v libx264 -profile:v baseline -level 3.0 -r 24 -g 48 -keyint_min48 -sc_threshold 0 -vb 310k -c:a libvo_aacenc -ab 40k -ar 44100 -ac 2 -f rtsp-muxdelay 0.1 rtsp://username:password@[wowza-ip-address]:1935/live/myStream
RTP推流并生成SDP文件
下面的例子采集當前設(shè)備的攝像頭視頻和麥克風音頻,編碼后推送RTP流,并生成SDP文件,編碼時使用15幀率和12位色彩:
ffmpeg -y -fdshow -s 640x480 -r:v 15 -i video="IntegratedWebcam":audio="Microphone (Realtek High Defini" -c:v libx264-pix_fmt yuv420p -vb 450 -an -map 0:0 -f rtp rtp://127.0.0.1:10000 -flags+global_header -c:a libvo_aacenc -vn -map 0:1 -f rtp rtp://127.0.0.1:10002 >10000.sdp
顯示編碼參數(shù)信息
下面的命令顯示一個VOD文件或直播流的編碼參數(shù)信息,可以用來做故障排查:
ffprobe -show_streams [stream-name]下面是用這個命令查看sample.mp4的編碼參數(shù)信息:
[STREAM]
index=0
codec_name=h264
codec_long_name=H.264/ AVC / MPEG-4 AVC / MPEG-4 part 10
profile=ConstrainedBaseline
codec_type=video
codec_time_base=1/60
codec_tag_string=avc1
codec_tag=0x31637661
width=512
height=288
has_b_frames=0
sample_aspect_ratio=1:1
display_aspect_ratio=16:9
pix_fmt=yuv420p
level=21
timecode=N/A
id=N/A
r_frame_rate=30/1
avg_frame_rate=30/1
time_base=1/15360
start_pts=0
start_time=0.000000
duration_ts=9747968
duration=634.633333
bit_rate=640158
nb_frames=19039
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
TAG:language=und
TAG:handler_name=VideoHandler
[/STREAM]
[STREAM]
index=1
codec_name=aac
codec_long_name=AAC(Advanced Audio Coding)
profile=unknown
codec_type=audio
codec_time_base=1/48000
codec_tag_string=mp4a
codec_tag=0x6134706d
sample_fmt=fltp
sample_rate=48000
channels=2
bits_per_sample=0
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/48000
start_pts=-1024
start_time=-0.021333
duration_ts=30439936
duration=634.165333
bit_rate=96193
nb_frames=29727
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
TAG:language=und
TAG:handler_name=SoundHandler
[/STREAM]
列出可用的視頻和音頻采集設(shè)備名稱
下面的例子列出了當前可用的攝像頭和麥克風設(shè)備名稱:
ffmpeg -list_devices true -f dshow -i dummy
將ts文件轉(zhuǎn)碼為mp4文件
下面的這個例子將ts文件轉(zhuǎn)碼為mp4文件:
ffmpeg -i input.ts -c:v copy -c:a copy output.mp4
檢查關(guān)鍵幀對齊(僅限Linux系統(tǒng))
下面的這個例子檢查了一個視頻內(nèi)容的多個多碼率文件之間關(guān)鍵幀是否對齊。這個例子確認這幾個多碼率文件中每一個關(guān)鍵幀中的PTS和 DTS 時間戳都保持一致。
ffprobe -output_format csv -show_frames [stream-name]|grep I
生成關(guān)鍵幀對齊的視頻文件(僅限Linux系統(tǒng))
這個例子生成了關(guān)鍵針對齊的多碼率文件,它使用了bigbuckbunny_1500.mp4作為源文件,你可以下載下來做個測試。
ffmpeg -y -ibigbuckbunny_1500.mp4 -c:a libfaac -ac 2 -ab 64k -c:v libx264 -preset:vveryfast -threads 0 -r 24 -g 48 -keyint_min 48 -sc_threshold 0 -x264optsno-mbtree:bframes=1 -pass 1 -b:v 286k -s 384x216 bigbuck-350k.mp4
ffmpeg -y -ibigbuckbunny_1500.mp4 -c:a libfaac -ac 2 -ab 64k -c:v libx264 -preset:v fast-threads 0 -r 24 -g 48 -keyint_min 48 -sc_threshold 0 -x264opts no-mbtree:bframes=1-pass 2 -b:v 286k -s 384x216 bigbuck-350k.mp4
ffmpeg -y -ibigbuckbunny_1500.mp4 -c:a libfaac -ac 2 -ab 64k -c:v libx264 -preset:v fast-threads 0 -r 24 -g 48 -keyint_min 48 -sc_threshold 0 -x264optsno-mbtree:bframes=1 -pass 2 -b:v 836k -s 640x360 bigbuck-900k.mp4
Wowza Streaming Engine 4是業(yè)界功能強大、API接口豐富的流媒體Server產(chǎn)品,采用它作為流媒體服務(wù)器產(chǎn)品的案例很多,直播、在線教育、IPTV都有它的用武之地。
京ICP備09015132號-996 | 違法和不良信息舉報電話:4006561155
© Copyright 2000-2026 北京哲想軟件有限公司版權(quán)所有 | 地址:北京市海淀區(qū)西三環(huán)北路50號豪柏大廈C2座11層1105室
北京哲想軟件集團旗下網(wǎng)站:哲想軟件 | 哲想動畫