音视频学习

MediaCodec简介

2019-07-25  本文已影响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

异步调用示例
上一篇下一篇

猜你喜欢

热点阅读