Android 媒体编解码器(转)

媒体编解码器

MediaCodec类是用来为低级别的媒体编码和解码的媒体编解码器提供访问。您可以实例化一个MediaCodec类通过调用createEncoderByType()方法来进行对媒体文件进行编码或者调用createDecoderByType()来对媒体文件进行解码。每一个方法都要采取一个MIME类型为你想要编码或者解码的媒体文件类型,例如“video/3gpp”或者“audio/vorbis”。

在MediaCodec实例创建之后,你可以调用configure()方法来指定例如媒体格式或者是否对内容加密的属性。

无论你是对你的媒体文件进行编码还是解码,在你创建MediaCodec实例后的其余进程都是一样的。首先通过getInputBuffers()的方法获得输入ByteBuffer对象的一个数组然后再通过getOutputBuffers()方法来获得一个输出的ByteBuffer的对象数组。

当你准备好进行编码或者解码的时候,调用dequeueInputBuffer()方法来获得这个用来作为媒体文件源码的ByteBuffer(从输入的buffers的数组中)的索引位置。在你使用带有媒体文件源码的ByteBuffer之后,通过调用queueInputBuffer()方法来释放缓存区的所有权。

对输出缓存区也是一样的,调用dequeueOutputBuffer()方法来获得你接收到结果的ByteBuffer的索引位置。在你从ByteBuffer读出输出之后,通过调用releaseOutputBuffer()方法来释放所有权。

你可以结合MediaCrypto APIs,而不是正常的queueInputBuffer()方法,通过调用queueSecureInputBuffer()的方法来处理媒体媒体编解码器的加密数据。

想要了解更多关于如何使用编解码器的信息,参见MediaCodec文档。

自定义录音

新方法startRecording()允许你可以在MediaSyncEvent的定义提示下的基础上开始录音。这个MediaSyncEvent指定一个当完成时就能自发触动录音机开始录音的音频对话(例如一个被MediaPlayer所定义的对话)。例如,您可以使用这个功能播放提示音来表示一段录音会话的开始,然后这个录音就自动开始,所以你没不必手动同步提示音和录音开始的操作。

定时文本轨道

MediaPlayer这个类现在可以处理带内和带外的文本轨道。带内文本轨道就是一个MP4或3GPP的媒体源的文本轨道。带外文本轨道可以通过addTimedTextSource()这个方法来本当作一个外部的文本进行添加。在所有的外部文本轨道添加之后,调用getTrackInfo()方法来对数据源中所有的可用的轨迹的列表进行刷新。

如果要用MediaPlayer这个类来设置轨道,你必须调用selectTrack()这个方法选择你想要设置的轨道的索引位置。

当得知到这个文本轨道准备开始时,实现MediaPlayer.OnTimedTextListener这个接口并且把它传到setOnTimedTextListener()方法中去。

音频效果

AudioEffect这个类现在支持当捕获到音频时额外的的音频预处理类型:

作为声学回声消除器(AEC)的AcousticEchoCanceler这个类消除了从远程捕捉到音频信号上的信号的作用。

作为自动增益控制(AGC)的AutomaticGainControl这个类自动恢复正常捕获的信号输出。

作为噪声抑制器的(NS)的NoiseSuppressor这个类可以消除被捕获信号的背景噪音。

您可以应用这些利用AudioEffect一个子类的AudioRecord类上的音频捕获预处理效果。

注意:并不能保证所有的设备都能支持这些效果的,所以你应该首先调用在对应音频效果类上的isAvailable()的方法来检测它的可用性。

无缝播放

现在您可以在两个完全独立的MediaPlayer类上执行无缝播放。在您第一个MediaPlayer类执行结束前的任何时间调用setNextMediaPlayer()这个方法,然后Android系统将会在您第一个停止的时候紧接着播放第二个文件。

媒体路由器。这个新的APIs MediaRouter,MediaRouteActionProvider和MediaRouteButton为您在播放文件的地方提供标准的机制和界面供您选择

-------------------------------------------------------------------------

http://blog.csdn.net/dahuaishu2010_/article/details/14103289

时间: 2024-10-01 20:15:30

Android 媒体编解码器(转)的相关文章

Android 媒体存储服务(一)

Android 媒体存储服务 本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 APP 新增或修改的文件更新到媒体数据库.如何在多媒体应用中隐藏 APP 产生的文件.如何监听媒体数据库的变化等等. 简介:本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 APP

