【发布时间】:2020-11-22 09:15:30
【问题描述】:
我正在尝试从 Chrome Android 中的网络应用程序以 60 FPS 的速度捕获视频。我为调用getUserMedia 设置了适当的video.frameRate 约束。 Chrome 识别 frameRate 设置并通过视频轨道设置报告它以 60 FPS 的速度捕获,但视觉上视频仅为 30 FPS 而不是 60。在同一设备上,通过股票 Android 相机应用程序它以 60 FPS 的速度捕获流畅的视频与我通过网络应用程序尝试的分辨率相同。
我正在 Pixel 3a 上使用 Chrome Android 84 对此进行测试。我还在其他手机上以这些手机支持 60 FPS 的分辨率进行了测试,而不管它仅以 30 FPS 的速度捕获。
以下是演示此行为的示例代码。
我怎样才能做到这一点?还是 Chrome Android 目前无法以 60 FPS 进行捕捉?
<html>
<head>
<title>frameRate</title>
<script>
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
var constraints = {
video: {
width: { exact: 1920 },
height: { exact: 1080 },
facingMode: { ideal: "environment" },
frameRate: { exact: 60 }
}
};
navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {
var video = document.getElementById('video');
video.srcObject = stream;
video.play();
document.getElementById('frameRate').innerHTML = 'frameRate: ' + stream.getTracks()[0].getSettings().frameRate;
});
}
</script>
</head>
<body>
<p id="frameRate"></p>
<video id="video" width="1920" height="1080"></video>
</body>
</html>
【问题讨论】:
-
Chrome Android 的刷新率好像是 30Hz。我的基础是我多久可以让一个函数调用自己。简单的函数 f() {f();} 可以在 100s Hz 时调用自己,这没问题。但如果它使用“setTimeout”或“requestAnimationFrame”调用自己,我无法在笔记本电脑和三部不同的手机上低于 30 Hz。
-
你是如何确定“.. 视频只有 30 FPS”?
-
@AlexanderMathiasen 对我来说,60 FPS 的视频以超级流畅的运动而著称,一般没有明显的运动模糊。很难描述。我在移动设备上看到的显然不是那样,而且整体上也有很大的抖动。
标签: javascript android google-chrome html5-video