Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从不是';t使用mimeType初始化_Javascript_Web Mediarecorder_Mediarecorder Api - Fatal编程技术网

Javascript 从不是';t使用mimeType初始化

Javascript 从不是';t使用mimeType初始化,javascript,web-mediarecorder,mediarecorder-api,Javascript,Web Mediarecorder,Mediarecorder Api,我正在使用MediaRecorder API在页面上录制一些媒体。在我的MediaRecorder初始化中,我没有指定内容类型,因为我不需要任何特别的内容。浏览器可以选择它想要的内容 var mediaRecorder = new MediaRecorder(stream); 但是,当需要保存该录制时,我需要知道blob的mimeType,以便确定合理的文件扩展名 我想要的是proprety,但它是一个空字符串。它没有将MediaRecorder的默认值设置为mimeType,因此我似乎无法知

我正在使用MediaRecorder API在页面上录制一些媒体。在我的MediaRecorder初始化中,我没有指定内容类型,因为我不需要任何特别的内容。浏览器可以选择它想要的内容

var mediaRecorder = new MediaRecorder(stream);
但是,当需要保存该录制时,我需要知道blob的mimeType,以便确定合理的文件扩展名

我想要的是proprety,但它是一个空字符串。它没有将MediaRecorder的默认值设置为
mimeType
,因此我似乎无法知道默认值是什么

  mediaRecorder.onstop = function (e) {
    var mediaFileUrl = window.URL.createObjectURL(
      new Blob(chunks, {type: /* TODO: mime type here */})
    );

    $('<a>').attr({
      href: mediaFileUrl,
      download: 'Recording.?????' // TODO: Use mime type to figure out file name extension
    })[0].click();

    window.URL.revokeObjectURL(mediaFileUrl);
    chunks = [];
  }
mediaRecorder.onstop=函数(e){
var mediaFileUrl=window.URL.createObjectURL(
新Blob(块,{type:/*TODO:mime-type here*/})
);
$('').attr({
href:mediaFileUrl,
下载:'Recording.???'//TODO:使用mime类型计算文件扩展名
})[0]。单击();
window.URL.revokeObjectURL(mediaFileUrl);
块=[];
}

对于音频,默认值似乎是
音频/ogg
,对于视频
视频/ogg
。通过VLC在Chrome和Firefox中进行测试


演示

此时,您无法直接获取所需信息

当前的W3C规范规定,如果未指定mimetype(由您指定):

UA将使用特定于平台的默认格式

这就是您的情况,您没有指定任何mimetype和UA,浏览器正在为您选择最适合的类型,并且没有关于返回所选格式的方法的规范

目前,唯一能让您接近这一点的方法是使用
isTypeSupported
,它提供一些媒体支持检测,不幸的是,它涉及到了大量的模拟类型、浏览器、平台、速率等。,它不适合编写一个函数来返回所选的mimetype和可用的组合数:
video/webm;codecs=“vp”
视频/mp4;codecs=“avc1.4d4015”

最初的想法可能是对用户隐藏所有这些细节,但实际上,用户需要知道mimetype以便保存生成的文件的具体情况经常出现

当前打开时提供了一种方法,以获得所有受支持的媒体类型,并按弱首选项排序,这意味着返回的第一个媒体类型将是UA选择的默认类型(如果未提供)


该问题创建于5月,但目前没有实际跟进。

这不能保证,将来的浏览器版本可能会更改。此外,我通常使用webm,而不是ogg。虽然这是事实,但这是现在获得正确mime的唯一方法。唯一的另一个选择是进行客户端内容嗅探,这并不容易。你能最终证明现有API不可能做到这一点吗?(简短的打字嗅探)我很乐意把赏金奖励给能证明这是不可能的人。
https://codecanister.com/Project/d547eed9/9/result 加载资源失败:服务器响应状态为404(未找到)
对我有效,您这边可能有问题?@guest271314包含编码媒体段的数组。以哪种格式编码?
chunks
ArrayBuffer
?在开始录制之前,您是否可以为用户提供选择要录制的
MIME
类型的选项?然后将
Blob
type
设置为selected
MIME
,而不是允许浏览器选择
MIME
类型;哪个似乎正在设置空字符串?您还可以利用
isTypeSupported
来确定浏览器是否可以播放特定的媒体类型。请参阅更新:Chrome错误跟踪到类似问题并已修复,因此生成的编码blob应正确指定
mimeType