前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MediaCodec/OpenMAX/StageFright 介绍

MediaCodec/OpenMAX/StageFright 介绍

作者头像
100001509164
发布2022-01-20 21:47:06
2K0
发布2022-01-20 21:47:06
举报
文章被收录于专栏:DevTipsDevTips

01 前言

大家好,本文是 iOS/Android 音视频开发专题 的第三篇,从本篇开始进入 Android 音视频专题实战篇。如果你对 iOS/Android 音视频开发感兴趣可通过关注本公众号 GeekDev 第一时间获取推送。

02 MediaCodec 值得我们学习吗?

MediaCodec 可以说是一个非常 "重量级" 的 API ,一个 MediaCodec 类就可以完成编解码,这种不按套路出牌的设计,我第一次使用时心情是这样的👇

虽然 MediaCodec 槽点很多,但是作为一个音视频开发者 MediaCodec 仍然值得我们去研究学习。使用 MediaCodec 我们不仅可以借助 GPU 实现硬编硬解,而且手机厂商也会内置一些高效的编解码器。

你不需要具备 C/C++ 背景知识,也不需要编译集成第三方库(如:ffmpeg),使用你现有的知识就可以一个开发复杂的视频应用。

03 MediaCodec 架构介绍

MediaCodec 自 Android 4.1 (API 16) 引入的编解码接口,它是 Android 多媒体架构的一部分,通常和 MediaExtracto, MediaCrypto, Image, Surface, AudioTrack, MediaMuxer 一起使用。

而提起 MediaCodec 不得不提的是下面两个框架:

  • StageFright
  • OpenMAX

StageFright 基本介绍

MediaCodec 是提供给上层应用的 Java 接口,实际底层调用的是 StageFright 多媒体框架, StageFright 是 Android 平台预设的多媒体框架,自 Andorid 2.3 开始才被引入进来。

最早 MediaCodec 调用的多媒体框架是 OpenCore,OpenCore 的优点是跨平台的,但是由于过于庞大和复杂,自 Android 2.3 开始 StageFright 正式加入,OpenCore 有可能会被 StageFright 取代。

OpenMAX 基本介绍

StageFright 底层编解码能力是由 OpenMAX 框架提供,StageFright 遵循 OpenMAX 标准,OpenMAX 全称是 Open Media Acceleration ( 开发多媒体加速器 )。

OpenMAX 为多媒体软硬开发提供了一套标准接口,OpenMAX 是为音视频,图像编解码而设计,许多嵌入式设备都使用了 OpenMAX 标准 ,比如 Android 平台。

OpenMAX 标准定义了 DL,IL, AL 层:

  • DL ( Devlopment Layer 开发层 )

DL 层定义了音视频,图像处理接口,一般 DL 层由设备芯片厂商提供实现,并提供编解码器的功能。 在 Android 系统中,Google 提供了一些内置的软编解码器:

1. OMX.google.h264.encoder,

2. OMX.google.h264.decoder,

3. OMX.google.acc.encoder,

4. OMX.google.acc.decoder

如果手机厂商需要提供硬编解码器就需要实现 DL 层。

  • IL ( Integration Layer 整合层 )
  • AL ( Application Layer 应用层 )

为应用和多媒体中间件提供了标准化接口,StageFright 和 OpenCore 应该就是遵循该标准。由于遵循的标准一致, StageFright 取代 OpenCore 时并不会影响上层应用。

通过上面介绍,我们知道 MediaCodec 是通过调用 StageFright 调用编解码功能,StageFright 又是通过 OpenMAX 与硬件层进行通信。如下图:

04 查看设备支持的编解码器列表

当设备芯片厂商开发完成编解码器后, 会将编解码器信息注册到 system/etc/media_codecs.xml system/etc/media_profiles.xml 文件中,我们可以通过分析这两个文件获取当前设备所有的编解码器列表,解析解码器最大支持的视频宽高等信息。

可通过 adb 获取文件的具体内容

1. 连接手机

2. 打开终端执行如下命令

代码语言:javascript
复制
 adb shell
 cat /system/etc/media_codecs.xml

media_codecs.xml 部分内容:

下篇文章进入实际编码时,我们会使用另外一种方式 (MediaCodecList ) 获取当前设备支持的编解码器列表。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevTips 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档