为 Live HLS 安排 AVPlayerInterstitialEvent

问题描述 投票:0回答:1

我正在开发一个传输 HLS 视频的应用程序,我想使用

AVPlayerInterstitialEventController
在直播期间安排优先事件(即紧急警报)。

我能够可靠地完成此任务的唯一方法是,如果我的 HLS 内容是 VOD,其中

AVPlayerInterstitalEvent
配置了时间属性并在控制器上安排。这很好用。

但是,当主要内容是直播时,我无法使其工作。

AVPlayerInterstitialEvent
配置有
Date
属性。

我已确认:

  • 主要资源的 HLS 播放列表包含
    EXT-X-PROGRAM-DATE-TIME
    标签,因此事件日期可以映射到主要项目的时间线中。
  • AVPlayerInterstitialEvent
    的日期属性比当前播放位置足够早(> 60秒)。
  • 使用 Charles 代理,我没有看到活动 URL 的任何玩家网络。
  • 玩家的传输栏会更新为事件的“广告荚”,并且它会移向传输栏上的实时点。尽管如此,视频从未切换到插页式广告。

实现此目的的唯一方法是将

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 在客户端安排它。

链接:

avplayer http-live-streaming interstitial avplayeritem
1个回答
0
投票

您使用什么服务器来传送所述播放列表?有关 HLS Interstitial 的信息确实很少,我找不到提供这样的播放列表进行测试的方法。

© www.soinside.com 2019 - 2024. All rights reserved.