来源:IP Oktoberfest 2021 主讲人:Andy Rayner 内容整理:张一炜 本次演讲主要介绍了在视频云服务中的传输问题,介绍了其中同步的重要性,并给出了对于视频处理和传输流程中的延时记录和同步处理的解决框架。
目录
时间感知的媒体处理链中,在视频内容的获取、处理、生产和消费等过程中,时间与同步是非常重要的。如下图所示,按照视频生产和传输的工作流程来说,其中的各个步骤都需要对时间信息进行记录或者处理。
时间感知的媒体处理链
不同同步的时刻构成了一个个的同步面,下图则展示了一个视频和音频从获取到传输到观看端时各阶段的同步面情况。
音视频传输过程中的同步面
目前来说,虽然有一些方法能记录其中每一步的延时,但在目前的IP网络中,还没有一个统一的系统来对不同处理阶段累计的延时进行跟踪和同步。使用RTP时间戳等方式已经可以解决一部分的问题,然而目前更需要的是一个控制系统来构建一个完整的生态。
下图展示了利用RTP的时间戳来记录累计延时的方式,在音视频流传播的每一步的中间设备中,都记录音视频流离开前一个设备的时间与离开当前设备的时间,这样就能够记录在每一步处理中的累计延时。
系统中的延时传播
演讲过程中展示了一个包含多个处理阶段的音视频传输过程中同步面的例子。在这个例子中,不同的处理阶段是线性串联在一起的。
包含多个处理阶段的同步面例子
在上图的例子中,左边的第二条线被标记为t0,这个时间也被称为原始时间,在这一时刻所有的源数据,包括音频、视频等都同步在一起,并标记上 PTP 的 now time 标签, 随后这些数据才会被送入到混合器等处理阶段。
图中的 remote commentary 的同步面与其他略有不同,这一步需要缓存下来传输的数据,再添加上 commentary 相关的内容,因而这一步不在整个传输的流水线中。而在 Profanity delay 阶段,则是为了能够在有突发情况出现后恢复过来,人为的在传输过程中添加一些延迟。
在延迟方面,上述例子中的 VR/AR 阶段可能会带来好几帧的延迟,而与之相关的技术也在逐渐发展,因此需要在系统中为这些技术预留一次同步过程,但在目前的传输系统中一般可以忽略。
下图为包含了多个视频源的传输示例,主要在其中添加了一个反馈阶段。
包含了多个视频源的传输示例
在包括多个视频源的直播场景来说,接收端可能会对需要播放的内容进行选择。因此可以先发送低分辨率的代理内容和音频到接收端。接收端选择好内容后,需要给发送端反馈,发送端再对内容进行混合、编辑后进行正式发送。在这一过程中需要考虑一个循环的延时,并且发送端也需要保留 origination time 以使得系统正常工作。
之前探讨的处理阶段都是实际存在的设备,然而这些设备的延迟并不是确定的,比如上一代的 video mixer 就会带来变化的延迟。因此为了更加精确的同步,可以引入 VPF(virtual processing funtion)的概念,来提供指定的延迟大小,实现更精确的同步控制。
目前的标准 AES67 中,就是使用 RTP 时间戳来进行同步,如下图所示。在 AES67 中,使用了 presentation time 的概念来考虑不同的网络延时以及 buffer 的情况。但是 AES67 中不包括上述在每一个处理阶段保存到达时间与处理完成时间的功能。因而 AES67 主要考虑的是链路上的同步和延时,并不是点到点的同步和延时。
AES67
针对这种情况,演讲者指出了一种混合的框架。将 AES67 与 VPF(virtual processing funtion)结合在一起来实现更加灵活的延时控制和同步过程。具体框架如下图所示。每一个 VPF 都设定了一个最大的执行时间。
加入VPF的框架
最后,演讲给出了考虑上述所有特点的完整的混合框架,如下图所示。
混合传输框架
在该框架中,理想情况下所有的媒体处理设备都会利用 RTP 时间戳保存和维护处理过程的延时情况。这样,处理流程中的每一个设备都可以给控制系统提供需要的信息,控制系统就能够聚合不同处理步骤的延时情况,精准的进行协调与同步。
通过加入控制系统,可以进行全局精准的时间协调与同步,而传输过程中的所有媒体设备则需要提供必要的时间信息,并且能够接受特定的控制和配置信息。
目前已经实现了系统中相关的接口方面,并希望在未来能够实现一个可行的系统,使得云视频传输中的媒体要素能够在任一部分进行自动的协调与同步。
最后附上演讲视频:
http://mpvideo.qpic.cn/0bc3huaawaaazaaeojkegzrfapodbm6qacya.f10002.mp4?dis_k=0cb6f23addb2cd6fc14c7577f7b76aa8&dis_t=1649676308&vid=wxv_2332889435899789314&format_id=10002&support_redirect=0&mmversion=false