mediaCodec 的使用遇到的问题
来源:互联网 发布:淘宝发货之后怎么修改 编辑:程序博客网 时间:2024/06/08 01:56
最近项目需要在android的项目进行音视频的硬编解码,所以使用mediaCodec。
这个过程,首先需要对音视频的编解码有足够的理解。
无论是音频、视频的编码、解码,MediaCodec都是有三个部分。原理是消费者生产者的处理信息的过程。
1.MediaCodec初始化设置,主要设置MediaCodec2.将数据放到MediaCodec的InputBuffer3.将数据从MediaCodec的OutputBuffer取出来,然后处理
问题:
1.由于视频编码后显示的数据质量偏低,所以需要调整质量。这个时候需要在这个设置level、profile.Profile是对视频压缩特性的描述(CABAC呀、颜色采样数等等)。Level是对视频本身特性的描述(码率、分辨率、fps)。简单来说,Profile越高,就说明采用了越高级的压缩特性。Level越高,视频的码率、分辨率、fps越高 mediaFormat.setInteger(MediaFormat.KEY_LEVEL, mLevel); mediaFormat.setInteger(MediaFormat.KEY_PROFILE, mProfile); 但是需要考虑到传输速率的问题,所以,需要设置level在8192以下。2.编码时需要设置音视频呈现时间主要是设置MediaCodec.queueInputBuffer的presentationTimeUs,因此该时间的设置是long pts = 1000000 * mCnt++ / mFramerate; 其中mC++ 初始化为0,mFramerate为帧率/时间间隔;3.解码时需要设置音视频的取包的时间主要是MediaCodec.dequeueOutputBuffer。这个时间设置是timeoutUs。如果timeoutUs=-1,就是当有包时立即处理,没有包时不处理;如果timeoutUs=1(单位为s),就是每隔1s去获取包,这个时候有可能获取不到包4.解码时需要注意格式的获取对于音视频的格式,可以在MediaFomat上设置,也可以在网络推流前上设置。现在主要使用OutputBuffer。使用dequeueOutputBuffer后,会获取对应的idx。如果idx=-2,这个就是存储着解码后音视频的信息。这个时候可以参考其信息,然后,传递出来5.曾经我遇到过解码后输出的byte[]为0。这个时候,原来是我编码的数据,宽和高倒置了。因此还是需要获取格式后去设置6.在视频编码后如果是关键帧,需要在关键帧前添加关键信息
参考:
https://developer.android.com/reference/android/media/MediaCodec.html
阅读全文
0 0
- mediaCodec 的使用遇到的问题
- Android中MediaCodec的使用
- android MediaCodec的自己碰到的问题
- Android中MediaCodec和MediaMuxer的使用
- 使用replaceAll()遇到的问题
- 使用CVS遇到的问题
- 使用dom4j遇到的问题
- 使用dom4j遇到的问题
- 使用Maven遇到的问题
- 使用css遇到的问题
- TFS的使用遇到问题
- 使用selenium遇到的问题
- 使用 Ubuntu 遇到的问题
- 使用My97DatePicker 遇到的问题
- 使用iis遇到的问题
- 使用flashfxp遇到的问题
- 使用myeclipse遇到的问题
- 使用 usingGeneratedKeyColumns遇到的问题
- 为什么要整合apache 和tomcat?
- 【MySql】MySql之索引
- jenkins的config.xml转jenkins job builder使用的yaml
- 重写webpack多页应用配置脚手架
- 【MySql】MySql之存储过程
- mediaCodec 的使用遇到的问题
- iOS 知名公司资讯汇集~招聘内推
- linux下的几种进程间通信方式的特点
- @SuppressWarnings 注解详述
- InteractionMnager(交互管理器)
- VS/MFC实例:对话框---创建对话框模板和修改对话框属性
- NP-完全问题的证明
- Linux 系统 I/O编程-----不带缓存的I/O操作
- 市场上终于出现了一款阿里云虚拟主机代理平台(源码免费下载)