随着音视频在互联网技术和应用中的发展,视频广告已经是目前一种主流的广告投放方式,本文将介绍如何在流媒体直播里进行动态广告插入的方案。
广告服务端动态插入效果
腾讯云音视频已支持流媒体直播服务端的动态广告插入,下面是通过腾讯音视频流媒体平台StreamService进行广告插入后的四个播放端的播放对比效果。可以看到,四个播放器在相同的播放时间点插入了不同的广告视频。
那么如何在流媒体直播里实现这种动态广告方案呢?
流媒体广告演进
首先,先简单了解一个流媒体平台广告投放的架构和流程。
广告是如何交易的
广告交易和投放的关键角色包括DSP(需求方平台),SSP(供应方平台)和ADX(广告交易系统)。
DSP,Demand Side Platform,是广告交易的需求方,也就是广告主。
SSP,Supply Side Platform,是内容发布平台,提供内容资源和广告位。通常由内容版权方(比如影视制作、新闻采编、赛事活动方等),和发布平台等构成。
ADX,ADvertisement Exchange(AdExchange),也就是在线广告交易系统,负责对接流量主和广告主,并负责完成计费和交易,由于广告系统逐渐程序自动化,也会用RTB(real time bidding实时竞价)来代指AdExchange。
流媒体广告展现形式
在互联网早期,视频广告主要是通过网站上的Flash动画或GIF图像来实现的。这些广告通常是静态的,没有声音或动画效果。
于是,广告更多的和视频内容本身结合起来,可以插入到视频播放前(pre-roll)、视频播放中(mid-roll)或者在视频结束后(post-roll)。广告插入位置的选择取决于视频服务提供商想要使用哪种广告位置组合。他们也可以选择将视频组合成Ad-pods,允许广告主在广告时间连续播出多个广告。
在流媒体广告领域,有两种在视频中插入广告的方法:CSAI(Client-Side Ad Insertion,客户端广告插入)和SSAI(Server-Side Ad Insertion,服务器端广告插入)。
CSAI是一种向客户端投放广告的方法,其中客户端(视频播放器)在识别到(视频流或者播放清单中的)广告标记时,直接向广告服务器请求广告,并在指定的时间段播放广告。
当广告服务器获得来自客户端的请求,它便通过数据分析将正确的广告提供给特定的客户端并响应广告信息。接着视频播放器暂停视频,播放广告,然后恢复视频播放。
CSAI简易流程
SSAI也是一种广告插入方法:不同于CSAI在客户端插入广告,SSAI是将广告媒体文件直接拼接到视频流中(在服务端而非客户端)。
SSAI的优势在于不易屏蔽或篡改,客户端无需进行服务器接口调用来启动广告插入。在CSAI中,客户端要向广告服务器发出API调用,容易被插件等方式屏蔽调网络请求,进而减少内容发布商的收入。
在SSAI中,所有操作都在服务端进行,广告被直接插入视频流中,不可能被屏蔽。但SSAI拥有更加复杂的工作流程,对服务端的稳定性和质量要求较高。
SSAI简易流程
相关技术标准
前面提到,不管是CSAI还是SSAI,都需要程序能够识别到广告事件标识,而这个标识可以通过SCTE-35来实现。
SCTE - 35
SCTE-35是美国有线电视和电信工程师协会(Society of Cable Telecommunications Engineers,简称 SCTE)制定的一种数字广播标准,用于在数字视频广播中插入和传输时间和事件信息。SCTE-35标准定义了一种二进制消息格式,用于在视频流中标识接下来的广告插入点和广告结束点。这使得广告可以在视频流中无缝地插入和删除,而不会影响视频的连续性。
SCTE-35示意图
SCTE-35由SpliceInfoSection构成,SpliceInfoSection可以用XML表示为结构化的数据或者二进制结构。SCTE-35标准里定义了多种具体的时间类型和字段,常见的类型为splice_time和time_signal,这里不再赘述。
广告插入环节需要解析XML并在mpeg-ts封装的视频流里生成相应的标签和元数据。
SCTE-35 in HLS/DASH
在HLS/DASH manifest里也支持SCTE-35标签,提示在指定的时间段切换到广告内容。这里以HLS为例介绍下常用的几种标签。
1)EXT-X-DATERANGE
这是HLS标准推荐的一种较新的HLS封装SCTE-35的方式,例如:
#EXT-X-DATERANGE:ID="",START-DATE="",DURATION=15.000,SCTE35-OUT=0xF
2)EXT-X-CUE-OUT and EXT-X-CUE-IN
这种是目前更流行的使用方式,OUT代表开始播放广告,IN代表广告结束,例如:
#EXT-X-CUE-OUT:DURATION=100
...
#EXT-X-CUE-IN
通常,用EXT-X-CUE-OUT-CONT代表后面表示的分片仍是一个广告。
3)EXT-X-SCTE35
这种方式在SCTE-35的RFC里有规定,但暂还没有作为HLS的RFC标准。
以下为两个例子。
SCTE-35 in HLS
SCTE-35 in DASH
有了事件标识后,程序在识别之后,就要像广告决策服务获取广告信息,这里就会用到广告播放端(或一个执行广告插入的服务器)和广告决策服务之间的标准。
VAST
VAST(Video Ad Serving Template,视频广告服务模板)、VPAID(Video Player-Ad Interface Definition,视频播放器广告接口定义)以及VMAP(Video Multiple Ad Playlist,视频多广告播放列表协议)是主要的广告服务标准,由IAB(Interactive Advertising Bureau,互联网广告署)制定。通过使用这些标准,整个广告生态系统在创建、编辑、提供和跟踪广告的过程中紧密运作。
这里主要介绍最基础和关键的标准VAST,它是广告播放端与广告提供服务之间的标准,是互联网广告署IAB制定的开放协议,用来打通内容生产者、内容分发者和广告统计者。VAST最早是doubleclick创建的,被google收购后,成为了youtube的广告标准,也是事实上的行业标准。
VAST支持多种广告类型。
1)Linear Ads,线性广告是最常见的视频广告格式,和视频内容展示在同一个区域,只是展示时间不同。在视频内容播放之前展示,叫做前贴片广告(Pre-roll)。此外还包括mid-roll、post-roll。
2)NonLinear Ads,非线性广告,即为In-Stream广告,与视频播放内容同时显示,通常覆盖视频播放器的底部或顶部的一部分,可以是文本、图像或互动广告。
3)Companion Ads,出现在视频播放器之外的 横幅广告或富媒体广告。
4)Skippable Linear Ads,允许观众在广告播放的前几秒钟内跳过广告,继续观看视频内容。这种广告形式可以提高广告的效果,同时也可以减少观众对广告的不满和反感。
5)Ad Pods,是一序列可来回播放的线性广告。
VAST Ad Requests
VAST主要是规定了响应的数据格式,对请求并没特别要求,通常采取http/https或OpenRTB格式请求ADS(Ad Decision Server,是ADX广告交易平台中的一部分,用于根据广告主的需求和广告媒体库存情况,结合客户端用户画像信息,实时决策和投放广告)。广告插入端在进行VAST请求时会通过诸如HTTP header等方式带上客户端信息,如X-Device-IP(播放端的ip)和X-Device-User-Agent(播放端user-agent)等。
Response提取MediaFile Nodes
VAST请求端收到ADS的响应后,会解析XML,提取MediaFile以及Tracking地址等关键信息。如果返回的是<Wrapper> 信息,则说明目标地址提供了一种将媒体播放器重定向到另一个辅助广告服务器以检索一个广告、多个广告或另一个 VAST Wrapper 的方法。<Error> 元素则使媒体播放器能够在无法提供广告时向广告服务器提供反馈。在 VAST RFC中,提供了详细的错误代码和格式规范。
Tracking
视频播放器获取遵循VAST规范的广告信息并展现相应的广告视频后,还需要将广告的追踪信息按照VAST规范正确的上报广告服务器。广告的追踪信息是广告费用结算和效果衡量的重要依据,广告商和出版商依赖准确的追踪记录来进行计费、活动效果衡量、市场分析以及其他重要的商业数据统计,缺少正确的广告追踪信息将会导致广告服务商和视频媒体提供商之间的一系列结算问题。
Stream Service广告服务端插入实现
在腾讯云音视频产品Stream Service上,可以实现基于SCTE-35事件标识的CSAI广告插入方式,也可以实现基于SSAI的动态广告插入。
Stream Service 生成SCTE-35 标识的方式有两种,一种是使用mpeg-ts推流时(如RTP/SRT/UDP),源流中已有SCTE-35数据,可以选择让Stream Service来透传(SCTE-35 passthrough)并在播放协议HLS/DASH中生成对应的协议标签。另外一种是通过Stream Service的计划编排功能,在指定的时间或当前时刻插入所需的SCTE-35事件(SCTE-35 insert),然后进行处理。
SSAI的完整大致流程如下:
1) 推流端推送直播流到StreamLive进行转码、封装和广告SCTE-35事件标识的插入,并传输到StreamPackage。如果没有后续的流程,1)已经完成了CSAI中关于服务端的所有步骤。
2) 播放端请求manifest(m3u8/mpd),StreamPackage收到回源相关信息同时解析m3u8/mpd,检查scte-35标签。
3) StreamPackage请求Ad Decision Server,解析VAST/VMAP响应并获取广告视频地址。
4) 下载广告视频、转码并存储。
5) 将转码后的广告分片地址通过插入和替换更新到m3u8/mpd中并分发。一段替换后的m3u8内容如下所示。
6) StreamPackage在客户端播放广告后上报至广告Tracking服务进行跟踪(Track)。
播放器
如果是CSAI方式,需要播放器支持SCTE-35的解析并且支持VAST标准获取广告视频地址。如果是SSAI方式,因为是服务端进行插入和替换,则播放器不需要任何的特殊机制,支持普通的HLS或DASH播放即可(需支持解析EXT-X-DISCONTINUITY标签)。
如果您有相关业务需求或想要进一步地了解腾讯云音视频产品内容,欢迎扫描下方二维码添加音视频小姐姐微信,与我们的产研团队深入沟通交流。