1. 程式人生 > >FFmpeg傳送流媒體的命令(UDP,RTP,RTMP)

FFmpeg傳送流媒體的命令(UDP,RTP,RTMP)

               

這兩天研究了FFmpeg傳送流媒體的命令,在此簡單記錄一下以作備忘。

1.      UDP

1.1. 傳送H.264裸流至組播地址

注:組播地址指的範圍是224.0.0.0—239.255.255.255

下面命令實現了傳送H.264裸流“chunwan.h264”至地址udp://233.233.233.223:6666

ffmpeg -re -i chunwan.h264 -vcodec copy -f h264 udp://233.233.233.223:6666

注1:-re一定要加,代表按照幀率傳送,否則ffmpeg會一股腦地按最高的效率傳送資料。

注2:-vcodec copy要加,否則ffmpeg會重新編碼輸入的H.264裸流。

1.2. 播放承載H.264裸流的UDP

ffplay -f h264 udp://233.233.233.223:6666

注:需要使用-f說明資料型別是H.264

播放的時候可以加一些引數,比如-max_delay,下面命令將-max_delay設定為100ms:

ffplay -max_delay 100000 -f h264 udp://233.233.233.223:6666

1.3. 傳送MPEG2裸流至組播地址

下面的命令實現了讀取本地攝像頭的資料,編碼為MPEG2,傳送至地址udp://233.233.233.223:6666。

ffmpeg -re -i chunwan.h264 -vcodec mpeg2video -f mpeg2video udp://233.233.233.223:6666

1.4.  播放MPEG2裸流

指定-vcodec為mpeg2video即可。

ffplay -vcodec mpeg2video udp://233.233.233.223:6666

2.      RTP

2.1. 傳送H.264裸流至組播地址。

下面命令實現了傳送H.264裸流“chunwan.h264”至地址rtp://233.233.233.223:6666

ffmpeg -re -i chunwan.h264 -vcodec copy -f rtp rtp://233.233.233.223:6666>test.sdp

注1:-re一定要加,代表按照幀率傳送,否則ffmpeg會一股腦地按最高的效率傳送資料。

注2:-vcodec copy要加,否則ffmpeg會重新編碼輸入的H.264裸流。

注3:最右邊的“>test.sdp”用於將ffmpeg的輸出資訊儲存下來形成一個sdp檔案。該檔案用於RTP的接收。當不加“>test.sdp”的時候,ffmpeg會直接把sdp資訊輸出到控制檯。將該資訊複製出來儲存成一個字尾是.sdp文字檔案,也是可以用來接收該RTP流的。加上“>test.sdp”後,可以直接把這些sdp資訊儲存成文字。

2.2. 播放承載H.264裸流的RTP。

ffplay test.sdp

3.      RTMP

3.1. 傳送H.264裸流至RTMP伺服器(FlashMedia Server,Red5等)

面命令實現了傳送H.264裸流“chunwan.h264”至主機為localhost,Application為oflaDemo,Path為livestream的RTMP URL。

ffmpeg -re -i chunwan.h264 -vcodec copy -f flv rtmp://localhost/oflaDemo/livestream

3.2. 播放RTMP

ffplay “rtmp://localhost/oflaDemo/livestream live=1”

注:ffplay播放的RTMP URL最好使用雙引號括起來,並在後面新增live=1引數,代表實時流。實際上這個引數是傳給了ffmpeg的libRTMP的。

4.      測延時

4.1.測延時

測延時有一種方式,即一路播放傳送端視訊,另一路播放流媒體接收下來的流。播放傳送端的流有2種方式:FFmpeg和FFplay。

通過FFplay播放是一種眾所周知的方法,例如:

ffplay -f dshow -i video="Integrated Camera"

即可播放本地名稱為“Integrated Camera”的攝像頭。

此外通過FFmpeg也可以進行播放,通過指定引數“-f sdl”即可。例如:

ffmpeg -re -i chunwan.h264 -pix_fmt yuv420p –f sdl xxxx.yuv -vcodec copy -f flv rtmp://localhost/oflaDemo/livestream

就可以一邊通過SDL播放視訊,一邊傳送視訊流至RTMP伺服器。

注1:sdl後面指定的xxxx.yuv並不會輸出出來。

注2:FFmpeg本身是可以指定多個輸出的。本命令相當於指定了兩個輸出。

播放接收端的方法前文已經提及,在此不再詳述。