我正在开发一个传输 HLS 视频的应用程序,我想使用
AVPlayerInterstitialEventController
在直播期间安排优先事件(即紧急警报)。
我能够可靠地完成此任务的唯一方法是,如果我的 HLS 内容是 VOD,其中
AVPlayerInterstitalEvent
配置了时间属性并在控制器上安排。这很好用。
但是,当主要内容是直播时,我无法使其工作。
AVPlayerInterstitialEvent
配置有 Date
属性。
我已确认:
EXT-X-PROGRAM-DATE-TIME
标签,因此事件日期可以映射到主要项目的时间线中。AVPlayerInterstitialEvent
的日期属性比当前播放位置足够早(> 60秒)。实现此目的的唯一方法是将
AVPlayerInterstitialEvent
s cue
属性设置为 joinCue
。在这种情况下,我怀疑事件控制器只是忽略日期,因为所需的行为是在内容开始之前播放。但这对于我的用例来说还不够。
下面是我设置控制器的代码片段。我使用基本的 SwiftUI
VideoPlayer
进行本机播放控件。
let currentItem = player.currentItem
let event = AVPlayerInterstitialEvent(primaryItem: currentItem,
identifier: evt.id,
date: evt.date,
templateItems: [AVPlayerItem(url: evt.url)],
restrictions: [],
resumptionOffset: CMTime.indefinite)
event.willPlayOnce = true
eventController.events = [event]
任何帮助或见解表示赞赏。
更新:
我能够获取 AVPlayerInterstitialEvent 在 LIVE 资源上播放,但我需要操作 HLS 媒体播放列表才能实现此目的。我使用 Charles Proxy 重写并向媒体播放列表添加了日期范围标签,例如 #EXT-X-DATERANGE:ID="ad1",CLASS="com.apple.hls.interstitial",START-DATE="2023-04-25T19:13:00.000Z",DURATION=72.0,X-ASSET- URI =“https://myEvent.m3u8”,X-RESTRICT =“跳过,跳转”
在这里,我观察到与之前相同的行为,广告荚被渲染并移向流的实时边缘。这次播放器切换到插页式广告,我能够观看该事件并看到它切换回来。
我剩下的问题是为什么这不适用于客户端调度?
通过日期范围标签后期绑定服务器端广告是
AVPlayerInterstitialEvent
的一项广告功能,但 HLS 操作有点麻烦,我更喜欢使用 API 在客户端安排它。
链接:
您使用什么服务器来传送所述播放列表?有关 HLS Interstitial 的信息确实很少,我找不到提供这样的播放列表进行测试的方法。