ffmpeg学习笔记1----->udp流多路节目实现分离

环境:centos/ubuntu 安装好ffmpeg即可

安装教程:https://trac.ffmpeg.org/wiki/CompilationGuide

准备需要一个udp组播流(含有多路节目那种)

ffmpeg学习笔记1----->udp流多路节目实现分离_第1张图片

可以用下面的命令查看流的信息:

ffprobe -i udp://224.2.2.21:10001             //-i 后接的是你的流地址

ok看到目标,我们可以进行普通操作

ffmpeg -re -i udp://224.2.2.21:10001 -s 1280*720  -vcodec h264  -acodec copy -crf 30  -f mpegts udp://239.0.0.1:8001ffmpeg学习笔记1----->udp流多路节目实现分离_第2张图片  执行完,发现报缓存溢出的错误。他叫我们加fifo_size 参数。好吧那我们就加上

ffmpeg -re -i udp://224.2.2.21:10001?fifo_size=409600 -s 1280*720  -vcodec h264  -acodec copy -crf 30 -f mpegts udp://239.0.0.1:8001

再次运行,走你~

ffmpeg学习笔记1----->udp流多路节目实现分离_第3张图片

这次就正确了,没有异常退出。那么问题来了,现在的这个流是那一路节目视频音频又是否同步?

ok我们在看一下输出表

ffmpeg学习笔记1----->udp流多路节目实现分离_第4张图片

这是第一个节目到第四个节目。由于字符编码问题,节目名称为乱码。那么看看我们刚才执行的命令视频和音频是如何转的

这里我们看到了貌似好像没有什么规律。所有我肯定的话,这个流拉出来的节目他肯定是视频和音频不同步(这里的不同步是指B节目的音频+A节目的视频组成了我们现在的流,这样肯定是不行的),我们需要怎么做。这里加一个-map参数指定一下,对参数不是很了解,链接在此:http://blog.csdn.net/xuheazx/article/details/51969535

于是我们的命令变成了这样:

ffmpeg -re -i udp://224.2.2.21:10001?fifo_size=409600 -s 1280*720 -map \#0x3e9 -vcodec h264 -map \#0x3ea -acodec copy -crf 30 -f mpegts udp://229.0.0.1:8001

map后的参数对应标签后的参数。

这样就ok了,尝试运行一下~

ffmpeg学习笔记1----->udp流多路节目实现分离_第5张图片

大功告成!



ps (#0:x) 这个东西会变得不是唯一标识,唯一的是([0x407])。然后打开VLC测试。我太懒就不做了。

88~


你可能感兴趣的:(工作)