视频-MediaCodec

article/2025/10/6 17:42:22

1.解析视频可以使用android 提供的api MediaPlayer,实现简单的播放暂停,提取视频中的一帧或者编辑视频,需要另一个api MediaCodec(硬解,控制DSP芯片)或者 ffmpeg(软解,耗时),选择的优先级一定要硬解大于软解。

MediaPlayer可以用来播放多媒体文件,但是它却无法操作视频解码的细节,比如采用哪种解码器,软解还是硬解,我们无法进行控制。只能按照平台上的实现来进行播放。MediaRecorder的局限性就更大了,如果想要调用编码器编码一段原始的yuv420格式的视频源,就不能使用该接口。

由此MediaCodec类应运而生,它是android平台上操作编解码器的一个类,同样实现了java层和C++层。在C++层的实现中,是通过一个OMXClinet来与Bn端的OMX来进行通信的,OMX服务也是在MediaPlayerService中实现的。OMX是对OMXMaster类的一个封装,它是负责对平台上的所有编解码器进行管理的一个类,包括软解和硬解等。

通过MediaCodec类,我们就可以直接操作android上的软硬件编解码器。

2.使用MediaCodec硬解码

2.1 MediaCodec介绍

MediaCodec类Android提供的用于访问低层多媒体编/解码器接口,它是Android低层多媒体架构的一部分,通常与AudioTrack结合使用,能够编解码诸如H.264、H.265等常见的音视频格式。

Android 应用层统一由 MediaCodec API 来提供各种音视频编解码功能,由参数配置来决定采用何种编解码算法、是否采用硬件编解码加速等。Android 底层多媒体模块采用的是 OpenMax 框架,任何 Android 底层编解码模块的实现,都必须遵循 OpenMax 标准。Google 官方默认提供了一系列的软件编解码器:包括:OMX.google.h264.encoder,omx.google.h264.decoder 等等,而硬件编解码功能,则需要由芯片厂商依照 OpenMax 框架标准来完成,所以,一般采用不同芯片型号的手机,硬件编解码的实现和性能是不同的。

2.2 MediaCodec 工作流程

编解码器处理输入数据并产生输出数据,MediaCodec 使用输入输出缓存,异步处理数据。简要地说,一般的处理步骤如下
在这里插入图片描述
请求一个空的输入 input buffer
填入数据、并将其交给 MediaCodec
MediaCodec 处理数据后,将处理后的数据放在一个空的 output buffer
获取填充数据了的 output buffer,得到其中的数据,然后将其返还给 MediaCodec

2.3 MediaCodec API 说明
MediaCodec可以处理具体的视频流,主要有这几个方法:

configure:配置为编码器start:成功地配置组件后,调用start方法。
getInputBuffers:获取需要编码数据的输入流队列,返回的是一个ByteBuffer数组
queueInputBuffer:输入流入队列dequeueInputBuffer:从输入流队列中取数据进行编码操作
getOutputBuffers:获取编解码之后的数据输出流队列,返回的是一个ByteBuffer数组
dequeueOutputBuffer:从输出队列中取出编码操作之后的数据
releaseOutputBuffer:处理完成,释放ByteBuffer数据
stop:完成解码/编码任务后,需注意的是codec任然处于活跃状态且准备重新start。
flush:冲洗组件的输入和输出端口release:释放codec实例使用的资源。
reset:使codec返回到初始(未初始化)状态。

这里是引用
https://blog.csdn.net/sunlifeall/article/details/118054922?spm=1001.2014.3001.5502
https://blog.csdn.net/u012165769/article/details/108406035?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-0-108406035-blog-117927614.pc_relevant_paycolumn_v3&spm=1001.2101.3001.4242.1&utm_relevant_index=3
https://blog.csdn.net/rikeyone/article/details/50600137


http://chatgpt.dhexx.cn/article/5D41R5f5.shtml

相关文章

MediaCodec解析MP4视频

MediaCodec讲解 MediaCodec是Android提供的用于对音视频进行编解码的类,它通过访问底层的codec来实现编解码的功能。是Android media基础框架的一部分,通常和 MediaExtractor, MediaSync, MediaMuxer, MediaCrypto, MediaDrm, Image, Surface和AudioTra…

Android视频编解码之MediaCodec简单入门

本篇只是简单入门,后面会继续写文章详细讲解: 由于MediaCodec涉及内容众多,原本想一篇文章把所有内容概括,但是后来发现不太可能,限于自己能力,想要考虑全面太难,我也是刚开始学习需要借助网上…

Android:MediaCodec基本原理

最近需要使用MediaCodec做一些工作,因此对MediaCodec做了些研究和代码编写,在此先对MediaCodec的一些基础原理、工作流程、常用API等做个初步总结,方便后续开发过程中查阅。 1.MediaCodec简介 1.1 MediaCodec来历 Android从最初的API 1.0版…

MediaCodec原理及使用

使用MediaCodec目的 MediaCodec是Android底层多媒体框架的一部分,通常与MediaExtractor、MediaMuxer、AudioTrack结合使用,可以编码H264、H265、AAC、3gp等常见的音视频格式 MediaCodec工作原理是处理输入数据以产生输出数据 MediaCodec工作流程 Medi…

