我正在录制和发送音频通过一个网站。为此,我使用了MediaRecorder API。
在桌面或安卓设备上使用这个站点没有任何问题,根据MediaRecorder文档的说法,自2020年9月发布以来,iOS 14也应该得到支持。
MediaRecorder被实例化如下:
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执行此操作时,从实例化行中得到以下错误:
NotSupportedError: mimeType is not supported
在尝试其他格式时,我也会遇到相同的错误(这些是我找到并尝试过的格式):
audio/webm
(如上面的示例所示)video/webm
audio/ogg
(桌面上也有错误)audio/ogg; codecs=opus
(桌面上也有错误)是否有mimeType for MediaRecorder允许我在iOS设备上使用音频?
我是不是完全搞错了?
发布于 2021-06-07 17:33:27
事实证明,video/mp4
与iOS一起工作。它也可以用于音频,尽管它说的是视频。
由于其他浏览器不支持video/mp4
,所以可以使用尝试/捕获( video/mp4
)作为后盾,从而得到以下解决方案:
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
但就目前而言,它是可行的,这对于个人项目来说已经足够好了。
发布于 2022-09-30 08:14:58
对我来说最好的解决方案是这样的:
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,因此在运行此代码之后,您将自动获得该选项。
我相信这可能是一种比尝试捕捉错误更好的方法。
https://stackoverflow.com/questions/67874713
复制相似问题