1.问题:

首先我的应用场景Mediacodec ,使用了摄像头流与录屏流,中间会进行切换,然后录出来一个完整的视频,也就是从摄像到录屏再到摄像再录屏,需求比较。。。因为要录像又要录屏,所以不可能直接用手机屏幕的实际分辨率。所以从camera.getParameters()获取宽高并设置为输出的视频的分辨率。现象是很多手机上看录制好的视频录屏那块被缩小了,其实是因为有黑边造成的。因此问题其实是基于录屏的输出视频分辨率为核心的,其他录屏方案也大多适用。

2.分析

大多数手机获取的camera的分辨率与屏幕的分辨率不一致,重要的是长宽比不一样,比如说。相机获取了1920*1080的分辨率,而你的手机是2340*1080的分辨率,在录屏的时候输出视频,第一录屏要全屏录,也就是宽是2340,第二视频不会裁剪,所以你最后要输出1920*1080,他的宽自然要缩小,高度也就跟着等比缩小,然后上下会有黑边填充。也就是其实视频最后输出的是1920*1080,之所以看起来小了是上下填充了黑边。

所以你要做的就是一个断点一个断点的去看相机支持的分辨率,然后一个一个去算比例,然后发现一些规律,然后换一部手机,然后再执行这一套操作,然后再换一步手机。。。

好在这些我都替你做了。

3.处理

      查找camera支持的分辨率中最接近手机实际屏幕比例的值

其实是从手机支持的视频分辨率中找,不过因为也要用摄像头,视频支持的包括摄像头支持且比摄像头支持的多,所以要从摄像头支持的里找。即List<Camera.Size> prviewSizeList = myParameters.getSupportedPreviewSizes();不开摄像头的可以试着从List<Camera.Size> videoSizeList = myParameters.getSupportedVideoSizes();里找。下面是核心代码

