blob语音流 前端播放

本文介绍了如何在前端处理从后端获取的blob格式语音流,通过FileReader、ArrayBuffer、DataView等对象将其转化为可播放的音频源,并在HTML audio标签中播放。详细讲解了FileReader的readAsArrayBuffer方法和onload事件,以及如何利用DataView添加wav头部信息,最终生成可播放的URL。
摘要由CSDN通过智能技术生成

首先要熟悉的几个对象

FileReader
ArrayBuffer
DataView
Int32Array
Int16Array
Int8Array

以上几个对象,对于前端来说比较陌生 遥远,三言俩语说不清,具体详细的建议大家查看官方文档。以下内容中 只会提及使用到的部分。

html部分

对于后端返回的 blob格式的语音流,前端如何转化成 src路径,使用audio标签进行播放。

HTML代码部分很简单,就是audio标签即可(我这里是基于vue)

<audio   controls currentTime autoplay   :src='srcUrl'>
</audio>

所以就是要解决 srcUrl即可,即把Blob语音流转化。

JS部分

首先来认识一个类 —FileReader
FileReader对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。

其中一个方法readAsArrayBuffer():
FileReader.readAsArrayBuffer() - - 开始读取指定的 Blob中的内容, 一旦完成, result 属性中保存的将是被读取文件的 ArrayBuffer 数据对象.

FileReader.onload:
处理load事件。该事件在读取操作完成时触发。

结合onload事件,可以在 onload 事件中console.log(e),会发现e.srcElement.result是readAsArrayBuffer转化的结果。

// Blobdata 就是后端返回给你的Blob数据
const reader = new FileReader();
reader.readAsArrayBuffer(Blobdata);
reader.onload = (e) => {
   
   const bufer = e.srcElement.result;
   const blob = this.addWavHeader(bufer, 16000, 16, 1);
   this.srcUrl = window.URL.createObjectURL(blob);
};

this.addWavHeader 函数是给这段buffer 加上头部信息,这样最后在用window.URL.createObjectURL就可以转化成播放路径。

addWavHeader(samples, sampleRateTmp, sampleBits, channelCount) {
   
      const dataLength = samples.byteLength;
      /* 新的buffer类,预留44bytes的heaer空间 */
      const buffer = new ArrayBuffer(44 + dataLength);
      /* 转为 Dataview, 利用API来填充字节 */
      const view 
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值