媒体编解码器

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

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

  1. Android 媒体存储服务(二)

    Android 媒体存储服务 简介: 本文是<深入Android媒体存储服务>系列第二篇,简要介绍媒体存储服务扫描文件的流程.文中介绍的是 Android 4.2. Android 有一套 ...

  2. Android 媒体存储服务(一)

    Android 媒体存储服务 本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 ...

  3. 专题合集:深入Android媒体存储服务

    Android 有一套媒体存储服务,进程名是 android.process.media,主要负责把磁盘中的文件信息保存到数据库当中,供其他 APP 使用以及 MTP 模式使用.这里包含了数据库管理. ...

  4. 深入Android媒体存储服务(二):磁盘扫描流程

    简介: 本文是<深入Android媒体存储服务>系列第二篇,简要介绍媒体存储服务扫描文件的流程.文中介绍的是 Android 4.2. Android 有一套媒体存储服务,进程名是 and ...

  5. android媒体--图库与API层MediaPlayer的交互

    众所周知一个媒体播放器新建的几个步骤: Mediaplayer mp = new MediaPlayer(0 mp.setDatasource(xxx); mp.setDispalyer(xxx); ...

  6. Android——媒体库 相关知识总结贴

    Android媒体库 http://www.apkbus.com/android-19283-1-1.html Android本地图片选择打开媒体库,选择图片 http://www.apkbus.co ...

  7. Android媒体解码MediaCodec MediaExtractor学习

    Android提供了MediaPlayer播放器播放媒体文件,其实MediaPlyer只是对Android Media包下的MediaCodec和MediaExtractor进行了包装,方便使用.但是 ...

  8. Android媒体解码MediaCodec,MediaExtractor

    Android提供了MediaPlayer播放器播放媒体文件,其实MediaPlyer只是对Android Media包下的MediaCodec和MediaExtractor进行了包装,方便使用.但是 ...

  9. Android 媒体键监听以及模拟媒体键盘的实现 demo

    有时我们需要程序模拟按钮或点击,而手机本身又没有,哪么可以采取其它方式 模拟实现,最后再去实际设备去测试(前期一般都拿不到设备): 如上一首,下一首,暂停等,手机上是没有的,但有些设备上是有的,所以我 ...

随机推荐

  1. SaaS架构经验总结

    2B Saas系统最近几年都很火.很多创业公司都在尝试创建企业级别的应用 cRM, HR,销售, Desk Saas系统.很多Saas创业公司也拿了大额风投.毕竟Saas相对传统软件的优势非常明显. ...

  2. Canvas - Web API

    <canvas> 是 HTML5 新增的元素,可用于通过使用JavaScript中的脚本来绘制图形.例如,它可以用于绘制图形,制作照片,创建动画,甚至可以进行实时视频处理或渲染. Mozi ...

  3. jsp: jstl标签库 uri标签

    与 URL 相关的标签主要是用来将其他文件包含进来,或者提供页面之间的重定位以及 URL 地址的生成.参数的输出等等.一般包括如下几个标签<c:import>标签:与传统 JSP 页面中的 ...

  4. django 添加自定义context

    文档参考;http://python.usyiyi.cn/django_182/ref/templates/api.html 添加自定义上下文文件custom_processors.py # codi ...

  5. LeetCode OJ:Combinations (排列组合)

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...

  6. Hibernate(2)

    一.实体类编写规则 1.实体类里面的属性属于私有的 2.私有属性使用公开的set和get方法操作 3.要求实体类有属性作为唯一值(一般使用id值) 4.实体类属性建议不要使用基本数据类型,使用基本数据 ...

  7. Git学习--版本回退

    现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control system. ...

  8. @angular/cli项目构建--路由3

    路由定位: modifyUser(user) { this.router.navigate(['/auction/users', user.id]); } 路由定义: {path: 'users/:i ...

  9. php 与 Smarty 中的 isset

    今天在做一个分页模块的时候,在获取前端返回的当前页时,烦了一个大错!本来应该是这样子滴: 而咱却写成了这个样子: 在php里输出测试都没错,结果到Smarty里就被拒了! 测试结果是 这货跟谁都相等, ...

  10. 设置SSH自动登陆(免密码,用户名)

    设置SSH自动登陆(免密码,用户名)   1.创建公钥.公钥  ssh-keygen -t rsa  无视它出来的任何提示,欢快的一路回车到底吧.  2.把公钥 id_rsa.pub 复制到远程机器的 ...