编者按:MeshCloud通过与GCP合作为中国出海企业提供强大的全球基础架构。今天LiveVideoStack公开课通过MeshCloud邀请到了谷歌云的于有志老师,为我们介绍如何借助谷歌云在高效视频转码和分发方面的技术与能力,实现海外音视频业务的快速与高质量部署。
文/于有志
整理/LiveVideoStack
大家好,我是来自谷歌云的于有志,主要帮助出海客户的业务在海外落地。我很感谢LiveVideoStack能提供这个平台,让我可以和大家交流。做过出海相关业务的同学对谷歌云应该不会陌生,谷歌云是全球排名前三的云厂商,在全球有35个数据中心区域,有一百多个可用区。很多同学主要对其网络虚拟机、容器方面的产品比较熟悉,但我今天主要介绍其在音视频领域里的服务。
今天主要介绍与转码相关的服务以及如何使用转码配合存储实现内容的分发。转码是无运维的、全托管的服务,其主要利用谷歌自主研发的转码、容器等技术来帮助用户实现高效且高速转码。提到转码技术,大家比较熟悉的是FFmpeg,可以自己编写转码的格式,但是使用这种全托管、无服务器的服务能让大家更快速地实现业务的落地,并且这种服务还有功能上、成本上和性能上的优势,之后会具体展开讲解。这类服务主要按照转码的内容的时长来收费。
接下来,介绍转码的服务支持哪些具体的格式,这也是大家比较关心的问题。首先,在音视频领域,支持的输入格式比较多,包括手机拍摄的视频、各种录制设备拍摄的视频、音频、字幕文件等。然后,在输出格式方面,在视频编码中可以比较好地支持H.264、H.265和VP9等编码格式,现在大家也可能会关注新的、免费的编码格式。VP9是谷歌在YouTube等业务里使用较多的编码格式,在一些场景下,与H.264等编码格式相比,VP9可以做到50%的流量节省,特别是在一些发展中区域(非洲、中东、南美等),这可以让用户使用更低的带宽更流畅地观看视频,使用户有更好的体验。除了VP9,谷歌也参与了AV1编码格式的制定,该格式将来也会加入到支持的输出格式里。在音频、字幕方面,也有很多支持的输出编码格式。此外,我们也支持图片的输出,之后会介绍一个相关场景案例,说明在编码视频时为何需要做到图片的输出。
该服务的一个比较大的优势是帮助客户在出海时增加视频版权管理的功能。视频在海外落地时,版权方会有一些要求,比如对视频加密或使用版权管理的标准。现在全球有三大标准,包括苹果的FAIrPlay、谷歌的Widevine和微软的PlayReady。此外,苹果还制作了免费版本的AES-128的加密标准。在转码时,可以添加配置以上提到的标准,以此帮助大家根据要求来更好地做到内容的版权管理和保护,这也是转码服务里非常方便应用的一个功能。
谷歌的转码服务有一个特殊的技术优势,即可以使用谷歌的视频分析和容器化的服务来帮助用户在短时间内完成长视频的转码。当收到一个长视频时,首先对其进行内容分析,然后对其自动切片,分成不同片段后使用并行的方式部署转码/编码任务,再然后用大的集群并行地完成视频内容的转码,这使得长视频的转码时长是固定的(基本在3至5分钟内),而不随视频内容时长增长而增长。
该服务还有一些高级功能。视频内容可能包含很多的音轨、视轨和字幕轨道,我们首先使用不同的对象管理方式在模板里定义出元素级别的内容流(包括音频、视频和字幕),然后对其进行任意的组合,比如高码率的视频可以和高码率的音频组合,低码率的视频可以和低码率的音频组合。组合完成后得到复合流,然后可以定义输出的流媒体,在定义的媒介里引用复合流。同时,将其定义成在不同的客户端码率的情况下,多码率适配的选用方式,使得可以根据客户端的实时码率来自动地选择不同的复合流,实现码率的自动适配。上述功能可以方便地在配置模板里实现。
另外,视频有时需要进行编辑,此时没有必要采购或安装视频的编辑工具,因为我们的转码工具就可以做到视频内容的拆分或拼接。举个例子,假设有4个输入的视频文件,我们想从每个视频文件中选取一部分组成最终的视频文件。从图中可以发现,使用转码的配置就可以做到上述效果,即可以按照任意顺序组合选取的任意长度的视频切片,从而得到最终的视频文件。这类功能适用于嵌入片头和片尾的广告,因为广告可能有固定时长、固定位置(片头、片中或片尾)。同时,这类功能也适用于制作体育比赛的集锦,经过视频内容分析后,通过拆条将视频拆分为多个片段,可以将与进球有关的或高质量的片段作为输入放入模板里,并对其进行最后的组合,得到集锦片段。
刚才提到的功能可以在转码模板里定义。这里没有采取界面等可视化的方式,这是因为,虽然在很多时候采取可视化的编辑方式可以方便地实现一些功能,但若要实现复杂的、定制化的转码的配置,使用配置文件会更方便。这里有两种配置文件的使用方式,一种是对每个任务进行完整的配置,可以定义所有的输入、输出和中间的流的组合。另一种方式是,将使用相同方式转码的配置写成一个模板,在创建任务时使用该模板,对输入的内容的文件名进行不同的替换。那么,在创建任务时只需定义文件名和输出的位置即可,这样可以更方便地实现转码任务的自动化。
接下来举一个例子,说明如何用转码的服务生成DASH流媒体。目前,在线观看流媒体的用户比较多(使用平板或手机观看)。在海外常用的格式不是国内常用的FLV1格式,而是HLS格式和MPEG-DASH格式。在谷歌云的转码服务里,针对这两种流媒体格式进行了很多优化。在这个例子中,在流媒体的输出中定义了三个不同的码率:400kbps、750kbps和仅有音频的码率(最低码率)。这三种码率格式可以按照规定进行转码输出,确保最后输出的不同码率和定义的播放码率是相匹配的。同时,也会自动生成MPD文件和视频或音频流的M4S文件,可以在移动设备上观看这些文件。同理,HLS格式的转码过程与上述过程类似。
接下来介绍另一个有意思的场景。如果输入视频里有多个不同的音轨,比如多语言音轨,在输出文件中,要根据不同的推广国家选择不同的音轨,那么可以用转码来进行选择和定义。具体地,可以引用输入文件里的某一个音轨或channel,然后在输出时在不同的文件里加入不同的语言的音轨,使得最后的输出文件可以根据不同的市场完成不同的定制。因此,针对海外不同国家和不同市场的业务,可以实现灵活地应用。
之前提到,有时在视频转码时会生成图片,接下来介绍其中的一个例子。在转码时,可以规定其按照固定间隔抽帧生成图片,比如规定每一分钟生成一张图片,或者在一个时长为一小时的影片中,规定总共生成十张图片,那么就会自动按照九个相同的间隔生成十张图片。最后,可以选取质量较好的图片作为视频的封面。
另外,还可以指定输出图片的长宽比。有的视频比例是16:9,有的视频比例是4:3,因此可以选择输出图片的不同的长宽比来适配视频本身的长宽比,做到不变形。同样,可以选择一张图片作为视频的封面,提升用户体验。
刚才主要介绍了一些基本的功能和特色,接下来介绍如何使用转码服务。首先,要进行视频内部的分析,了解输入视频的格式、时长和编码特点,掌握输入视频包含哪些音频和字幕轨。然后,要定义输出的格式,即针对不同的场景,比如wifi播放、手机播放等,定义期望的输出格式。接着,根据输入和输出的定义,完成转码的配置的编写。其中,可以参考文档中的示例和模板,我们谷歌云的同事也可以帮助客户进行调试。调试好的配置可以在云上进行使用,每次创建任务后,可以选择特定的配置的模板。最后输出的视频文件可以在不同的播放器上播放、测试,然后可以固化达到预期的测试效果的配置,以供后续使用。以上就是一个大概的流程。
为了实现这个流程的自动化,我们设计了一个方案。在这个方案里,我们使用了谷歌云无服务器托管的服务,帮助大家在免运维的模式下生成视频制作的工作流。首先,在谷歌云的对象存储里创建存储的目录,将所有的原视频放在目录里。然后,每当有新视频上传时,就会触发云函数,由云函数来启动转码任务,其可以根据视频特点引用相应的转码配置。完成转码任务后,会向消息队列投递一个消息,消息队列根据接收到的消息触发另一个云函数,由其进行输出文件的管理。输出文件有几种类型,一种是任务失败,那就要把输入/输出文件放在失败的队列的存储位置。另一种是任务成功,那么就将其放在发布的存储位置。还可以使用相应的代码实现内容的catalog管理,将视频内容的转码结果放到数据库里。这样的完全自动化的流水线适用于业务繁忙的、转码任务较多的场景。
至此,我已经介绍完了转码服务。转码服务的完成是第一步,接下来要考虑如何让用户看到视频,这里我们建议使用谷歌云的技术服务——CDN。完成转码服务的视频可以放在对象存储里,让对象存储作为视频的源站。对象存储可以对其进行名称定义、目录划分和生命周期管理。同时,将视频放在对象存储里的最主要的目的是实现高效的内容的分发。因此,可以利用谷歌云的CDN接入GCS,将对象存储作为源站,让用户可以更高速地下载视频。举个例子,谷歌云在全球有较多的网络部署,也有一百多个CDN节点,这些节点与全球上千家主流运营商有直连。因此,在大部分国家和区域,用户经过ASN的一跳就可以访问CDN的缓存,可以高效地观看或下载视频。一些小的运营商的用户经过ASN的两跳或三跳也可以访问CDN的缓存,然后可以高效下载内容。
接下来,给大家介绍谷歌云的CDN网络和源站的对象存储的部署情况。可以看到,在全球的一些热点地区,比如美国、欧洲等,部署是比较密集的,可以帮助出海用户实现快速高效的视频业务的部署。目前,很多出海客户使用谷歌云的CDN不仅实现了视频的下载,还实现了应用、游戏的下载。这是因为,使用谷歌云的转码服务和CDN可以以无缝的方式实现视频业务的部署。
最后,展示一下谷歌云CDN的性能报告。相比于其他CDN的平台,由于在全球建立了很多骨干网,所以谷歌云的CDN有网络的优势,可以帮助用户以更低的延时下载内容,而且吞吐也较高。
以上就是我今天分享的内容,感谢大家的倾听。