Android MediaCodec

Android中可以使用MediaCodec来访问底层的媒体编解码器,可以对媒体进行编/解码。 MediaCodec可以处理的数据有以下三种类型:压缩数据、原始音频数据、原始视频数据。这三种类型的数据均可以利用ByteBuffers进行处理,但是对于原始视频数据应提…

android P MediaCodec编解码流程分析

1.MediaCodec初始化流程分析 通过上面流程分析可知,MediaCodecList初始化是通过调用它的getLocalInstance函数,然后在里面new的MediaCodecList对象。在MediaCodec的CreateByType函数中new了MediaCodec对象。 allocateNode调用流程是在ACodec.cpp中的onA…

MediaCodec_Analyze-3-start

MediaCodec Analyse – start Refrence: https://source.android.google.cn/devices/media 一 APK调用的核心API Android APK使用 MediaCodec API 播放音视频的简易流程: MediaCodec codec MediaCodec.createDecoderByType("video/avc"); MediaFormat …

mediacodec api

mediacodec api 官网: https://developer.android.com/reference/android/media/MediaCodec 中文: https://www.apiref.com/android-zh/android/media/MediaCodec.html 学习mediacodec api的使用说明,在android源码查看: andro…

MediaCodec硬解流程

一 MediaCodec概述 MediaCodec 是Android 4.1(api 16)版本引入的低层编解码接口,同时支持音视频的编码和解码。通常与MediaExtractor、MediaMuxer、AudioTrack结合使用,能够编解码诸如H.264、H.265、AAC、3gp等常见的音视频格式。MediaCodec在编解码的过…

MediaCodec_Analyze-1-create

MediaCodec Analyse – create Refrence: https://source.android.google.cn/devices/media 一 APK调用的核心API Android APK使用 MediaCodec API 播放音视频的简易流程: MediaCodec codec MediaCodec.createDecoderByType("video/avc"); MediaFormat…

mediacodec

MedaiCodec简介 MediaCodec是Android中提供的音视频编/解码工具。它主要是完成上层接口的封装,供给开发者使用,编解码功能实际是在native底层服务中完成的 MediaCodec工作流程 包括两个缓冲区队列 一个输入缓冲区队列,包含一组输入缓冲区(格…

Android MediaCodec 完全解析

MediaCodec是什么? MediaCodec类为开发者提供了能访问到Android底层媒体Codec(Encoder/Decoder)的能力,它是Android底层多媒体基础架构的一部分(通常和MediaExtractor、MediaSync、MediaMuxer、MediaCrypto、MediaDrm…

Android MediaCodec解析

Android MediaCodec解析 1 引言 MediaCodec是Android平台提供的一个底层的音视频编解码框架,它是安卓底层多媒体基础框架的重要组成部分。它经常和 MediaExtractor, MediaSync, MediaMuxer, MediaCrypto, MediaDrm, Image, Surface, AudioTrack一起使用。解码的作…

Android原生编解码接口MediaCodec详解

作者:躬行之 了解了音视频的相关知识,可以先阅读同系列文章: 音视频开发基础知识音频帧、视频帧及其同步Camera2、MediaCodec录制mp4 MediaCodec 是 Android 中的编解码器组件,用来访问底层提供的编解码器,通常与 Me…

MediaCodec视频解码流程详解及参考demo

一、MediaCodec简介 MediaCodec是Android自带的底层多媒体支持架构的一部分(通常与 MediaExtractor,MediaSync,MediaMuxer,MediaCrypto,MediaDrm,Image,Surface 和 AudioTrack 一起使用&#xf…

Android MediaCodec简单总结

#.MedaiCodec简介 MediaCodec是Android中提供的音视频编码、解码工具。它主要是完成上层接口的封装,提供给开发者使用,编解码功能实际是在native底层服务中完成的。 #.MediaCodec工作的宏观流程: ##.包换两个缓冲区队列 一个输入缓冲区队列&a…

软件测试面试指导之自我介绍

面试自我介绍虽然人人都准备,但是做到让人印象深刻可不容易啊。 本篇就具体来聊聊人人都要经历的面试,怎么做自我介绍,才能让你在面试官的眼睛里像金子一样闪闪发光? 面试是什么? 它是个机会,让面试官更…

软件测试面试要注意的细节以及处理(自我介绍篇)

面试问题第一问,95%都会是: 请简单的做个自我介绍吧~ 分以下几点说明。 一、个人的基本信息,扬长避短 1、年纪太大与太小,都不需要主动去说明。 比如我年纪只有21岁 例子:面试官您好,我叫***&#xff…

【软件测试】企业测试面试题9道,从自我介绍到项目考察+回答......

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、自我介绍 您好…

软件测试面试怎样介绍自己的项目?会问到什么程度?

最近收到很多粉丝的私信说找不到工作,简历投了百十来份,邀约都没几个,更别说offer了,是不是软件测试要黄了? 说句实话,现在大环境确实不好,互联网大厂裁员这是摆在明面上的原因。时代的一粒沙&…