public void initCamera() {getScreenSize();//注:摄像头相关的设置不写了,省的看混............Camera.Parameters myParameters = myCamera.getParameters();//获取摄像头支持的分辨率List<Camera.Size> prviewSizeList = myParameters.getSupportedPreviewSizes();//获取手机支持的视频分辨率//List<Camera.Size> videoSizeList = myParameters.getSupportedVideoSizes();//获取最接近的分辨的索引int selectIndex = bestVideoSize(prviewSizeList);............//设置相机预览尺寸//TODO 在你设置视频大小的地方也是用这里计算出来的值,以为我设置录制视频分辨率的地方不在,
//这,不过也是取得这里的值,所以就不写了
myParameters.setPreviewSize(prviewSizeList.get(selectIndex).width,prviewSizeList.get(selectIndex).height);}int mRealSizeWidth;//手机屏幕真实宽度
int mRealSizeHeight;//手机屏幕真实高度/*** 查找最接近屏幕宽高比的参数* @param cameraSizeList* @return*/
public int bestVideoSize(List<Camera.Size> cameraSizeList) {if (cameraSizeList == null) {return -1;}//计算屏幕的实际分辨率的比值float realRatio = ((float) mRealSizeWidth / (float) mRealSizeHeight);int index = 0;//目标索引float outRatio = -1f;for (int i = 0; i < cameraSizeList.size(); i++) {if (cameraSizeList.get(i).height <= mRealSizeHeight) {//取的值高度不能高于屏
//幕真实高度float ratio = (float) (cameraSizeList.get(i).width) / (float) (cameraSizeList.get(i).height);if (outRatio == -1f) {outRatio = Math.abs(ratio / realRatio - 1);index = i;} else {if (outRatio > Math.abs(ratio / realRatio - 1)) {//取绝对值小的值,即选择与屏幕分辨率最接近的值index = i;outRatio = Math.abs(ratio / realRatio - 1);}else if (outRatio == Math.abs(ratio / realRatio - 1)) {//如果有两组长宽比完全一样的,选择height比较大,小的可能会视频模糊if (cameraSizeList.get(i).height >= cameraSizeList.get(index).height) {index = i;outRatio = Math.abs(ratio / realRatio - 1);}}}}}return index;}//计算屏幕真实分辨率
public void getScreenSize() {WindowManager windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);Display display = windowManager.getDefaultDisplay();Point outPoint = new Point();if (Build.VERSION.SDK_INT >= 19) {// 可能有虚拟按键的情况display.getRealSize(outPoint);} else {// 不可能有虚拟按键display.getSize(outPoint);}mRealSizeHeight = outPoint.y;mRealSizeWidth = outPoint.x;}

注意:我录的是横屏,所以我比较的都是高度height,如果是竖屏,最好是用宽度width。

安卓手机的各种各样的分辨率问题不再多说了,没办法把所有的都测一遍,从我手里的一批手机测过后都是达到了比较完美的效果(除非你手机的相机有支持与屏幕比例一模一样的分辨率,否则几乎不会是完全的全屏,最终的效果也会因手机不同有些许差异),如果有不合适的,可以在bestVideoSize()方法里通过限制你要取值的height的高度范围这个方向考虑。

Android 录屏(录像)录制视频自定义输出视频分辨率,设置最合适尺寸;Android Mediacodec 录屏输出视频被缩小,Android 录屏全屏,录屏自定义尺寸,录屏录像黑边相关推荐

  1. PowerPoint输出图片分辨率设置

    最近想用ppt画几张图,但是输出的分辨率有点不够意思,然后就想着改一下输出分辨率,这里记录一下方便以后查阅. PowerPoint输出图片分辨率设置

  2. 计算机EV录屏培训体会,ev录屏不能录制声音怎么办?对照原因进行解决

    很多用户在做系统演示的时候都会用到ev软件来录制电脑的操作屏幕.但是有部分新用户对该软件不太熟悉,在ev录屏时会发生录不进去声音的情况.那该怎么解决这个问题?下面来详细讲解ev录屏录不进去声音的解决办 ...

  3. android 环形时间显示_Android圆形进度条颜色的设置

    最近几天由于项目的需要研究了一下listView的滑动数据动态的更新显示,其中需要在数据加载过程有圆形进度条的显示,遇到的问题是进度条的颜色设置,在网上查了一些资料结合自己的所得分享在此. xml布局 ...

  4. 用专业的录屏软件录制视频,你会发现这些好处

    数字媒体视频行业的快速发展,也越来越多的人会有录制的需求.很多人在纠结选录屏软件是选择普通还是专业的,其实小编个人还是建议最好选专业录屏软件.为什么呢?原因有以下几点. 科技的发展,现在录屏软件真的是 ...

  5. windows录屏_录制视频的软件有哪些?三款软件轻松应对录屏_

    2020年10月20日 17:35作者:黄页编辑:黄页 录制视频的软件有哪些?日常生活中我们使用手机和电脑接收外界的信息,在浏览屏幕的过程中,总会遇到一些精彩的内容.像一些直播.游戏.会议.学习的课程 ...

  6. 【超详细教程】Mac如何用QuickTime录屏soundflower录制屏内外声音(附视频演示教程)

    作者:齐木南子酱 链接:http://www.i5seo.com/mac-own-software-recording-screen.html 来源:长沙SEO霜天 如何用mac自带软件录屏且录制屏内 ...

  7. 华为手机录屏大师录制的视频在本地目录找不到无法转移到PC的问题解决方案——免费转移视频

    录屏大师录制的视频保存在手机本地目录:/storage/emulated/0/LuPingDaShi/Rec 手机连上数据线后查看视频保存目录: (1) 华为Honor 6X:此电脑\Honor 6X ...

  8. 【小记】关于录屏大师录制视频的导出问题

    录·屏·大·师 视频导出 问题描述 今天因为一些原因,需要把直播视频录制下来,下载了录·屏·大·师.等我录制完毕之后,突然发现在自己的文件管理里没有找到相应的视频.诶!我就纳闷了,不是录下来了,在 a ...

  9. 录屏软件录制视频,如何转换成MP4的格式?

    随着我们使用录屏软件的频率越来越高,随之而来的问题也就越来越多了.录屏软件录制视频,如何转换成MP4的格式呢?下面小编将以两个方面给大家分享这个问题的解决方法.(转换成其他方法的同样适用!) 1. 录 ...

  10. 利用OBS和手机摄像头录课(录屏/录像)时的方法与参数设置

    目录 1. OBS下载地址 2. OBS录屏设置 2.1 使用向导设置做全局设置 2.2 详细设置 2.2.1 视频设置 2.2.2 音频设置 2.2.3 输出设置 2.2.4 快捷键设置 3. 麦克 ...

最新文章

  1. 深入TCP/IP协议1---图解OSI参考模型
  2. [RGEOS]空间拓扑关系
  3. #include quot;*.cquot;文件的妙用
  4. 【实验】华为静态路由基础配置
  5. 【LeetCode】130.被围绕的区域
  6. 蓝桥杯2015初赛-奇妙的数字
  7. B. Alyona and a tree(dsu on tree + bit)
  8. 拼图项目的诅咒:为什么Java 9一遍又一遍地延迟?
  9. 机器学习之线性回归 损失函数、代价函数、目标函数
  10. 和python哪个容易胖_为什么有些人特别容易胖?
  11. Java List接口概述
  12. arch linux arm下载_linux系统下编译给android JNI调用的Gmssl库
  13. vue的route和router的区别
  14. AcWing 4071. 国际象棋
  15. 大秦帝国和芈月传对比
  16. Dart 2.18 正式发布
  17. OpenCvSharp (C# OpenCV) OCR实现中英文识别 文字识别(附WinForm完整源码)
  18. 2021年高处安装、维护、拆除考试试卷及高处安装、维护、拆除证考试
  19. 哈工大操作系统学习笔记十——信号量与死锁
  20. 如何安装My SQL

热门文章

  1. 纯css改变checkbook样式
  2. 怎么将视频转换成mp4?
  3. matlab max/min/median函数用法以及自定义函数求最大最小值和中位数
  4. 不懂技术能做项目经理吗?
  5. 利用xlsl.full.js导入excel表格
  6. CentOS7安装oh-my-zsh(github start Top 10)
  7. kong翻译_最全的中国姓氏英文说法,你知道自己的姓氏怎么翻译吗?
  8. MDK与keilC51共存的方法
  9. 影响中国信息化全面预算管理的十大案例
  10. linux文件权限651,Linux基础之文件权限详解