【问题标题】:Camera2Video Api full screen preview and video qualityCamera2Video Api 全屏预览和视频质量
【发布时间】:2016-05-31 07:35:53
【问题描述】:

我正在构建一个关于 camera2video API 的应用程序。想要显示预览全屏,但它占据了屏幕的 70% 区域,如 Camera2video API Github https://github.com/googlesamples/android-Camera2Video 所示 并且视频质量参数也没有选项,因为它在已弃用的相机 API 中可用。

【问题讨论】:

    标签: android camera android-camera android-camera2


    【解决方案1】:

    Camera2Video 演示包含一个名为AutoFitTextureView 的类,该类在保留纵横比的同时适合纹理视图内的预览。如果您想拉伸预览以填满整个屏幕,只需使用常规的TextureView 而不是此类。

    您需要替换 Camera2VideoFragment 类中对 AutoFitTextureView 的引用,以及纵向和横向布局 XML 文件中的引用。将layout_widthlayout_height 更改为match_parent

    而且视频质量参数也没有选项,因为它在已弃用的相机 API 中可用

    将其设置在Camera2VideoFragment 中的MediaRecorder 对象(mMediaRecorder)上。

    【讨论】:

    • 感谢您的回复,关于全屏预览我试过用TextureView替换AutoFitTextureView,但是预览从上到下拉伸,看起来不太好。 :(
    • 是预览方向与屏幕方向不匹配的问题吗?
    • 方向匹配,比如我在竖屏查看,那么相机预览也是竖屏但是预览被拉长了。
    • 好的,那你想做什么?如果不拉伸时预览只占屏幕的70%,全屏就会被拉伸,这是无法避免的。让它看起来不被拉伸的唯一方法是剪掉部分预览。此外,请确保您使用的预览分辨率尽可能与屏幕的纵横比匹配(在chooseOptimalSize 函数中)。
    • 嗯.. 剪掉预览会很棒,你能指导我剪掉预览吗。
    【解决方案2】:

    camera2 工具不太好。在您的情况下,您找到方法 chooseVideoSize 并通过以下方式进行更改:

    private Size chooseVideoSize(Size[] choices) {
    
            for (Size size : choices) {
                if (size.getWidth() == size.getHeight() * 16 / 9 && size.getWidth() <= 1080) {
                    return size;
                }
            }
            Log.e(TAG, "Couldn't find any suitable video size");
            return choices[choices.length - 1];
        }
    

    接下来,您应该将 android:layout_alignParentEnd="true" 插入到默认布局文件夹的 fragment_camera2_video.xml 中。它看起来像:

    <com.example.android.camera2video.AutoFitTextureView
            android:id="@+id/texture"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentEnd="true" //add here
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true" />
    

    【讨论】:

      【解决方案3】:
      int width = MeasureSpec.getSize(widthMeasureSpec);
          int height = MeasureSpec.getSize(heightMeasureSpec);
          if (0 == mRatioWidth || 0 == mRatioHeight) {
              setMeasuredDimension(width, height);
          } else {
              if (width < height * mRatioWidth / mRatioHeight) {
                  setMeasuredDimension(height * mRatioWidth / mRatioHeight, height);
              } else {
                  setMeasuredDimension(width, width * mRatioHeight / mRatioWidth);
              }
          }
      

      在 onMeasure 方法的 AutoFitTextureview 类中更改此项

      【讨论】:

      • 你还记得这是做什么的吗?我的意思是它会拉伸它并切割边缘吗?至少对我来说,相机预览现在适合整个屏幕,但它看起来像是遗漏了一些东西。现在宽度好像还可以,但是高度真的不对。
      • @kataroty 你解决了身高问题
      • @FrankOdoom 是的,我不记得我是怎么做到的。
      • @kataroty 你能告诉我我需要对此有所了解吗,将不胜感激
      猜你喜欢
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 2013-01-21
      相关资源
      最近更新 更多