WebRTC音视频开发读书笔记(六)

数据通道不仅可以发送文本消息, 还可以发送图片、二进制文件,将其类型binaryType属性设置成arraybuffer类型即可.

九\、文件传输

1、文件传输流程

(1)使用表单file打开本地文件

(2)使用FileReader读取文件的二进制数据

 (3)创建对等连接,本地连接及远端连接

  (4)创建发送数据通道

  (5)创建接收数据通道

   (6)将读取的二进制数据 切割成一个个切片,然后使用数据通道的send方法发送数据 。

  (7)使用接收数据通道二进制数据 将其放入数据缓存

  (8)根据数据缓存生成Blob 文件

   (10)生成文件连接并提供下载。

读取流程中文件二进制数据使用FileReader对象,还需要对数据进行切片处理,在接收方法中使用缓存将接收的数据缓存起来,最后生成blob下载文件。处理流程如下所示:

2、FileReader

FileReader对象允许Web应用程序异步读取存储在用户计算机上的文件内容。常用事件如下所示:

使用File或Blob对象指定要读取的文件或数据,当监听到load事件后,即可通过事件的结果属性拿到数据,然后使用发送通道的send方法将数据发送出去。代码如下:

sendChannel.send(e.target.result)

读取二进制数据可以使用FileReader的readAsArrayBuffer方法,结果为ArrayBuffer对象。还有其它处理方法,如下所示:

读取数据 时需要将数据分成一段一段的,然后发送,接收时再按顺序读取到数据缓存中,数据流的走向如图所示:

上图中数据块叫做Chunk,DataChannel每次发送的数据即为Chunk,  使用对象的slice方法按顺序切割 出数据块。如下面代码所示:

let slice=file.slice(offset,offset+chunksize)

假设chunksize的大小为16348,整个文件的数据块如下所示:

3、发送文件示例

本示例为文件具休步骤如下:

(1)首先在界面上添加input,类型为file,用于选择并读取文件,progress两个,分别用于发送及接收文件进度展示。

 (2)创建本地和远端连接,发送和接收数据通道,发送和接收通道的数据类型设置为arraybuffer。

  (3)建立本地和远端连接

  (4)实例化FileReader对象,并添加如下事件:

                      error:  读取文件错误

                     abort:  读取文件取消

                      load:  文件加载完成

         load事件表示数据已经准备好,可以进行切割发送,具体处理逻辑如下所示:

//监听load事件
fileReader.addEventListener('load',(e)=>{
    ...
   //发送文件数据
   sendChannel.send(e.target.result);
    //偏移量
   offer+=e.target.result.byteLength;
   ...
    //判断偏移量是否小于文件大小
   if(offer<file.size){
     //继续读取
     readSlice(offser)
  

   }
});
 //读取切片大小
let readSlice=(o)=>{
  ...
  //开始切片
  let slice=file.slice(offset ,o+chunksize);
 //读取二进制数据  
 fileReader.readAsArrayBuffer(slice);

}

   (5)数据接收处理,将收到第一个数据放入receiveBuffer缓存,处理逻辑如下所示:

//接收消息处理
onReceiveMessageCallback=(event)=>{
//将接收的数据添加到接收缓存里
    receiveBuffer.push(event.data);
//设置当前接收文件的大小
   receivedSize+=event.data.byteLength;
   ...
   const file=fileInput.files[0];
//判断当前接收的文件大小是否等于文件的大小
if(rec
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值