Rub*_*uby 4 javascript audio webrtc
我在浏览器中以 MediaStream 的形式从 WebRTC 接收音频。我需要将其转换为音频文件,最好是 ogg。理想情况下,音频文件将上传到服务器,但将其作为文件下载到客户端是第二个最佳选择。
我已经学会了如何以 Blob 形式上传音频,因此如果有办法先将其保存到 Blob 中,那应该就足够了。
您无法直接将流即时转换为文件或 Blob,因为 MediaStream 是一个无限的数据源,没有固定的开始和结束,即使您“只是”从连接的另一端流式传输文件。另一方面,Blob/文件有固定的开始和结束。对于转换,您需要在某处定义开始和结束。
根据您的需要,关于如何实际设置开始和结束边界有无数的选项,但这实际上取决于您的需要使用哪一个(例如按钮按下、流轨道的onending事件、来自服务器的事件……) 。
正如 @Kaiido 指出的,您可以使用 MediaRecorder 将 MediaStream 的部分转换为 Blob。然后可以将 Blob 转换为文件:
let recordedData = [];
const mediaRecorder = new MediaRecorder( yourIncomingStream, {mimeType: "audio/ogg"});
mediaRecorder.ondataavailable = (event) => {
/* add the data to the recordedDataArray */
recordedData.push(event.data)
}
/* this defines the start point - call when you want to start your audio to blob conversion */
function start() {
mediaRecorder.start();
}
/* this defines the end of your file, whenever called, a new file is
created from the recorded data */
function createFileFormCurrentRecordedData() {
const blob = new Blob(recordedData , {type: "audio/ogg"});
const file = new File( [ blob ], "yourfilename.ogg", { type: "audio/ogg"} );
/* then upload oder directly download your file / blob depending on your needs */
}
/* stop the recording */
function stop() {
mediaRecorder.stop();
}
/* if you don't need multiple recordings, you can listen to onstop */
mediaRecorder.onstop = createFileFormCurrentRecordedData;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4601 次 |
| 最近记录: |