前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >webrtc点对点文件传输

webrtc点对点文件传输

作者头像
蛋蛋编程手记
发布2023-02-25 17:00:54
1.1K0
发布2023-02-25 17:00:54
举报
文章被收录于专栏:蛋蛋编程手记蛋蛋编程手记

在用webrtc做视频通信的时候就想过另一个问题,能否利用点对点技术进行文件传输呢,如果能实现那点对点通信将大有可为。

经过一番研究,发现真有相关功能。点对点通信的关键在于rtcPeerConnection,而通过它能得到一个rtcDataChannel。这个channel就是数据传输的通道,我们可以像websocket一样操作它。

通过给rtcDataChannel注册onmessage事件可以收取来自对方的数据,直接使用send方法可以给对方发送数据。

发送文字类消息比较简单,直接把字符串做为send方法的入参就可以了。而要发送文件还需要另外的处理。

因为一次发送的数据字节是有限制的,所以文件的发送需要把文件转成arraybuffer,然后分成不同的块(16k)按照顺序发送出去。因为是分块发送出去的,所以得知道arraybuffer的总长度,并告知接收方。

接收方按照总长度,收取一段一段的数据,并拼接成一个完整的文件,至此完成整个的文件传输过程。

至于文件总长度怎么告知接收方,我们可以先发送一个普通的字符串消息,然后再有顺序的发送文件数组块。当然还有另一种更好的方式,将文件总长度添加到arraybuffer的前面几个字节,做为元数据一起发送给接收方,这就是自定义协议了。

另外需要注意的是,循环发送文件块的时候当发送量达到了16M,需要做处理,否则会抛出通道缓存队列占满异常导致文件传输失败

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 蛋蛋编程手记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档