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

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的。

有關RTMP的處理,可以參考文章:ffmpeg處理RTMP流媒體的命令大全

 

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本身是可以指定多個輸出的。本命令相當於指定了兩個輸出。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章