You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在使用多个AVPlayer时检测哪个视频播放结束?

区分触发播放结束通知的AVPlayer实例

这个问题我做双视频播放功能时也碰到过,核心是要让通知回调能精准关联到对应的播放实例,给你两种简单靠谱的解决思路:

方法1:为每个AVPlayerItem单独绑定通知观察者

你之前用object: nil会监听所有AVPlayerItem的结束通知,改成给每个player的currentItem单独添加观察者,就能精准区分来源:

// 假设你已经初始化了两个AVPlayer实例:player1和player2
if let item1 = player1.currentItem {
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(playerDidFinishPlaying),
        name: .AVPlayerItemDidPlayToEndTime,
        object: item1
    )
}
if let item2 = player2.currentItem {
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(playerDidFinishPlaying),
        name: .AVPlayerItemDidPlayToEndTime,
        object: item2
    )
}

然后在回调方法里,通过notification.object拿到触发通知的AVPlayerItem,再判断它属于哪个player:

@objc func playerDidFinishPlaying(_ notification: Notification) {
    guard let finishedItem = notification.object as? AVPlayerItem else { return }
    
    if finishedItem == player1.currentItem {
        // 这里处理player1播放结束的逻辑
        print("Player 1 播放完成")
    } else if finishedItem == player2.currentItem {
        // 这里处理player2播放结束的逻辑
        print("Player 2 播放完成")
    }
}

方法2:给AVPlayerItem添加自定义标识

如果不想单独绑定观察者,也可以给每个AVPlayerItem设置一个唯一标识,用KVC给item加个自定义key:

// 初始化player时给对应的item设置标识
player1.currentItem?.setValue("player_1", forKey: "customPlayerId")
player2.currentItem?.setValue("player_2", forKey: "customPlayerId")

然后在回调里读取这个标识来区分:

@objc func playerDidFinishPlaying(_ notification: Notification) {
    guard let finishedItem = notification.object as? AVPlayerItem,
          let playerId = finishedItem.value(forKey: "customPlayerId") as? String else {
        return
    }
    
    switch playerId {
    case "player_1":
        print("Player 1 播放结束")
    case "player_2":
        print("Player 2 播放结束")
    default:
        break
    }
}

注意事项

别忘了在页面销毁时移除观察者,避免内存泄漏:

deinit {
    NotificationCenter.default.removeObserver(self)
}

内容的提问来源于stack exchange,提问作者Shahrukh Malik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:26:56