关于视频处理:分片压缩分片上传融云-IM-视频文件高速传输方案

在 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 分钟时长的视频,通常分辨率 1280×720(720P)下,苹果设施录制视频的原文件大小为 120M 左右,通过压缩后,大小可升高至 44M,保障清晰度的状况下,无效压缩率为 37% 左右。


视频文件分片上传

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

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

分片上传劣势

☑适宜尺寸较大的文件传输,通过分片来防止单个 HTTP 数据量过大而导致连贯超时的景象。

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

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

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

☑挪动端设施硬件资源优先,分片上传能够无效升高大文件上传时的内存占用,避免内存溢出。

融云分片策略

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

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

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


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

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

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据