MediaCodec简介

作者: 众少成多积小致巨 | 来源:发表于2019-07-25 15:53 被阅读0次

    首先MediaCodec的原理,网上一搜一大堆;

    不过我认为,它就是一个数据从输入,处理,到输出的包装;也就是它使用时,三大块

    1、输入处理

    2、输出处理

    3、中间编解码过程(这个是MediaCodec的功能)

    1、使用

    创建编/解码,三步

    a、MediaCodec静态方法创建编码器(标志为1)或者解码器(标志为0)

    b、使用configure方法配置:

          MediaFormat配置自己研究

          surface只有在输出时有用,输入的情况使用createInputSurface()创建去关联

    c、调用start方法启动,这时,输入,编解码,输出已经开始运作

    调用setCallback方法可以异步处理

    创建启用

    同步处理

    好吧,我刚开始学习的时候使用同步,后续都改成异步了,好在github上有记录

    首先向mediacodec放入数据

    dequeueInputBuffer方法返回值大于-1时,表示输入可用

    getInputBuffer:获取输入buffer,数据放入这个里面

    queueInputBuffer:通知中间处理过程,去处理数据

    然后取出数据,(注意:放入一次数据,取出时数据次数不定),需要多次取,直到这次放入的数据没有没有对应的输出

    dequeueOutputBuffer:结果大于-1时,表示有输出数据

    getOutputBuffer:输出buffer,数据在这里面,dequeueOutputBuffer这里面参数info是buffer中的数据信息

    releaseOutputBuffer:释放buffer

    同步使用示例

    其中:AudioMgr.mgr.addADTStoPacket(desByte, 7 + info.size)这是裸流aac时需要加入格式头

    异步使用简单,但要注意同步问题

    主要有四个方法,输入可用,输出可用,输出format变化,和出现错误

    因此,在这些中不可以调用检测输入,输出是否可用的方法

    输入时,直接取输入buffer,放入数据,通知编解码

    输出时,直接取输出buffer,取出数据,释放输出buffer

    异步调用示例

    相关文章

      网友评论

        本文标题:MediaCodec简介

        本文链接:https://www.haomeiwen.com/subject/rzuhrctx.html