参考: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 ;这个不用多说。我使用魅族的手机,
然后
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 ...
mediaCodec = MediaCodec.createEncoderByType("video/avc");MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", width, height);
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;
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.  
网上搜索了很久,但是都没有发现有效的解决方法
注:此问题出现在三星,努比亚手机上,华为,魅族手机并 不会出现此问题。

MediaCodec问题汇总相关推荐

  1. 技术福利:最全实时音视频开发要用到的开源工程汇总

    [转自] https://my.oschina.net/jb2011/blog/1619628 1.前言 实时音视频的开发学习有很多可以参考的开源项目.一个实时音视频应用共包括几个环节:采集.编码.前 ...

  2. 福利贴:最全实时音视频开发要用到的开源工程汇总

    1.前言 实时音视频的开发学习有很多可以参考的开源项目.一个实时音视频应用共包括几个环节:采集.编码.前后处理.传输.解码.缓冲.渲染等很多环节.每一个细分环节,还有更细分的技术模块.比如,前后处理环 ...

  3. 2020年Android面试题汇总(初级)

    本博文转载自:https://www.jianshu.com/p/feb9584b492c  作者:Wocus 1.跨进程通信的几种方式 Intent,比如拨打电话 ContentProvider数据 ...

  4. 最常见NLP任务练手项目汇总

    分词 Word Segmentation chqiwang/convseg ,基于CNN做中文分词,提供数据和代码. 词预测 Word Prediction Kyubyong/word_predict ...

  5. 用python下载文件的若干种方法汇总

    压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...

  6. 命名实体识别训练集汇总(一直更新)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/leitouguan8655/artic ...

  7. LeetCode简单题之汇总区间

    题目 给定一个 无重复元素 的 有序 整数数组 nums . 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 .也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范 ...

  8. 2021年全网最详细大数据常见端口汇总❤️【建议收藏】❤️

    目录 大数据常见端口汇总 一.Hadoop 二.Zookeeper 三.Hbase 四.Hive 五.Spark 六.Kafka 七.Flink 八.Flume 九.Redis 十.CDH 十一.HU ...

  9. 2021年大数据环境命令(一):常用命令汇总

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 汇总Hadoop Hi ...

最新文章

  1. hdu 3887 Counting Offspring
  2. c++ new delete
  3. python 生成器读取文件
  4. 获取当前时间以及模拟倒计时(Java)
  5. Android:沉浸式状态栏(一)工具类
  6. HashMap的小知识点
  7. Linux查看分析任务计划命令,Linux任务计划crontab
  8. javascript:typeof与instanceof区别
  9. ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问。
  10. 如何使用swfobject(中文版)
  11. mysql数据库误删后能恢复吗_浅谈数据库误删除恢复
  12. python获取地图上经纬度_Python从地图上划出经纬度
  13. 皮特测评:蓝牙耳机哪个品牌最好?300元内最好的蓝牙耳机
  14. Linux云计算架构-设置计划任务与管理日志
  15. 使用setoolkit 进行钓鱼攻击
  16. 人民广场,上海博物馆
  17. iOS 获取手机型号信息大全
  18. Qt的QVector类
  19. 程序员职业规划之技术的精进-安晓辉-专题视频课程
  20. windows10如何安装hyper-v

热门文章

  1. mysql57 修改root密码,MySQL 5.7.x修改root默认密码(CentOS下)
  2. fullcalendar 显示的时间间隔只有四十五分钟_手腕上的机械闹钟百达翡丽 Ref.5520P旅行时间闹钟腕表...
  3. centos 重装 php5,centos6.6学习笔记:安装PHP5.5
  4. java控制语句练习题_[Java初探实例篇02]__流程控制语句知识相关的实例练习
  5. ps 2c语言程序,C语言基础(二)
  6. oracle prvg 1901,12c 打补丁analyze时报错
  7. php怎么添加框架,PHPWind 给默认的风格添加大框架
  8. exe4j 报错 找不到class
  9. javaee校园信息服务器,基于javaEE服务器 学生考勤管理系统的设计与实现开题报告...
  10. 程序员的24小时,简单纯粹又扎心...