首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MediaRecorder iOS 14.6:不支持mimeType

MediaRecorder iOS 14.6:不支持mimeType
EN

Stack Overflow用户
提问于 2021-06-07 15:44:14
回答 2查看 2.5K关注 0票数 1

我正在录制和发送音频通过一个网站。为此,我使用了MediaRecorder API。

在桌面或安卓设备上使用这个站点没有任何问题,根据MediaRecorder文档的说法,自2020年9月发布以来,iOS 14也应该得到支持。

MediaRecorder被实例化如下:

代码语言:javascript
运行
复制
navigator.mediaDevices.getUserMedia({ audio: true, video: false })
  .then((stream) => {
    // Some validation and other processing. Omitted for brevity.

    const mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/webm' });

    // Using the mediaRecorder. Omitted for brevity.
  });

在iPhone 12上使用iOS 14.6执行此操作时,从实例化行中得到以下错误:

代码语言:javascript
运行
复制
NotSupportedError: mimeType is not supported

在尝试其他格式时,我也会遇到相同的错误(这些是我找到并尝试过的格式):

  • audio/webm (如上面的示例所示)
  • video/webm
  • audio/ogg (桌面上也有错误)
  • audio/ogg; codecs=opus (桌面上也有错误)

是否有mimeType for MediaRecorder允许我在iOS设备上使用音频?

我是不是完全搞错了?

EN

回答 2

Stack Overflow用户

发布于 2021-06-07 17:33:27

事实证明,video/mp4与iOS一起工作。它也可以用于音频,尽管它说的是视频。

由于其他浏览器不支持video/mp4,所以可以使用尝试/捕获( video/mp4 )作为后盾,从而得到以下解决方案:

代码语言:javascript
运行
复制
let mediaRecorder;
try {
  mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/webm' });
}
catch (err1) {
  try {
    // Fallback for iOS
    mediaRecorder = new MediaRecorder(stream, { mimeType: 'video/mp4' });
  }
  catch (err2) {
    // If fallback doesn't work either. Log / process errors.
    console.error({err1});
    console.error({err2})
  }
}

可以通过以下方式使代码更加清晰和明确:

  • 显式捕获NotSupportedError
  • 查询设备/操作系统并显式使用相应的mimeType,而不是有意地遇到错误。

但就目前而言,它是可行的,这对于个人项目来说已经足够好了。

票数 2
EN

Stack Overflow用户

发布于 2022-09-30 08:14:58

对我来说最好的解决方案是这样的:

代码语言:javascript
运行
复制
if (MediaRecorder.isTypeSupported('video/webm; codecs=vp9')) {
    var options = {mimeType: 'video/webm; codecs=vp9'};
} else  if (MediaRecorder.isTypeSupported('video/webm')) {
    var options = {mimeType: 'video/webm'};
} else if (MediaRecorder.isTypeSupported('video/mp4')) {
    var options = {mimeType: 'video/mp4', videoBitsPerSecond : 100000};
} else {
    console.error("no suitable mimetype found for this device");
}
const mediaRecorder = new MediaRecorder(stream, options);

IOS只允许mp4,因此在运行此代码之后,您将自动获得该选项。

我相信这可能是一种比尝试捕捉错误更好的方法。

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

https://stackoverflow.com/questions/67874713

复制
相关文章

相似问题

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