Android媒体解码MediaCodec MediaExtractor学习

Android提供了MediaPlayer播放器播放媒体文件,其实MediaPlyer只是对Android Media包下的MediaCodec和MediaExtractor进行了包装,方便使用.但是最好理解下Android媒体文件的解码,编码和渲染流程. 使用android.media包下的MediaCodec和MediaExtractor实现一个简单的视频解码渲染. 使用到了: MediaCodec:负责媒体文件的编码和解码工作,内部方法均为native方法 MediaExtractor:负

Android|媒体|播放和音量调节|seekbar|mediaplayer

Android中的音乐媒体播放 Mediaplayer类,定义如下 final MediaPlayer mpRain = MediaPlayer.create(this,R.raw.rain); 文件为  res/raw/rain.mp3  //raw在Androidstudio中我自己创建的 我自己在这里的用法是只有一个按钮,单击使用,如果在播放就停止,否则开始播放,附上代码 1 mpRain.setLooping(true); 2 buttonRain.setOnClickListener(

android媒体--stagefright概述【一】

近期杂七杂八的忙碌着,前几天看了下这部分主要是stagefright模块的,所以更改下名字 做了挺长时间的android平台的媒体开发,对之前的分析进行一个阶段性的总结. 一.android结构图(上下文关系) 二.android文件夹结构 自从android4.2版本号之后,媒体的相关代码都放到framework/av/的文件夹中,俗称"AV工作者",呵呵(本地代码不是太健全,文件夹我手动敲,公司代码健全,直接导出文件夹树) |----- media | | | |-- libmed

android自定义编解码器记录

最近折腾了一下软编码器,网上的资料好少,踩的坑记一下 从frameworks/media/libstagefright/codecs下面找一个enc的代码看看 无非是从SimpleSoftOMXComponent继承,然后实现onfill什么的,自己的编码器就在这里实现,比较好理解. SoftOMXPlugin.cpp里注册这个编码器,OMX.google.xxx.encoder,照着上面仿写就行 网上说的只需要上面两步,但实际上在我这还跑不起来,只好加日志跟起来 ACodec.cpp 有这么个

android媒体文件扫描

项目中可能有这样的需求:下载或导入.导出的图片.音乐等媒体文件,需要马上能在图库或本地视屏播放器中显示出来,或者要能在媒体数据库中查询到媒体文件的相关信息,这时我们就得主动通知系统扫描新的媒体文件了.我整理了一个扫描的工具类,分享下. 具体代码: public class MediaScanner { private volatile static MediaScanner instance; private MediaScanner(){ } public static MediaScanne

Android media媒体库分析之:MediaProvider

在做Android媒体应用程序时(Audio.Image.Video)需要对Android的媒体提供者(MediaProvider)做详细的分析,下面记录一下我的收获: 一.获取MediaProvider: 该工程在系统源码的packages\providers目录下,提出并导入Eclipse,便于阅读: 图中可见都很多报错的,是滴,因为需要一些系统标准sdk之外的接口,不过不影响我们阅读代码. 二.工程结构及内部关系: 可以从上图看出包含4个文件: MediaScannerService.Ja

基于 Android 的 3D 视频样本代码

作者:Mark Liu 下载样本代码 简介 在Android 中,创建一个能够播放视频剪辑的应用非常简单:创建一个采用 3D 图形平面的游戏应用也非常简单.但是,创建一个能够在 3D 图形对象上播放视频的应用却不容易.本文介绍了我为应对该挑战创建的应用.该应用可在 3D 平面上渲染视频,并支持用户以交互的方式在视频平面上播放. 该应用需要解决三大实施问题: 如何构建代码以支持用户在播放视频时变更 3D 平面? 虽然 Android 中默认的 MediaPlayer 配备了全面的播放操作,但是难以

Android Multimedia框架总结(二十)MediaCodec状态周期及Codec与输入/输出Buffer过程(附实例)

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53183718 前言:前面几节都是介绍Camera2相关,对于Camera2预览把图像显示在SurfaceView上,还有录像时,时时刷新当前图像区域.追溯到最早介绍的MediaPlayer播放视频,这些都离不开重要角色MediaCodec,今天介绍MediaCodec,看下Agenda: MediaCodec是什么? codec操