基于gst-launch的实时转码

目标是实现一个实时转码,可用于IPTV提供节目源。
相关工作在ubuntu操作系统下进行。需要对源代码进行修改的时候,直接采用apt-get source命令获取源代码,根据需要进行修改,然后安装,这样能最大限度的保证兼容性和稳定性。
命令行示例
gstreamer是通过不同功能的element构成pipeline的方式来工作的,一个transcoding也是通过解码,编码等各种element构成的pipeline来实现的。采用gstreamer的命令行工具就能实现各种复杂的转码功能,不过一个复杂的应用还是要通过编程来实现。下面是一个例子:
gst-launch-0.10 filesrc location=mpts.ts !
mpegtsdemux !
ffdec_mpeg2video !
ffenc_mpeg2video bitrate=3500000 !
ffmux_mpegts !
filesink location=m

输入
    filesrc:文件。
    udpsrc:IP网络,可以采用IP输出的工程用数字电视接收机。
    v4lsrc:采集卡,测试过Osprey,微视图像的采集卡
    v4lsrc:DVB数字电视卡,测试过卫星电视卡。
    v4lsrc:中国标准的DMB-TH地面数字电视接收卡,做过测试。
    v4lsrc:中国标准的ABS-S,中星九号卫星电视接收卡,没有找到过合适的硬件。

输出
    filesink:文件
    udpsink:IP网络组播或者单播

    RTSPv


解复用
解复用选择ffdemux_mpeg2ts,需要考虑到时间戳的问题,见《ffdemux_mpegts中时间戳的处理问题》

解码
    ffdec_mpeg2video:ffmpeg的gstreamer插件,可以解码多种格式,包括mpeg2,mpeg4,264,vp6等。
    mpeg2dec:用于mpeg2解码。
对于解码相对比较容易,要求不是很苛刻。

编码
    x264enc:x264编码,效率相当高,在4核的CPU上可以实现4路标清编码。支持多线程编码。
    ffenc_mpeg2video:ffmpeg的mpeg2编码,效率比较高,在32位的ubuntu server 10.04.1上经过验证效率较高,一个cpu核心接近两个标清实时编码,在64位的ubuntu server 10.10上则效率比较低。不支持多线程?
    mpeg2enc:支持多线程,但是效率明显不如ffenc_mpeg2video。需要明确gop的大小,并明确需要在每个gop之前加入序列头,否则这些都没有,图像质量不如ffmpeg的mpeg2video编码,不支持interlaced。
因此对于264选择x264enc,对于mpeg2应该选择ffmpeg,但是需要增加对于多线程的支持,否则实时编码的效果不理想,会经常出现马赛克。

封装
    ffmux_mpegts:mpegts封装,不支持CBR封装(在《视频编码中的码率控制及应用》有如何添加CBR支持的描述)。PCR的计算比较精确,对于CBR是40ms,对于VBR是80ms。
    mpegtsmux:同样是mpegts封装,同样不支持CBR封装。PCR的计算比较粗,抖动非常厉害。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值