我正在尝试从 Chrome Android 中的网络应用程序以 60 FPS 的速度捕获视频。我video.frameRate为调用设置了适当的约束getUserMedia。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: { …Run Code Online (Sandbox Code Playgroud) 有没有办法在使用 MediaRecorder 时在 Chrome 中记录 ogg 格式?我相信,Chrome 默认支持 WebM。以下是我所做的
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
rec = new MediaRecorder(stream);
rec.ondataavailable = e => {
audioChunks.push(e.data);
if (rec.state == "inactive")
{
let blob = new Blob(audioChunks, { 'type': 'audio/ogg; codecs=opus' });
}
};
})
.catch(e => console.log(e));
Run Code Online (Sandbox Code Playgroud) 我正在使用 React Js 构建一个应用程序,它可以录制用户的音频,将文件或 blob 上传到云存储,并从文件 URL 播放录制的音频。
问题是,当从 Chrome 录制音频时,它只能在 Chrome 上播放,而不会在 Safari 中播放。另一方面,如果音频是从 Safari 录制的,则它在两个浏览器上都可以正常播放。
测试于
这是实现。
录音部分:
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const recorder = new MediaRecorder(stream);
recorder.addEventListener('dataavailable', ({ data }) => {
const audioBlob = new Blob([data], { type: 'audio/mpeg' });
// or new File([audioBlob], 'name.mp3', { type: 'audio/mpeg' });
// upload blob or file to server
});
// on start …Run Code Online (Sandbox Code Playgroud)