14 | 分片上传:如何让你的图片、音视频消息发送得更快?
14 | 分片上传:如何让你的图片、音视频消息发送得更快?
讲述:袁武林
时长14:58大小13.67M
让图片和视频发送得又快又稳
多上传接入点
上传链路优化
语音的“分片先行下推”
分片上传
分多大?
断点续传
秒传机制
小结
赞 6
提建议
精选留言(19)
- 东东🎈2019-09-27老师,客户端api上传一个几M的视频文件,大约需要10几秒,猜测可能是网络传输慢,这个可以从哪几方面来优化呢?
作者回复: 不要猜呀,这个抓个包分析下就能排除是不是网络的原因。如果确实是网络传输慢导致的,可以看下tcp窗口大小的是不是能打的足够开,另外看下重传啥的这些多不多。
7 - 分清云淡2019-12-04其他方式 点对点传输 断点续传 压缩技术 编解码技术 视频流缓冲 视频流传输通道复用(视频是基于贞的 如果是直连 中间往往有空隙)4
- leslie2019-09-27打卡:学习了,等待后续课程;顺便问个小问题,写IM必须要JAVA还是GO也行?普通的掌握程度够吗?
作者回复: 语言都可以的,除了java、go还有很多c++、erlang的实现。掌握基本语法后,可以找找相关语言的例子边学边试就行。
共 2 条评论2 - 🐌🐌🐌2020-03-13第十四讲 语音的处理,这里指的是离线语音还是实时语音的推送方式,如果是语音录音传输的话走文件一样的通道处理就足够
作者回复: 这里指的是语音录音传输,语音消息和文件走一样的通道是没问题的,不过也可以针对语音聊天消息进行一些针对性优化:比如语音消息一般体积比较小、实时性比较高,可以利用长连通道分片接收和分片提前下推来提升用户体验。
3 - 芒果少侠2020-03-17我理解的话,有cdn+oss,然后音视频压缩等手段。2
- Wheat_Liu2021-05-21看了老师给@林易之 的回复,文中说语音走上行通道长连接,回复中又说直接并发调http接口,到底用哪个呀。之前看老师的文中有很多模棱两可的方案,虽然实现不是定死的,但是希望老师能说一下每个方案大部分的应用场景是什么,也方便读者根据自己的需要进行选型
- 鲁大喵2020-10-04老师富媒体少提了一个点:加密。im这种一般属于隐私按法律规定应该是要加密,加密是个非常耗cpu的操作,请问实践中一般是在客户端加密还是服务端?如果是客户端,加密key怎么管理防止泄漏和拦截?如果是服务端,分片上传有没有什么好的处理方式?共 1 条评论
- tm12342020-04-20请问老师 语音消息在接收方离线的时候 也是实时分片下推吗?还是喝文本消息一样 先在服务端存起来 等用户上线了再发送呢?共 1 条评论
- kamida2020-03-12老师 去重是以文件为单位 还是以文件的每一片为单位? 服务器接收到文件分片之后 是不是会用分片组合成文件然后存储文件 而不是按分片存储呢?
作者回复: 对于同一个文件的多个分片,每一片都会有不同的offset标识和统一的文件标识,分片上传时的去重主要是针对分片的。至于最终是否合并再存储还是按分片存储取决于你的存储引擎是否支持分片等。
1 - 奔奔奔跑2019-11-16老师,我一直在看您文章,每个留言的讨论都也有看,我想请教一个问题,我是用MQTT做客服系统,人也不多,一天最多四百个房间,五百个排队的,但是最近出现发消息卡顿的情况,消息发出收到broker响应时间有点长,我不知道该用什么手段定位问题,老师能不能指点我一下,谢谢了
作者回复: 建议先从发消息的链路上来分段排查,分析下各个环节的分步耗时,确定到有耗时问题的环节后再通过线程状态或者hot thread来具体分析当前环节具体耗时的代码。
共 3 条评论 - GeekAmI2019-11-11云服务OSS存在的当下,是不是大部分业务场景不需要服务端优化上传这块呢?
作者回复: 也不是呀,有些还是需要业务层自己来优化,比如并发分片上传,断点续传,业务权限控制等。
- Darcy2019-11-05图片,文件,语音文件中包含有木🐎文件,这方面的安全性怎么保障?有什么手段,或者好的框架吗?
作者回复: 抱歉这一块了解的不多
- null2019-10-29老师,您好 原文:“在客户端把要上传的文件按照一定规则,分成多个数据块并标记序号,然后再分别上传,服务端接收到后,按照序号重新将多个数据块组装成文件”。 上传时标记序号,服务器怎么知道哪些序号是属于同一个文件的?序号包含了同一个文件标识么?例如:hash(file) + n位序号?这样就跟“断点续传”一样了,为每个上传动作分配一个唯一的操作符。 服务端需要知道总的分片数么? 如果不知道,是不是会存在丢失最后一片分片而不知道的情况? 不过如果序号包含了文件的 hash 值,服务器也可以通过 hash 值校验文件的完整性。只不过服务器计算 hash 值也需要一定的开销。展开
作者回复: 每个文件上传时会有一个唯一id来标识这一次上传,多个分片都会携带这个标识。另外,在上传的初始化阶段,会把分片数和文件hash值都告知服务端,用于识别分片是否缺少已经文件是否完整。
- Darcy2019-10-09web开发中,有没有好的压缩算法或者图片分配方法可以借鉴那?
作者回复: 采用webP格式或者google最新的Guetzli格式来对图片进行编码可以有效降低图片大小。另外说的图片分配算法没太理解是啥?
共 3 条评论 - 探索无止境2019-10-05老师讲解的这些方案能不能提供可落地的代码实现?这个实践也是非常关键的,或者说伪代码实现,然后给一些具体的技术指引
作者回复: 嗯,我尽量在期末实战中有所体现哈,有些涉及的方案代码量比较大,更多的可能只能是实现上的关键点指引。
- 🐾2019-09-27像图片缩略图、视频首帧是通过长链接推给接收方的吗?接收用户点击图片或者点击视频首帧播放的时候,才从服务器上进行下载,这个是通过HTTP的方式吗? 如果是HTTP的话,如何去保证这个文件的安全性呢?比如说加了防盗链,防盗链也有可能在IM之外被人下载。
作者回复: 缩略图之类的小流量文件可以通过长连下推来优化。http和防盗链不是绑定的呀,不需要上cdn的话,上传的时候自己的文件存储服务就可以记录文件所有者权限,下载的时候就可以根据用户登录认证的信息来鉴权了。
- 东东🎈2019-09-27老师,问哈mq发送消息采用同步还是异步呢
作者回复: 看具体使用场景吧,如果是需要确保写入queue成功才能响应用户的最好是同步写,如果不需要就可以异步。
- 🐾2019-09-27老师上午好,图片、音视频消息一般是通过长链接(与文本消息不同通道)的方式上传吗?还是说会额外提供一个http上传文件接口?从性能或者效率来说是不是长链接方式更好?
作者回复: 个人建议是直接http上传文件就可以啦,上传完就断开的,没必要再走个长连接。客户端同时开多个http连接并发上传就可以,性能没问题的。
- 徐凯2019-09-27老师 请问一下 断点续传如果是做短暂暂存的话 上传信息是放服务端内存中 如果是像迅雷那种做长暂存的话 已传输的位置 是不是放在数据库中的 比如说 以操作唯一标识作为主键 然后一个字段放已完整接收的数据包序号 续传时告知客户端已正确接收的最大序号 客户端根据序号计算偏移 然后进行续传
作者回复: 嗯,长时间的暂存持久化到db应该是没问题的,只要恢复的时候能取出之前已下载完的分片信息就可以。不过类似迅雷这种的,不需要放到服务器端来吧,我理解分片信息暂存在下载的客户端本地就可以呀。