gpt4 book ai didi

android - 三星 Galaxy S5 无法以低分辨率/帧率录制视频

转载 作者:太空狗 更新时间:2023-10-29 13:21:13 25 4
gpt4 key购买 nike

我有一个使用 MediaRecorder 录制视频的应用程序,但我在 Samsung Galaxy S5 SM-G900F 上遇到低分辨率录制问题(仅此设备 - 以支持的最低视频分辨率录制在我测试过的所有其他设备上都能正常工作与)。

我首先询问相机参数(使用相机参数对象,所以 mParameters.getSupportedVideoSizes();mParameters.getSupportedPreviewSizes();)检查可用的录制和预览分辨率,S5 分别返回以下支持的视频和预览尺寸:

Video Size List:        Preview Size List:
W = 1920, H = 1080
W = 1920, H = 1080 W = 1440, H = 1080
W = 1440, H = 1080 W = 1280, H = 720
W = 1280, H = 720 W = 1056, H = 864
W = 800, H = 450 W = 960, H = 720
W = 800, H = 480 W = 800, H = 480
W = 720, H = 480 W = 720, H = 480
W = 640, H = 480 W = 640, H = 480
W = 352, H = 288 W = 352, H = 288
W = 320, H = 240 W = 320, H = 240
W = 176, H = 144 W = 176, H = 144

返回的支持帧率范围是 10,000-30,000,所以我选择 10,000 作为最低记录分辨率 (10FPS)。

我选择了 S5 提供的最低分辨率,即 176(w) x 144(h)(以保持较小的视频文件大小),然后进行以下 MediaRecorder 设置...

mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setVideoFrameRate(10);
mMediaRecorder.setVideoSize(176, 144);
mMediaRecorder.setVideoEncodingBitRate(256000);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); // Preview size is also set to 176 x 144
mMediaRecorder.setOutputFile(mVideoFilename);

...然后调用 mMediaRecorder.prepare();,然后调用 mMediaRecorder.start();

此代码在“Sony XPeria”、“HTC One”、“HTC One V”、“Samsung Galaxy S3”、“HTC Explorer”和许多其他设备上运行良好,运行各种 Android 版本Gingerbread 到 KitKat(我无法在 Gingerbread 上获得单独的视频大小列表)。

只有 Samsung Galaxy S5 在 176 x 144 下录制时出现问题。调用 mMediaRecorder.start(); 时,录制无法开始,并显示“java.lang.RuntimeException:启动失败。 “异常。

我不知道是什么问题。所有其他录制分辨率(增加 EncodingBitRate 设置)都可以正常工作 - 只有 176 x 144 在 S5 上不起作用。

还有其他人遇到过这个问题吗?有人知道 S5 是否存在问题,导致在支持的最低视频分辨率下无法正常录制吗?还是我遗漏了一些三星“技巧”?

如有任何帮助或见解,我们将不胜感激 - 我正在为这个问题而焦头烂额!

最佳答案

我发现问题出在帧率上,而不是分辨率上。 S5 似乎在谎报它支持的预览帧率。或者,更准确地说,getSupportedPreviewFpsRange() 返回的值列表不是受支持帧速率的实际范围

S5 从 getSupportedPreviewFpsRange() 返回 (10000, 30000),根据文档,这是设备支持的视频帧速率的范围,这意味着支持该范围内的任何帧速率(或者设备将尝试尽可能接近 mMediaRecorder.setVideoFrameRate() 中指定的速率)。

S5 的想法不同!正如我所做的那样,将帧速率设置为 10 会阻止 MediaRecorder 开始视频录制,并出现熟悉的 MediaRecorder(22664): start failed: -19 异常。

mMediaRecorder.setVideoFrameRate(10) 调用中,我得到一个 CameraSource(262): Requested frame rate (10) is not supported: 15,24,30异常(exception),这意味着 15、24 和 30 是唯一支持的帧速率。如果我使用 mMediaRecorder.setVideoFrameRate(20),我会得到同样的异常,但如果我使用 mMediaRecorder.setVideoFrameRate(30),它工作正常。

我还得到一个 OMX-VENC-720p(262): Invalid entry returned from get_supported_profile_level 2130706433, 65536 异常,这似乎与 MediaRecorder 设置有关,但任何人都猜测它到底是什么意味着。

我不知道我怎么知道 15fps、24fps 和 30fps 是唯一受支持的帧速率。

如果其他人知道我可以在不被 CameraSource(262): Requested frame rate (X) is not supported: 15,24,30 异常绊倒的情况下找到它,我很想知道它是什么。

我使用的方法已在包括三星 S3 在内的数十种设备类型上证明有效,因此这个问题似乎是 S5 特有的。因此,我不得不通过首先确定该应用程序在哪部手机上运行来强制使用特定于 S5 的帧速率,这并不理想 - 感谢三星!

最后,有人知道如何/在哪里可以向三星报告这个错误吗?

关于android - 三星 Galaxy S5 无法以低分辨率/帧率录制视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28552207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com