首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安卓4K视频记录-一切正常工作,但制作的视频文件总是1080 p?

安卓4K视频记录-一切正常工作,但制作的视频文件总是1080 p?
EN

Stack Overflow用户
提问于 2018-02-10 00:35:36
回答 1查看 550关注 0票数 3

我正在工作的应用程序,捕捉4K视频只有使用camera2 API -没有预览面显示,没有音频记录。

我使用LG G5运行Android7.0.0。当被查询时,该设备报告camera2 API的完全实现。本机摄像头应用程序在4K中记录得很好。媒体记录仪报告的决议证实了4K的存在:

日志分辨率

初始化MediaRecorder的代码如下所示。我使用setProfile进行此操作,因为我无法设置配置文件而不使程序抛出异常,因为我没有设置任何音频记录设置(因为我不想或不想记录音频):

代码语言:javascript
运行
复制
        vidRecorder = new MediaRecorder();
        vidRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
        vidRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        vidRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        vidRecorder.setVideoFrameRate(30);
        vidRecorder.setCaptureRate(30);

        vidRecorder.setVideoEncodingBitRate(35000000);
        vidRecorder.setVideoSize(3840, 2160);

        vidRecorder.setOutputFile(videoFilename);

        vidRecorder.prepare();

上面的日志中没有显示任何问题。输出格式和编码器匹配的VLC报告的4K视频文件产生的手机本机应用程序。

上面的所有操作都很好,除了产生的视频文件总是1920x1080p!我不知道为什么会发生这种事。提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-12-16 13:25:43

您必须启用OpenGL es3.0或更高版本。然后,使用自定义类(而不是使用SurfaceView或GLES10 )重写GLSurfaceView作为Camera2 API预览。

理想情况下,您可以使用GLES32,因为它支持8K。

https://android.googlesource.com/platform/development/+/abededd/samples/browseable/Camera2Video/src/com.example.android.camera2video/Camera2VideoFragment.java

这个Camera2Video示例使用AutoFitTextureView:

https://github.com/googlearchive/android-Camera2Basic/blob/master/Application/src/main/java/com/example/android/camera2basic/AutoFitTextureView.java

您可能希望使用GLSurfaceView:

https://android.googlesource.com/platform/frameworks/base/+/master/opengl/java/android/opengl/GLSurfaceView.java

https://android.googlesource.com/platform/frameworks/base/+/master/graphics/java/android/graphics/SurfaceTexture.java

r2.1/core/java/android/view/Surface.java

这很乏味,但并不难。您只需将GLES10或GLES20替换为GLES30或理想的GLES32。

编辑:

我认为Android会自动使用最大的OpenGL ES版本,这就是为什么MediaPlayer可以在OpenGLES 3.0上播放4K视频,但它显示了OpenGL ES 2.0的黑色图像。

如果你的相机应用程序没有捕捉到4K,试着在MediaPlayer上播放4K视频,看看会发生什么:

Android:用mediaplayer播放本地视频

否则,您必须在updateTexImage API中找到来自SurfaceTexture的Camera2 ()的用法,并使用GLES30。目前还不清楚在哪里使用OpenGL ES,但它在SurfaceTexture.java中有明确的引用

Camera2 ImageCapture似乎完全绕过了Surface。虽然我可能弄错了。

至于MediaPlayer不能播放4K视频的问题,LG G5可能只支持OpenGL ES2.0。

4K需求

  1. 设备必须支持OpenGL es3.0或更高版本
  2. Android必须在表面、表面纹理上调用OpenGL es3.0或更高版本(尝试API 31)
  3. Camera2私有API必须调用OpenGL es3.0或更高版本(尝试API 31)

编辑

这个答案讨论了如何使用SurfaceView修改OpenGL。

用SurfaceTexture和OpenGL修改摄像机输出

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48716035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档