首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Chrome的JavaScript中录制音频,总是将视频/ogg发送到服务器

在Chrome的JavaScript中录制音频,总是将视频/ogg发送到服务器
EN

Stack Overflow用户
提问于 2021-04-03 15:33:28
回答 3查看 349关注 0票数 2

我一直在尝试在Chrome上录制OGG格式的音频,并将其发送回服务器,但它总是以视频/ogg格式出现。这就是我所拥有的:

音频采集:

代码语言:javascript
运行
复制
let chunks = [];
let recording = null;

let mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();

mediaRecorder.onstop = function() {
    recording = new Blob(chunks, { 'type' : 'audio/ogg; codecs=opus' });
}

mediaRecorder.ondataavailable = function(e){
    chunks.push(e.data);
}

将其发送到服务器:

代码语言:javascript
运行
复制
let data = new FormData();
data.append('audio', recording);

jQuery.ajax(...);

斑点到达后端,但总是在视频/ogg!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-04-05 17:24:22

我最终使用了kbumsik/opus-media-recorder,为我解决了这个问题。MediaRecorder的临时替代品。

票数 2
EN

Stack Overflow用户

发布于 2021-04-14 17:41:12

您需要从MediaStream中删除VideoTrack:

代码语言:javascript
运行
复制
const input = document.querySelector("video");
const stop_btn = document.querySelector("button");
input.onplaying = (evt) => {
  input.onplaying = null;
  console.clear();
  const stream = input.captureStream ? input.captureStream() : input.mozCaptureStream();
  // get all video tracks (usually a single one)
  stream.getVideoTracks().forEach( (track) => {
    track.stop(); // stop that track, so the browser doesn't feed it for nothing
    stream.removeTrack( track ); // remove it from the MediaStream
  } );
  const data = [];
  const recorder = new MediaRecorder( stream, { mimeType: "audio/webm" } );
  recorder.ondataavailable = (evt) => data.push( evt.data );
  recorder.onstop = (evt) => exportFile( new Blob( data ) );
  
  stop_btn.onclick = (evt) => recorder.stop();
  stop_btn.disabled = false;
  recorder.start();  
};
console.log( "play the video to start recording" );


function exportFile( blob ) {
  stop_btn.remove();
  input.src = URL.createObjectURL( blob );
  console.log( "video element now playing recoded file" );
}
代码语言:javascript
运行
复制
video { max-height: 150px; }
代码语言:javascript
运行
复制
<video src="https://upload.wikimedia.org/wikipedia/commons/2/22/Volcano_Lava_Sample.webm" controls crossorigin></video>
<button disabled>stop recording</button>

由于StackOverflow的空源iframe不允许安全的下载链接,因此使用带有下载链接的here is a fiddle

票数 2
EN

Stack Overflow用户

发布于 2021-04-03 17:59:27

您需要设置MediaRecordermimeType。否则,浏览器将选择它最喜欢的任何格式对媒体进行编码。

代码语言:javascript
运行
复制
let mediaRecorder = new MediaRecorder(stream, { mimeType: 'my/mimetype' });

为了确保浏览器可以实际编码您想要的格式,您可以使用isTypeSupported()

代码语言:javascript
运行
复制
console.log(MediaRecorder.isTypeSupported('my/mimetype'));

例如,Chrome不支持"audio/ogg; codecs=opus",但支持"audio/webm; codecs=opus"。Firefox同时支持这两种功能。它们都不是野生动物。

一旦配置了MediaRecorder,就可以在创建blob时使用它的mimeType

代码语言:javascript
运行
复制
recording = new Blob(chunks, { 'type' : mediaRecorder.mimeType });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66928752

复制
相关文章

相似问题

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