iOS开发的移动直播技术、直播优化体验、直播问题分析、直播知识解决方案
浏览:1051 次

本文由Xuli在高可用性体系结构小组中分享,来自高可用性架构“ArchNotes”
当今移动直播技术的挑战远比传统设备或计算机直播更为困难。其完整的处理环节包括但不限于:音频和视频捕获、美颜/滤镜/特效处理、编码、分组、流媒体、转码、分发、解码/渲染/回放等。
直播的常见问题包括
主机如何在不稳定的网络环境中稳定地推送流?
偏远地区的观众如何顺利观看高清直播?
实时卡如何一次智能切换线路?
如何准确测量直播质量指标并实时调整?
移动设备上的不同芯片平台如何以高性能编码和渲染视频?
如何处理滤镜的特殊效果,如美颜?
如何实现二次播放?
如何确保直播持续流畅,不出现干扰?
本次分享将揭开移动直播核心技术的神秘面纱。
视频、直播等基础知识
什么是视频?

首先,我们需要了解一个基本概念:视频。从情感角度来看,视频是一部充满趣味的电影,可以是电影,也可以是短片。这是一个连贯的视觉冲击,有丰富的图片和音频。但从理性的角度来看,视频是一种结构化数据,可以用工程语言将其分析为以下结构:
所容纳之物
形象
音频
元数据
编解码器
视频:H.264,H。265, …
音频:AAC,HE-AAC…
容器
MP4、MOV、FLV、RM、RMVB、AVI等…
任何视频文件的结构都是这样的:
最基本的内容元素由图像和音频组成;
图像以视频编码和压缩格式(通常为H.264)处理;
音频以音频编码压缩格式(如AAC)进行处理;

指示对应的元信息(元数据);
最后,在容器包装(例如MP4)之后形成完整的视频文件。
如果你觉得很难理解,你可以把它想象成一瓶番茄酱。最外面的瓶子就像一个容器。瓶子上标明的原材料和加工厂信息类似于元信息。瓶盖打开(打开包装)后,番茄酱本身就像压缩后的编码内容。将番茄和酱加工成番茄酱的过程就像编码,而原料番茄和酱就像原始的内容元素。
实时视频传输
简而言之,对视频结构的理性理解将有助于我们理解视频直播。如果视频是一种“结构化数据”,那么视频直播无疑是实时传输这种“结构化数据(视频)”的一种方式。
那么一个显而易见的问题是:如何实时传输这种“结构化数据”(视频)?
这里的一个悖论是,由容器封装的视频必须是不可变的视频文件。一个不可变的视频文件已经是一个生产结果。根据“相对论”,这个生产结果显然不精确到实时水平,它已经是时间和空间的记忆。
因此,视频直播必须是一个“生产、传播、消费”的过程。这意味着我们需要仔细研究从原始内容元素(图像和音频)到成品(视频文件)的视频中间过程(编码)。
视频编码压缩
让我们简单地了解视频编码和压缩技术。
为了便于视频内容的存储和传输,通常需要减少视频内容的音量,即压缩原始内容元素(图像和音频)。压缩算法也称为编码格式。例如,视频中的原始图像数据将使用H.264编码格式压缩,音频采样数据将使用AAC编码格式压缩。
视频内容经过编码和压缩后,确实有利于存储和传输;然而,当您想要观看回放时,还需要相应地解码该过程。因此,在编码和解码之间,显然有必要达成编码器和解码器都能理解的约定。就视频图像编码和解码而言,此约定很简单:
编码器对多个图像进行编码以逐段产生GOP(图片组),解码器逐段读取GOP进行解码,然后渲染图像进行显示。
GOP(图片组)是一组连续图片,由一个I帧和几个B/P帧组成。这是最基本的