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)  

你可能感兴趣的:(多媒体)