循环直到完成:
如果输入缓冲区就绪,读取一个输入块,并复制到输入缓冲区中
如果输出缓冲区就绪,复制输出缓冲区的数据
释放 MediaCodec 对象
(1) 创建编/解码器 MediaCodec主要提供了createEncoderByType(String type)、createDecoderByType(String type)两个方法来创建编解码器,它们均需要传入一个MIME类型多媒体格式 。常见的MIME类型多媒体格式如下:
● “video/x-vnd.on2.vp8” – VP8 video (i.e. video in .webm)
● “video/x-vnd.on2.vp9” – VP9 video (i.e. video in .webm)
● “video/avc” – H.264/AVC video
● “video/mp4v-es” – MPEG4 video
● “video/3gpp” – H.263 video
● “audio/3gpp” – AMR narrowband audio
● “audio/amr-wb” – AMR wideband audio
● “audio/mpeg” – MPEG1/2 audio layer III
● “audio/mp4a-latm” – AAC audio (note, this is raw AAC packets, not packaged in LATM!)
● “audio/vorbis” – vorbis audio
● “audio/g711-alaw” – G.711 alaw audio
● “audio/g711-mlaw” – G.711 ulaw audio
当然,MediaCodec还提供了一个createByCodecName (String name)方法,支持使用组件的具体名称来创建编解码器 。但是该方法使用起来有些麻烦,且官方是建议最好是配合MediaCodecList使用,因为MediaCodecList记录了所有可用的编解码器 。当然,我们也可以使用该类对传入的minmeType参数进行判断,以匹配出MediaCodec对该mineType类型的编解码器是否支持 。
以指定MIME类型为“video/avc”为例,代码如下:
private static MediaCodecInfo selectCodec(String mimeType) {// 获取所有支持编解码器数量int numCodecs = MediaCodecList.getCodecCount();for (int i = 0; i < numCodecs; i) {// 编解码器相关性信息存储在MediaCodecInfo中MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);// 判断是否为编码器if (!codecInfo.isEncoder()) {continue;}// 获取编码器支持的MIME类型,并进行匹配String[] types = codecInfo.getSupportedTypes();for (int j = 0; j < types.length; j) {if (types[j].equalsIgnoreCase(mimeType)) {return codecInfo;}}}return null; } (2) 配置、启动编/解码器 编解码器配置使用的是MediaCodec的configure方法,该方法首先对MediaFormat存储的数据map进行提取,然后调用本地方法native-configure实现对编解码器的配置工作 。在配置时,configure方法需要传入format、surface、crypto、flags参数,其中format为MediaFormat的实例,它使用”key-value”键值对的形式存储多媒体数据格式信息;surface用于指明解码器的数据源来自于该surface;crypto用于指定一个MediaCrypto对象,以便对媒体数据进行安全解密;flags指明配置的是编码器(CONFIGURE_FLAG_ENCODE) 。
MediaFormat mFormat = MediaFormat.createVideoFormat("video/avc", 640 ,480);// 创建MediaFormatmFormat.setInteger(MediaFormat.KEY_BIT_RATE,600);// 指定比特率mFormat.setInteger(MediaFormat.KEY_f
猜你喜欢
- 有关星辰的id温柔 代表星辰的单字
- 电脑静电如何消除 消除电脑静电的方法
- 圆柏的养殖方法 圆柏的养殖方法是什么呢
- 过生日的场所一般在哪
- 无水乙醇和工业酒精的区别
- 鲨鱼介绍 鲨鱼的简介
- 关于琥珀的资料 关于琥珀的相关知识
- 新鲜的三叶青怎么保存
- 离合器太硬怎么调软一点 离合器太硬调软一点的方法
- 粉丝菠菜凉菜怎么做好吃 制作凉拌粉丝菠菜的方法
