FFMpeg處理RTMP流的總結

轉載地址:http://blog.chinaunix.net/uid-26000296-id-4095806.html

FFMpeg處理RTMP流有兩種方式:

  一個是使用自帶的RTMP代碼功能;
  一個是使用第三方庫librtmp;
下面就這兩種方式的一些使用和差異做了個總結;

一、自帶RTMP代碼功能
FFmpeg自帶的RTMP代碼只支持RTMP協議,不支持rtmpt,rtmpe,rtmpte和rtmps協議;
命令行設置如下:
1. 將RTMP流原樣保存成文件
# ./ffmpeg -i rtmp://192.168.1.11:1935/live/teststream -acodec copy -vcodec copy -f flv -y test.flv


2. 將RTMP流轉碼保存成文件
# ./ffmpeg -i rtmp://192.168.1.11:1935/live/teststream -acodec ... -vcodec ... -f mp4 -y test.mp4


3. 將RTMP流轉碼後再以RTMP流的方式推送到RTMP流服務器
# ./ffmpeg -i rtmp://192.168.1.11:1935/live/teststream -acodec ... -vcodec ... -f flv rtmp://10.2.11.111/live/newstream


NOTE:
FFMpeg自帶RTMP代碼只支持RTMP流格式如:
rtmp://server:port/app/stream_name (eg: rtmp://192.168.1.11:80/live/test)
不支持RTMP流格式如:
rtmp://192.168.1.11:80/live/app/test
要想支持這種格式的RTMP流,就需要更專業和強大的每三方庫librtmp; 

二、第三方庫librtmp
如何讓FFMpeg鏈接該庫可以參見文章:
http://blog.csdn.net/fireroll/article/details/8607955

這樣FFMpeg就可以支持rtmp://, rtmpt://, rtmpe://, rtmpte://,以及 rtmps://協議了。
鏈接了librtmp的FFMpeg接受一個字符串的輸入方式,
如:"rtmp://server:port/app/playpath/stream_name live=1 playpath=xxx ..."
NOTE:引號是必須的;

1. 保存RTMP直播流原樣保存成文件:
# ./ffmpeg -i "rtmp://pub1.guoshi.com/live/newcetv1 live=1" -vcodec copy -acodec copy -y cetv1.flv   

2. 將RTMP流轉碼後再以RTMP流的方式推送到RTMP流服務器
# ./ffmpeg -i "rtmp://192.168.1.11:1935/live/app/teststream live=1" -acodec ... -vcodec ... -f flv rtmp://10.2.11.111/live/newstream

3. 用ffplay播放RTMP直播流:
ffplay "rtmp://pub1.guoshi.com/live/newcetv1 live=1" 

4. 在使用FFMPEG類庫進行編程的時候,也是一樣的,
只需要將字符串傳遞給avformat_open_input()就行了,形如:
ffplay "rtmp://pub1.guoshi.com/live/newcetv1 live=1"  

char url[]="rtmp://live.hkstv.hk.lxdns.com/live/hks live=1";  
avformat_open_input(&pFormatCtx,url,NULL,&avdic)  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章