Android多媒体(一)--mediacodec剖析

MediaCodec在Android中用于多媒体编码和解码,是低级多媒体框架的关键。它接受压缩数据、原始音频和视频数据,通过ByteBuffer或Surface传输。工作流程包括请求输入缓冲区、填充数据、处理数据及获取输出缓冲区。MediaCodec的状态包括Stopped、Executing和Released。配置时,MediaFormat是关键参数。异步模式下,通过设置回调处理输入输出数据。
摘要由CSDN通过智能技术生成

         MediaCodec 可以用来获得安卓底层的多媒体编码,可以用来编码和解码,它是安卓 low-level 多媒体基础框架的重要组成部分。

mediaCodec工作流程 

        MediaCodec 的作用是处理输入的数据生成输出数据。首先生成一个输入数据缓冲区,将数据填入缓冲区提供给 codec,codec 会采用异步的方式处理这些输入的数据,然后将填满输出缓冲区提供给消费者,消费者消费完后将缓冲区返还给 codec。

接收的数据

MediaCodec 接受三种数据格式:压缩数据,原始音频数据和原始视频数据。

这三种数据都可以使用 ByteBuffer 作为载体传输给 MediaCodec 来处理。但是当使用原始视频数据时,最好采用 Surface 作为输入源来替代 ByteBuffer,这样效率更高,因为 Surface 使用的更底层的视频数据,不会映射或复制到 ByteBuffer 缓冲区。

压缩数据

压缩数据可以作为解码器的输入数据或者编码器的输出数据,需要指定数据格式,这样 codec 才能知道如何处理这些压缩数据。

对于视频数据而言,通常是一帧数据;音频数据,一般是单个处理单元。

原始音频数据

原始音频数据即编码器的输入数据,解码器的输出数据。包含整个 PCM 音频数据帧,这是通道顺序中每个通道的一个样本。每个采样都是以本地字节顺序的 16 位有符号整数。

原始视频数据

原始视频数据也是编码器的输入数据,解码器的输出数据。即yuv数据,MediaCodec主要支持的格式为:

  • native raw video format : COLOR_FormatSurface,用来处理 Surface 模式的数据输入输出
  • flexible YUV buffers : 例如 COLOR_FormatYUV420Flexible
  • specific formats: 支持ByteBuffer模式,有一些厂家会定制

使用流程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值