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

news/2024/4/28 3:44:59/文章来源:https://blog.csdn.net/weixin_44764152/article/details/129691551

在 IM 消息管理中,多种类型消息的传输处理是服务可靠性的关键。关注【融云全球互联网通信云】了解更多

通常,发送消息前,融云 IM 会将发送的媒体文件上传到默认文件服务器。

而在文本、表情、图片、语音、位置、小视频等各种消息中,以小视频的传输对网络等条件的要求最高,其文件更大、上传时间更长,而上传速度会直接影响收发消息的体验。

 

主流 IM 应用会将传输的视频文件整体做编码,用户收到视频后需要等待加载后才能查看,这显然会对用户体验造成一定影响。

在这一细节能力上,融云使用了分片压缩、分片上传的整体方案,对每个步骤做了深度优化,极大提升视频传输速度,让用户收到即可马上查看视频文件内容。


视频文件分片压缩

视频文件通常较大,在资源有限的移动设备硬件中传输,需要通过分片压缩的方式提升资源利用率和传输速度。

视频编码

视频编码指通过特定技术对视频文件进行编码压缩,以便于网络传输和降低带宽压力。

常见的视频编码方式有 HEVC(H265)、AVC(H264)、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 分钟时长的视频,通常分辨率 1280x720(720P)下,苹果设备录制视频的原文件大小为 120M 左右,经过压缩后,大小可降低至 44M,保障清晰度的情况下,有效压缩率为 37% 左右。


视频文件分片上传

分片上传支持将一个文件切割为一系列特定大小的数据块,每个小数据块以一个独立的 HTTP 请求分别上传,以保证较大视频文件的传输速度。

所有小数据块都上传完成后,发送一个请求给服务端将这些小数据块组织成一个逻辑资源,即获得原始视频文件,整个分片上传过程就此完成。

分片上传优势

☑适合尺寸较大的文件传输,通过分片来避免单个 HTTP 数据量过大而导致连接超时的现象。

☑在网络条件较差的环境下,较小尺寸的文件可以有较高的上传成功率,从而避免无休止的失败重试。

☑失败重传不需要整个文件从头开始,只需要重传此分片,有效提升上传效率。

☑并行分片上传,利用对象存储 OSS(Object Storage Service)的并行处理能力,网络环境影响可以降到最低。

☑移动端设备硬件资源优先,分片上传可以有效降低大文件上传时的内存占用,防止内存溢出。

融云分片策略

在分片上传中,分片策略是一个重要的挑战点。

分片太大,片数少,上传的并发度不够,可能会降低上传效率,每个大的分片在失败后重传的成本会比较高;分片太小,片数多,并发需要的 TCP 连接太多,多条 TCP 连接的“窗口慢启动”会降低整体吞吐,两端拆分与合并分片的开销也相应增加,而且传输时的额外流量(HTTP 报头)也会更多。

融云采用的分片策略是,综合考虑 2 分钟时长的视频压缩后大小为 44M,每个分片大小 5M,大致可分为 9 片并行上传,采用 4 个线程,有效利用网络带宽。


这样,融云 IM 传输的视频文件,在经过第一步的分片压缩后,再通过并行分段上传实现多线程上传,充分利用可用带宽,大大缩短上传时长。

此外,针对国内和外海客户的不同需求,融云完成了与多家 OSS 厂商的对接,可根据客户市场需要,定制化配置最优 OSS 服务商,保障服务器资源的高可用,实现视频文件的高速传输。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_274051.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity+vs code+mac环境安装配置

参考资料:unity官方文档:https://docs.unity3d.com/cn/current/Manual/ScriptingToolsIDEs.html安装unity1、打开unity中国官网下载,https://unity.cn/releases#undefined2、安装成功后,登录帐号。3、安装unity 推荐版本mac 配置C…

Matlab中对三维图进行视角观察设置——相机视线函数view

Matlab中对三维图进行视角观察设置——相机视线函数view1.view函数的功能:相机视线;2.view函数的调用语法:当我们采用matlab中的surf函数等绘制好三维图像后,想观察某个角度的图像时,可采用view函数快速多角度便捷设置…

Hive数据仓库简介

文章目录Hive数据仓库简介一、数据仓库简介1. 什么是数据仓库2. 数据仓库的结构2.1 数据源2.2 数据存储与管理2.3 OLAP服务器2.4 前端工具3. 数据仓库的数据模型3.1 星状模型3.2 雪花模型二、Hive简介1. 什么是Hive2. Hive的发展历程3. Hive的本质4. Hive的优缺点4.1 优点4.2 缺…

8个python自动化脚本提高打工人幸福感~比心~

人生苦短,我用Python 最近有许多打工人都找我说打工好难 每天都是执行许多重复的任务, 例如阅读新闻、发邮件、查看天气、打开书签、清理文件夹等等, 使用自动化脚本,就无需手动一次又一次地完成这些任务, 非常方便…

2023北京/杭州/湖南/广东CDGA/CDGP数据治理工程师认证报名

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

《Spring Boot 趣味实战课》读书笔记(四)

