分片压缩、分片上传,融云 IM 视频文件高速传输方案

📅 2026/7/4 9:58:54
分片压缩、分片上传,融云 IM 视频文件高速传输方案
在 IM 消息管理中多种类型消息的传输处理是服务可靠性的关键。关注【融云全球互联网通信云】了解更多通常发送消息前融云 IM 会将发送的媒体文件上传到默认文件服务器。而在文本、表情、图片、语音、位置、小视频等各种消息中以小视频的传输对网络等条件的要求最高其文件更大、上传时间更长而上传速度会直接影响收发消息的体验。主流 IM 应用会将传输的视频文件整体做编码用户收到视频后需要等待加载后才能查看这显然会对用户体验造成一定影响。在这一细节能力上融云使用了分片压缩、分片上传的整体方案对每个步骤做了深度优化极大提升视频传输速度让用户收到即可马上查看视频文件内容。视频文件分片压缩视频文件通常较大在资源有限的移动设备硬件中传输需要通过分片压缩的方式提升资源利用率和传输速度。视频编码视频编码指通过特定技术对视频文件进行编码压缩以便于网络传输和降低带宽压力。常见的视频编码方式有 HEVCH265、AVCH264、DIVX 等其中 H265 的质量是最高的但因有些软件或硬件设备无法兼容其并不是目前的主流编码格式。我们通常选择H264的视频编码格式同等大小的视频可以保持相对较高的清晰度。视频编码的基本参数主要有码率、帧率、分辨率。码率比特率指单位时间内传送的比特bit数即每秒钟的视频所包含的数据量在分辨率已经选定的情况下调低码率能够有效降低视频的大小。码率越小视频就会越小。比特率编码主要有恒定比特率CBR、可变比特率VBR以及多比特率MBR编码模式三种编码方式我们选择 CBR并且调低数值有些应用无法设置编码格式只能调数值一般来讲比特率越低则视频越小。帧率是视频每秒钟播放的图片数目帧率越小感受上看到的视频就越卡。一般而言大于 24 帧每秒对于肉眼来说看到的就是流畅视频了。通常视频帧率保持在 25~35 即可过高的帧率对视频质量的提高并不会有太大帮助反而会影响导出的效率。分辨率指视频的精细程度分辨率越大视频的内容就越精细。在这方面保留视频原有的分辨率即可如果是高清视频想要舍弃一些清晰度来缩小则可以按照宽高比例进行设置。压缩原理视频压缩的目标是在确保清晰度的前提下最大程度降低视频大小。我们可以围绕上述视频编码几大要素反复尝试出一个清晰度较高且最大程度压缩视频大小的标准。计算视频大小的公式为音频码率 / 8视频码率 / 8 x 视频时长。由此可见通过删减视频长度或降低码率即可达成压缩视频的目标。时长固定的情况下控制码率便成为压缩视频的关键。当然但码率也不可随意极限调低。假使我们把分辨率比作一个盒子码率就是撑起这个盒子需要放置的物品多则浪费少则不满进而影响清晰度。这就需要找到二者之间的最佳比例常用的分辨率和码率的选择区间为融云采用的压缩参数NSInteger bitrate videoSize.height * videoSize.width * 2;session.videoSettings {AVVideoCodecKey : AVVideoCodecH264,AVVideoWidthKey : (videoSize.width),AVVideoHeightKey : (videoSize.height),AVVideoCompressionPropertiesKey : {AVVideoColorPrimariesKey : AVVideoColorPrimaries_ITU_R_709_2,AVVideoAverageBitRateKey : (bitrate), // 比特率AVVideoProfileLevelKey : AVVideoProfileLevelH264High40, // 压缩算法},举例来说融云默认允许上传 2 分钟时长的视频通常分辨率 1280x720720P下苹果设备录制视频的原文件大小为 120M 左右经过压缩后大小可降低至 44M。视频文件分片上传分片上传支持将一个文件切割为一系列特定大小的数据块每个小数据块以一个独立的 HTTP 请求分别上传以保证较大视频文件的传输速度。所有小数据块都上传完成后发送一个请求给服务端将这些小数据块组织成一个逻辑资源即获得原始视频文件整个分片上传过程就此完成。分片上传优势☑适合尺寸较大的文件传输通过分片来避免单个 HTTP 数据量过大而导致连接超时的现象。☑在网络条件较差的环境下较小尺寸的文件可以有较高的上传成功率从而避免无休止的失败重试。☑失败重传不需要整个文件从头开始只需要重传此分片有效提升上传效率。☑并行分片上传利用对象存储 OSSObject Storage Service的并行处理能力网络环境影响可以降到最低。☑移动端设备硬件资源优先分片上传可以有效降低大文件上传时的内存占用防止内存溢出。融云分片策略在分片上传中分片策略是一个重要的挑战点。分片太大片数少上传的并发度不够可能会降低上传效率每个大的分片在失败后重传的成本会比较高分片太小片数多并发需要的 TCP 连接太多多条 TCP 连接的“窗口慢启动”会降低整体吞吐两端拆分与合并分片的开销也相应增加而且传输时的额外流量HTTP 报头也会更多。融云采用的分片策略是综合考虑 2 分钟时长的视频压缩后大小为 44M每个分片大小 5M大致可分为 9 片并行上传采用 4 个线程有效利用网络带宽。这样融云 IM 传输的视频文件在经过第一步的分片压缩后再通过并行分段上传实现多线程上传充分利用可用带宽大大缩短上传时长。此外针对国内和外海客户的不同需求融云完成了与多家 OSS 厂商的对接可根据客户市场需要定制化配置最优 OSS 服务商保障服务器资源的高可用实现视频文件的高速传输。