本次演讲来自Video @Scale 2020,演讲者是来自Facebook的软件工程师David Zhang。本次演讲主要介绍了Facebook如何将不同播放场景中的视频IO操作方法进行结合,并提高IO操作的效率和灵活性的方法。
David首先介绍了视频从拍摄到分发给用户的过程,并介绍了点播场景以及直播场景下对设备基础设施的要求进行了对比,并指出点播场景中利用数据块来存储视频,而直播场景中则是使用缓存。两种场景下的存储方式和API接口并不能兼容。
随后David表示这两种场景下的存储方式可以进行合并。但是,David指出这其中存在的挑战。首先是两种方式的API并不相同。数据块存储中是一次读入需要的数据,而缓存中则是随着时间不断的加载新的数据;其次是没有办法根据播放场景的需要,来调节存储方式在可靠性和实时性的折衷。最后是现有的视频I/O操作方式中也很难进行扩展,当需要一个新的读写和存储方式时,很难与已有的方式进行结合。
接着David开始介绍他们在解决这一问题时所使用的方法“OIL”。OIL能够对不同的播放场景进行抽象化,并能作为一种操作IO的语言。其中的API和一般的文件读写API非常相似。并且通过对不同的存储模块进行综合,使得在IO读写时可以按需选择。不同存储方式的配置则是通过一个json文件来实现。通过将不同的存储方式表示为有向无环图中的一个节点,配置文件按照顺序读取图中的节点来更新配置。这样就可以通过调整图中的节点来实现在可靠性和实时性中的折衷。
David最后介绍了将缓存和数据块存储方式通过OIL结合起来的例子。通过将多个缓存存储模块并行的和数据块存储模块连接在配置文件的有向无环图中,就可以很好地实现利用空闲的存储区,提高IO操作的效率,在直播场景中既能保证低延时又可以实现回放的功能。
附上演讲视频: