服务器端视频实现与客户端视频实现不同,客户端视频实现是分别请求视频流和广告,而与动态广告插播 (DAI) 结合使用的服务器端视频实现仅请求 1 个视频流(广告会动态嵌入到视频内容中)。如果服务器出错,视频流便会被屏蔽,这不仅会导致糟糕的用户体验,还会使收入减少。
在视频流创建及投放过程中,Ad Manager DAI 会向您提示出现的 HTTP 错误,并允许您指定备用视频流,以防您收不到服务器的有效回应。
如果在视频流创建期间检测到错误,则应使用备用视频流。如果在视频流投放期间发生错误,则 Ad Manager 会自动尝试使用相应视频内容的所有格式来解决相应问题。如果未能成功播放视频内容的任何格式,视频流便会终止。在这种情况下,建议您启动另一个视频流并尝试再次进行投放。
处理在视频流创建过程中检测到的 HTTP 错误
错误类型 | 建议 |
---|---|
4XX 错误 (不包括 429) |
如果看到 HTTP 4XX 错误,您不应回退到原始视频流,因为在这种情况下客户端可能遇到了错误。请确保您发送给服务器的请求正确无误且包含所有必要参数。 |
429 或 5XX 错误 | 如果看到 HTTP 429 或 HTTP 5XX 错误,您应回退到原始备用视频流,但不会获得任何收入。在 IMA SDK 中,此类错误可通过错误处理程序捕获,而默认视频流可切换为备用视频流。 |
TVOS
static NSString *const kBackupContentPath =
@"http://googleimadev‑vh.akamaihd.net/i/big_buck_bunny/bbb‑,480p,720p,1080p,.mov.csmil/"
@"master.m3u8";
- (void)streamManager:(IMAStreamManager *)streamManager
didReceiveError:(NSError *)error {
NSLog(@"Error: %@", error);
[self playBackupStream];
}
- (void)playBackupStream {
NSURL *contentURL = [NSURL URLWithString:kBackupContentPath];
self.playerViewController.player = [[AVPlayer alloc] initWithURL:contentURL];
[self.playerViewController.player play];
}
获取视频点播 (VOD) 或直播视频流的备用视频流网址
您的应用应该具有相应的机制来获取 VOD 和线性直播视频流的备用网址。对于 VOD,备用视频流应该是 MRSS Feed 中提供的 ingestURL。对于线性直播视频流,备用视频流应该是 Ad Manager 界面中指定的内容视频流。
处理视频流投放过程中出现的 HTTP 错误
如果在视频流投放过程中发生错误,建议您不要急于回退到原始视频流。Ad Manager 会自动尝试纠正遇到的绝大多数错误。不过,如果服务器无法处理错误,视频流会停止播放。如果视频流停止播放,应用应启动新的视频流。如果错误仍然存在,您便应回退到原始视频流。
验证您的后备实现方案
您可以使用下方的视频流示例验证您的后备实现方案:
视频流格式 | 素材资源键 |
---|---|
HLS | MSQJlB9VSgqJkGNv1mB0FA |
DASH | TrhaCde0R_uKzG_psucTww |
这些视频流用于测试目的,并且始终会抛出 HTTP 429 错误。
DAI 线性视频流的自动故障切换
在罕见的情况下,如果我们的系统出现了难以置信的高流量,对于某些用户,我们可能会回退到无广告的视频流。在这种情况下,观看者会看到基础内容。
如果无法提供后备视频流(例如,如果指定了身份验证或源转发,或者针对视频流请求了变体排除),系统会提供 HTTP 429 响应代码,所以应用应就地回退到原始视频流。
对于与 DAI 问题排查或服务中断相关的任何问题,请与发布商支持团队联系。