关闭

基于SnapDragonBoard410c的视频录制出现分辨率变化的原因

标签: 视频android
163人阅读 评论(0) 收藏 举报
分类:

某天搞来一块410c开发板开始录制的时候报我MediaRecorder: start failed错误。
经过一番折腾,才发现是分辨率的问题。
事情是这个样子的:
按正常流程,在录制前,我们需要设置camera的分辨率和录制的分辨率。
也就是

Parameters parameter=camera.getParameters();
parameter.setPreviewSize(1280,720);
//以及
mRecorder.setVideoSize(1280,720);

这里有个问题。设置分辨率的时候值必须是设备支持的。如果设置了不支持的分辨率,运行时就会报错。
那么,怎么获得支持的分辨率呢?很简单:

Parameters parameter=camera.getParameters();
List<Camera.Size> prviewSizeList = parameter.getSupportedPreviewSizes();
List<Camera.Size> videoSizeList = parameter.getSupportedVideoSizes();

这里有两组分辨率。问题就在这,大部分手机这两组值是一样的。然而有部分手机却是不一样的。如果天真的使用其中一组里的值来设置预览和录制的分辨率,十有八九会有一个不支持导致错误。
所以我们需要根据两组不同的分辨率设置预览和录制。
比如我们以预览的分辨率为基准,查找出最接近的视频录制分辨率(以宽度为准):

Camera camera = Camera.open(0);
Parameters parameter=camera.getParameters();
List<Camera.Size> prviewSizeList = parameter.getSupportedPreviewSizes();
List<Camera.Size> videoSizeList = parameter.getSupportedVideoSizes();
parameter.setPreviewSize(prviewSizeList.get(0).width,prviewSizeList.get(0).height);

//查找出最接近的视频录制分辨率
public int bestVideoSize(int _w){
        //降序排列
        Collections.sort(videoSizeList, new Comparator<Camera.Size>() {
            @Override
            public int compare(Camera.Size lhs, Camera.Size rhs) {
                if (lhs.width > rhs.width) {
                    return -1;
                } else if (lhs.width == rhs.width) {
                    return 0;
                } else {
                    return 1;
                }
            }
        });
        for(int i=0;i<videoSizeList.size();i++){
            if(videoSizeList.get(i).width<_w){
                return i;
            }
        }
        return 0;
    }

int index=bestVideoSize(prviewSizeList.get(0).width);
MediaRecorder mRecorder = new MediaRecorder();
mRecorder.setVideoSize(videoSizeList .get(index).width,videoSizeList .get(index).height);
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

安卓录制视频的时候,预览和录制设置成不同分辨率的步骤

项目中使用全屏预览,但是录制文件的大小需要限制,所以不能把全屏的分辨率直接录制下来,我在网上看到的问答摘录下来,原地址:http://stackoverflow.com/questions/14132...
  • zzcchunter
  • zzcchunter
  • 2017-02-10 10:42
  • 1258

[Android实例] 视频播放三种设置全屏适应不同分辨率显示器

最近在做Android上播放音频的功能,需要视频全屏播放,自己研究了一下,随便总结了如下3种设置方式,大家都来交流交流,如果满意请顺便给分享谢谢~~~ 第一种方式         this...
  • sdvch
  • sdvch
  • 2015-03-10 22:36
  • 7637

[ffmpeg]视频帧率、视频码流与视频分辨率相关知识

一、帧率、码流与分辨率   帧率概念   一帧就是一副静止的画面,连续的帧就形成动画,如电视图象等。我们通常说帧数,简单地说,就是在1秒钟时间里传输的图片的数,也可以理解为图形 处理器每秒...
  • zhaojian3513012
  • zhaojian3513012
  • 2016-02-18 09:55
  • 4007

基于SnapDragonBoard410C的机械臂(一)

今天我就基于高通410c的开发板开发的机械臂给大家分享下我们的开发过程。在开发中遇到最大的问题就是我么的智能小车是采用舵机控制的,导致我们往里面写一个值的时候电机一直以这个值做功。所以我们每次进行控制...
  • u013763766
  • u013763766
  • 2017-12-07 16:12
  • 206

基于SnapDragonBoard410c的远程防盗系统 (三)

本次我将继续为大家讲解基于SnapDragonBoard410c的远程防盗系统的整体架构和开发过程中应注意的问题。我们用户在打开APP时 ,可以实时的获取自己家门的情况。本次我将带大家深入了解一下,关...
  • u013763766
  • u013763766
  • 2017-12-06 11:37
  • 164

基于SnapDragonBoard410c的远程防盗系统 (二)

本次我将继续为大家讲解基于SnapDragonBoard410c的远程防盗系统的整体架构和开发过程中应注意的问题。需要的硬件如下:410c开发板一块,超声波模块一个 ,Camera模组一个 ,无线热点...
  • u013763766
  • u013763766
  • 2017-11-21 11:33
  • 208

基于SnapDragonBoard410c的智能小车(一)

今天我就基于高通410c的开发板开发的智能小车给大家分享下我们的开发过程。在开发中遇到最大的问题就是我么的智能小车是采用舵机控制的,导致我们往里面写一个值的时候电机一直以这个值做功。正因为如此,我们便...
  • u013763766
  • u013763766
  • 2017-12-07 15:41
  • 190

Android MediaRecorder视频录制,多分辨率调节

我做毕业设计时候需要实现先拍摄后上传的功能,还要支持多分辨率,虽然MediaRecorder的教程很丰富,但是实现起来却一波三折,这里记录下来的代码也只是在我自己的2.3的Android上跑起来没有问...
  • wyzxk888
  • wyzxk888
  • 2012-01-02 14:30
  • 11256

使用wm命令修改Dragonboard410c Android的显示分辨率

wm是高通平台(MTK平台类似的命令为am)下对手机分辨率、像素密度、显示区域进行设置的命令。具体如下图:可以看到,wm命令的参数还是比较少的,我们逐条来看下相关命令不同参数的使用:1.wm size...
  • cgx090902
  • cgx090902
  • 2017-07-27 10:57
  • 738

基于dragonboard 410c的智能魔镜设计(4)——视频消息检索及自动播放

前面给大家介绍了如何自动的检索指定用户的文本消息,并且采用html模板方式在qt控件上自动循环的播放文本消息,但是在智能魔镜中我们还可以向指定用户推送视频消息,实时显示视频消息,这里进一步向大家介绍如...
  • ANDYMFC
  • ANDYMFC
  • 2017-01-05 11:00
  • 864
    个人资料
    • 访问:3113次
    • 积分:228
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类