MediaCodec问题汇总
来源:互联网 发布:苹果cms整合ck播放器 编辑:程序博客网 时间:2024/05/20 23:02
参考:http://blog.csdn.net/mincheat/article/details/51385144
MediaCodec的基本用法,网上一大把,这里就不写了
1, 获取支持分辨率问题
Camera.Parameters parameters = _camera.getParameters();
List<Size> previewSizes = parameters.getSupportedPreviewSizes();
List<Size> svsList = parameters.getSupportedVideoSizes();
svsList 有可能为空(有些手机是获取不到的),在网上 找了些资料,如果svsList为空,其实是可以直接使用parameters.getSupportedPreviewSizes();
所以:
if(svsList == null){ svsList = parameters.getSupportedPreviewSizes();}
2,设置分辨率
List<Integer> previewFormatsSizes = parameters.getSupportedPreviewFormats();
parameters.setPictureSize(_width, _height); parameters.setPreviewSize(_width, _height);这里设置的宽和高,必须是previewFormatsSizes 里面支持的,否则会报错崩溃
3,设置MediaFormat.KEY_COLOR_FORMAT这个非常重要,出了问题也很难找到原因,下面我描述一下,我之前在这里出现的问题。
YUV数据 = width * height *3 /2 ;这个不用多说。我使用魅族的手机,
List<Integer> previewFormatsSizes = parameters.getSupportedPreviewFormats();if( -1 != previewFormatsSizes.indexOf(ImageFormat.YV12)){ _imageFormat = ImageFormat.YV12;}else if(-1 != previewFormatsSizes.indexOf(ImageFormat.NV21)){ _imageFormat = ImageFormat.NV21;}else{ _imageFormat = -1; return ;}那么_imageFormat = ImageFormat.YV12;然后mediaCodec = MediaCodec.createEncoderByType("video/avc");MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", width, height);switch(_imageFormat ){case ImageFormat.NV21: mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar); break;case ImageFormat.YV12: mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar); break; default: break;}//some code ...
ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers();
发现inputBuffers的每一个成员,的大小都是width*height*3/2, 非常好,一切正常
但是
我使用华为手机的时候发现inputBuffers的每一个成员,的大小都是width*height,所以我把我的数据buffer(w*h*3/2),input进去就溢出了。百思不得其解,最后的解决方法是:
让它优先适配NV21,那么就没问题了,调试的发现,其实previewFormatsSizes中NV21和YV12都有,这个和手机又关系吧,同样的问题,也出现在三星,努比亚手机上。List<Integer> previewFormatsSizes = parameters.getSupportedPreviewFormats();if( -1 != previewFormatsSizes.indexOf(ImageFormat.NV21)){ _imageFormat = ImageFormat.NV21;}else if(-1 != previewFormatsSizes.indexOf(ImageFormat.YV12)){_imageFormat = ImageFormat.YV12;}else{ _imageFormat = -1; return ;}
4,mediaCodec.dequeueOutputBuffer 返回-1 (此问题我还没有解决,如果有童鞋解决了,麻烦请留言,非常感谢)
现象:在编码的时候,前面的pps,sps,第一帧正常,之后就一直返回-1.
网上搜索了很久,但是都没有发现有效的解决方法
注:此问题出现在三星,努比亚手机上,华为,魅族手机并 不会出现此问题。
阅读全文
0 0
- MediaCodec问题汇总
- Mediacodec
- MediaCodec
- mediacodec编解码少帧问题
- android MediaCodec的自己碰到的问题
- mediacodec编解码少帧问题
- mediaCodec 的使用遇到的问题
- MediaCodec 编码H264 编码一帧后dequeueOutputBuffer为-1的问题
- MediaCodec 编码H264 编码一帧后dequeueOutputBuffer为-1的问题
- [RK3288][Android6.0] MediaCodec的bitrate_mode配置问题
- >>问题汇总<<
- 问题汇总
- 问题汇总
- 问题汇总!!!
- 问题汇总
- 问题汇总
- 问题汇总
- 问题汇总:
- IPC-管道(匿名管道)
- git常用命令之git push使用说明
- 模版方法模式与策略模式如何让软件开发符合“开闭原则”
- 安装Centos6.5
- okhttp上传文件时携带参数
- MediaCodec问题汇总
- MDI——单例模式
- kotlin学习笔记(四)
- 593. Valid Square
- 如何区分360浏览器和谷歌浏览器
- 关于PopupWindow点击不同按钮显示不同pop的解决
- 创建数据库 表 序列
- java中判断素数的六种方法
- Javascript let解析