如何使用 getUsermedia 和 mediaRecorder 下载录音并给出视频规范?

Posted

技术标签:

【中文标题】如何使用 getUsermedia 和 mediaRecorder 下载录音并给出视频规范?【英文标题】:How to download a recording using getUsermedia and mediaRecorder and give the video specifications? 【发布时间】:2021-11-04 14:38:29 【问题描述】:
navigator.mediaDevices.getUserMedia().then(stream=>

//a recorder is created
var mediaRecorder = new MediaRecorder(stream);

//started it
mediaRecorder.start();

//an array is created that receives all the data
var recordedChunks = [];

//fill it
mediaRecorder.ondataavailable = function(e)recordedChunks.push(e.data);

//when stopped downloads the recording
mediaRecorder.onstop=function()

  var blob = new Blob(recordedChunks, 
    'type': 'video/mp4'
  );
  var url = URL.createObjectURL(blob);
  var a = document.createElement('a');
  document.body.appendChild(a);
  a.style = 'display: none';
  a.href = url;
  a.download = 'test.webm';
  a.click();
  window.URL.revokeObjectURL(url);

.catch()

此代码适用于我,但下载视频时,下载时没有详细信息 (左图:从 youtube 下载的视频;右图:使用 mediaRecorder 下载的视频) https://i.stack.imgur.com/IxmYD.png

另一个问题是视频中无法执行必要的操作(加速,转到特定时间),因为它没有结束时间 https://i.stack.imgur.com/yF7qx.png

我可以做些什么来提供所需的详细信息 - 格式?

从您的网络摄像头下载录制文件时,此页面也存在相同问题 https://webrtc.github.io/samples/src/content/getusermedia/record/

【问题讨论】:

【参考方案1】:

如果您想为 MediaRecorder 创建的录制文件设置 MIME 媒体类型,则必须在调用其 constructor 时执行此操作。例如:

stream = await navigator.mediaDevices.getUserMedia (constraints)
const mediaRecorder = new MediaRecorder(stream, mimeType: 'video/mp4')

但大多数浏览器(即 Chromium 和 Firefox)的 MediaRecorder 不会产生 video/mp4。相反,他们产生video/webm。您可以使用 MediaRecorder.isTypeSupported() 来确定它是否可以处理您想要的类型,或者您可以采用它提供的任何类型。 mediaRecorder.mimeType 是您的 MediaRecorder 实例的一个属性,告诉您您获得的 MIME 类型。

如果您想从这些浏览器获取 mp4 录音,您必须对其进行后处理。

当然,现场录音没有长度是正确的。 MediaRecorder 产生适合现场播放的数据流。同样,如果要使其可搜索并应用结束时间,则需要使用后处理。 MediaRecorder 不这样做。

ffmpeg 是一种不错的视频后处理方式。解释如何做到这一点远远超出了 *** 答案的范围。

【讨论】:

以上是关于如何使用 getUsermedia 和 mediaRecorder 下载录音并给出视频规范?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 getUsermedia 和 mediaRecorder 下载录音并给出视频规范?

如何在 iOS 版 Chrome 中使用 getUserMedia

如何在使用 navigator.mediaDevices.getUserMedia 录制音频时修复广泛的回声?

如何从 javascript 上的 getUserMedia() 获取超过 3 声道的音频输入

如何使 getUserMedia() 在所有浏览器上工作

如何使用 getusermedia 让网络摄像头在 Firefox 上可靠地工作?