ffmpeg中如何加入trueHD/mlp编码器

本文介绍了如何在ffmpeg中加入mlp编码器,重点在于修改mlpenc.h和mlpenc.c,并指出在不同版本中mlp_encode_frame接口的变化。同时,提到了trueHD编码在复合流中的应用,需要在同步头中作相应更改。最后,解决在使用ffmpeg编码trueHD流时没有声音的问题,关键在于正确设置流标识为0x83。

在ffmpeg标准版中已经存在mlp音频解码器,但却没有编码器,但在soc版本中是有的,且有一个专门的目录mlp存放。

    和其它编码器,mlp编码的相关文件是mlpenc.h和mlpenc.c,但在soc中不能直接加入,需要在接口上加以更改,改接口是mlp_encode_frame,细心的开发人员不难发现,他们是不一样的。   在soc或早期版本中如下:

   int (*encode)(AVCodecContext *,
                uint8_t *buf, 
                int buf_size, 
                void *data);

后来使用了encode2,其定义如下:  
int(*encode2)(AVCodecContext*avctx, 

AVPacket*avpkt, 

constAVFrame*frame, 

int*got_packet_ptr);

   在avcodec.h中当然也必须更改REGISTER_DECODER(MLP,mlp)更改为REGISTER_ENCDEC(MLP, mlp).

    有测试过的同学也发现这个mlp编码器并不能在ts或m2ts中进行复用流的编码,这是因为在复合流中使用的是其复杂形式,名称为trueHD.

    所以在同步头中还应根据mlp还是trueHD作一点更改,当然这一点根据只能编码出trueHD的裸流音频。

    如果直接使用-i filename -avcodec truehd -ac2 outpath/outname.m2ts,播放时会没有声音,这是为什么呢?

    这是因为在ffmpeg中并没有对turehd的流进行标识,正确的做法是在节目表中写入truehd的标识0x83,如此便能成功。

    补充说明:mlp的fourCC('M','L','P',' ' ), trueHD的fourCC('T','R','H','D').

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值