ffmpeg的使用,及發(fā)送媒體流的一些簡單介紹
在以前的文章談過對ffmpeg的編譯。這里談?wù)刦fmpeg的最簡單的使用。
ffmpeg使用語法:
ffmpeg [[options][`-i' input_file]]... {[options] output_file}...
最簡單的使用:ffmpeg –i test_mp4.mp4 test_mpg.mpg (將輸入的mp4容器格式的文件轉(zhuǎn)換成mpg格式文件)
我在做一些機(jī)器人控制實(shí)驗(yàn)時(shí)常常會(huì)得到很多的jpg格式的文件,將這些文件改成連續(xù)的名稱,例如test_jpg00001, test_jpg00002等等,然后可以通過ffmpeg生成一個(gè)視頻文件,這會(huì)很方便演示,例如:
ffmpeg -r 15 -b 1800 -i test_jpg00%03d.jpg test_mp4.mp4 (這里,-r 代表fps 設(shè)置幀頻;–b 代表bitrate 設(shè)置比特率; test_jpg00%03d.jpg中%03d代表最后三位數(shù)字)
做實(shí)驗(yàn)時(shí),直接通過攝像頭可以得到raw picture(也就是YUV或RGB文件),這時(shí)也可以通過ffmpeg將它們轉(zhuǎn)換成mpg或任意容器格式。例如:ffmpeg -s 320*240 -i test_yuv.yuv test_mpg.mpg (這里請注意在寫入輸入文件之前,必須給ffmpeg傳入幀大小,也就是通過 –s 來設(shè)置幀大小)。當(dāng)然了,你也可以將例如mpg格式的文件轉(zhuǎn)換成YUV文件,即,ffmpeg -i test_mpg.mpg test_yuv.yuv。
除了轉(zhuǎn)換格式ffmpeg還可以做更多的事,例如發(fā)送媒體流,通過rtp協(xié)議,可以輸入以下的命令:
ffmpeg -fflags +genpts -re -i test.mpg -vcodec copy -an -f rtp rtp://127.0.0.1:10000 -vn -acodec copy -f rtp rtp://127.0.0.1:20000 -newaudio
其中,-re 代表本地幀頻讀數(shù)據(jù);-an 代表不使能音頻紀(jì)錄;127.0.0.1也就是本地回環(huán)地址,我們常常使用它來測試本機(jī)的網(wǎng)絡(luò)配置,通過PING127.0.0.1來檢測本機(jī)的網(wǎng)卡和IP協(xié)議;當(dāng)然我們還可以使用它來代替SERVER的IP地址,這樣程序就可以在同一臺機(jī)器上運(yùn)行,所有的SERVER的資源就可以裝在本機(jī),我們程序就可以運(yùn)行。
使用ffmpeg發(fā)送了媒體流后,我們可以在寫字板里寫一個(gè)SDP文件(附注:文件的后綴也是.sdp),例如:
v=0
o=- 0 0 IN IPV4 127.0.0.1
t=0 0
s=No Name??
a=tool:libavformat 52.23.1
m=video 10000 RTP/AVP 32
c=IN IP4 127.0.0.1
b=AS:104857
m=audio 20000 RTP/AVP 14
c=IN IP4 127.0.0.1
b=AS:64
然后通過vlc就打開這個(gè)sdp文件,就可以播放我們發(fā)送的媒體流了。
#####??? #####
談到了媒體流的發(fā)送,我想繼續(xù)延伸聊聊:我們也可以使用以前介紹過的LIVE555.COM提供的LIVE555 Media Server,來發(fā)送媒體流,很簡單:可以直接下載live555MediaServer.exe,然后輸入: “l(fā)ive555MediaServer 你的文件”,例如live555MediaServer D:/test.mpg。媒體流就發(fā)送了。然后可以使用vlc來播放,vlc rtsp://本機(jī)IP/文件名(附注:在Window里通過ipconfig可以看本機(jī)IP), 例如 vlc rtsp://131.***.**.101/D:/test.mpg。
結(jié)語:播放媒體流使用vlc或一些其他的工具就在GUI里可以簡單的執(zhí)行了,這篇文章最后一部分是希望給讀者提供一些思路,例如使用ffmpeg,LIVE555發(fā)送,并使用不同的發(fā)送方式和接受方式。