语音边录边传实现方案

这几天一直在做语音消息相关需求,顺便整理下语音分片上传的流程。

这里的语音是指即时通讯中的语音消息,语音边录边传就是在语音的录制过程中上传语音文件而不是等录制完成再一次性上传,这么做的目的是减少文件上传时间,加快消息发送速度。

一般一条语音消息从用户按下录音键到成功发送大致流程如下:

1 开始录音,将接收到的语音转化成音频数据流,这一步通常可以调用系统方法完成(AudioRecord)

2 编码,将获取到的音频数据流进行编码,不同格式的音频编码方式不同

3 将编码好的数据写入到文件中,生成音频文件

4 将音频文件上传到文件存储服务器

5 将音频文件地址发送给IM服务器,由IM服务器路由到接收方

6 接收到IM服务器的消息回执,则一条语音消息发送成功

而实现边录边传是在生成音频文件的过程中判断,当文件大小每超过一片就通知上传线程,从文件中取出刚录好的一片上传到服务器,而不是每片一个文件。当录音完成时,我们得到的就是完整的一个录音文件,个人认为这个做法非常的巧妙。附张简单的流程图,比较直观



这里有几个点顺便提一下:

1 这个流程涉及到两个服务器 一是文件存储服务器,二是IM的后台服务器,文件存储服务器负责存储文件,IM服务器负责即时消息的路由

2 上传文件的获取token这一步省略没提,而实际项目中token管理也是值得注意的

3 需要文件存储服务器支持文件的分片上传与合并

4 若中间任何一片上传失败或者合并失败则认为分片失败,这时需要将整个文件上传,这样做确实会造成很多文件碎片,但没办法,用户体验至上嘛

5 关于语音连发,比如录满60s语音后继续录音但前60s的语音要先发出去,这种情况只需要在写音频文件这一步切换下就好了,而不需要重启整个录音流程...







评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值