你有 REST Style 吗 你应该懂一点 HTTP HTTP 就是 HyperText Transfer Protocol(超文本传输协议)的缩写。 它是一种关于“传输”的协议,既然是传输,那么至少要在两个对象之间进行,在 HTTP 中对应的就是客户端和服务端…

KCon 2023兵器谱招募开启!以「兵器」会友,热血相聚!

2023第十二届 KCon大会已启动,议题招募正在火热进行中。(点击查看)与此同时,兵器谱召集也正式开启!我们现诚邀众安全研究员踊跃展示「神兵利器」,以「兵器」会友,逐鹿网络江湖。 「器」既为容纳…

联合体在内存中的分布情况,大小端的判断方法

一、联合体的定义 联合是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间,所以联合体也叫共用体。 //联合类型的声明 union Un { char c; int i; }; int main() { //联合变量的定义 union U…

项目二 任务三 训练5 交换机的HSRP技术

在“项目二 任务三 训练4 交换机的DHCP技术”基础上继续完成下列操作: 1、二层交换机50-2的配置 50-2>en 50-2#conf t Enter configuration commands, one per line. End with CNTL/Z. 50-2(config)#int 50-2(config)#interface g 50-2(config)#interface gigab…

什么是队列,如何实现?

欢迎来到 Claffic 的博客 💞💞💞 “海色温柔,波浪缓慢,似乎在静静期待着新的一天。” 前言: 上期我们讲了栈,它的特点是“后入先出”。这次我们再来学习一个新的数据结构:队列&…

索尼mp4变成rsv的修复方法

索尼的摄像机在一些极端情况下(如断电)会生成RSV文件,遇到这种情况我们应该如何处理?下面来看看今天这个案例。故障文件:22.4G RSV文件故障现象:断电后仅生成了一个扩展名为rsv的文件,无法播放。故障分析:经过长时间处理索尼的摄像机&#xf…

WSO2 Apim Message Mediation (Api Policies)

WSO2 Apim Message Mediation 1. 版本区别2. 客制化2.1 Wso2 Integration Studio Install2.2 New Sequence2.3 测试

Element table组件内容\n换行解决办法

项目使用<el-table>组件 <el-table :data"warnings" :row-class-name"highlightRow" v-loading"isLoading"> <el-table-column label"ID" prop"id"/> <el-table-column label"时间" pro…

VS2022 webapi SQLite EFcore 最简单部署

一、我有一个sqlite单文件数据库&#xff0c;里面有一张表material&#xff0c;我想把这张表的数据&#xff0c;让c# webapi程序从服务器上输出成json,让客户端可以查询到数据。二、使用VS2022&#xff0c;安装ASP.net相关开发组件。三、VS2022中新建一个项目&#xff0c;项目的…

VMvare-linux没有图形化界面

镜像&#xff1a; linux centos7.5 软件&#xff1a;vmware 安装过程&#xff1a;基本一路默认 问题&#xff1a;安装成功后&#xff0c;只有命令行&#xff0c;没有图形界面 解决办法如下&#xff1a; 1、检测yum是否可以使用 yum list | tail2、开始安装 yum groupins…

前端git必备技能,如何合并分支以及出现合并冲突后如何解决

文章目录一、合并分支二、可能出现的冲突和解决三、过程分享一、合并分支 注意&#xff0c;我们常说的master或main主干也可以理解为分支&#xff0c;可以是分支合并到主干&#xff0c;或分支合并到分支。 需求&#xff1a;cloudweb的2.6.0和2.6.1是并行开发的&#xff0c;现…

【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件

在 这篇文章 中学习了使用 PetaLinux 定制 Linux 的方法&#xff0c;制作了 SD 卡启动文件&#xff0c;本期介绍如何使用 PetaLinux 配置生成从 QSPI Flash 启动的 Linux 镜像文件。 复制 Petalinux 工程 如果我们想保留 SD 卡启动的 Petalinux 工程&#xff0c;但是又不想新…

晶晨S905D3切换到外部phy方法

文章目录 前言一、s905d3的以太网驱动的理解二、修改设备树注意前言 随着芯片的国产化推荐,越来越多的国产芯片被大家重视起来,但是国产的一些稍微高性能的芯片资料太少,这里把调实phy的流程记录一下,不做太多的理论分析 一、s905d3的以太网驱动的理解 如果拿到sdk后,默…

2023年湖北武汉市中高级职称评审要满足哪些硬性要求?启程别

2023年湖北武汉市中高级职称评审要满足哪些硬性要求&#xff1f;启程别 职称评审是指已经经过初次职称认定的专业技术人员&#xff0c;在经过一定工作年限后&#xff0c;在任职期内完成相应的继续教育学时&#xff0c;申报中级职称以上的人员须在专业期刊发表论文并且经过一些基…

存储管理 - 磁盘结构及调度算法

一.简介柱面&#xff1a;一个磁盘所有的盘面上同一个半径相同的磁道的圆形轨迹从上倒下依次组成一个圆柱体&#xff0c;就称作柱面&#xff0c;每个圆柱上的磁头由上而下从“0”开始编号。扇区&#xff1a;硬盘的读写以扇区为基本单位&#xff0c;而操作系统则以块为最小单位(扇…