所以我知道AVPlayerItemDidPlayToEndTimeNotification
是在电影'has played to its end time'时发送的。
我的问题是玩家如何知道物品是否到达结束时间?我正在播放由第三方生成器生成的直播。它不断更新M3U8并创建新的TS文件,实时流媒体应该这样做。但在某些时候我的球员收到一个AVPlayerItemDidPlayToEndTimeNotification
因此调用我的退出方法并退出。第三方流生成器仍然运行正常。我可以重新启动播放器并观看流。由于播放项目是直播,playerItem.duration
不是一个可读的持续时间数字,这使得我觉得结束时间更像是一个黑魔法......
真的很困惑玩家怎么认为它结束了。我的猜测可能是TS文件有问题,让玩家认为整场比赛结束了?但如果是这样,玩家是否应该改变其状态而不是默默地完成比赛?
附:我也尝试过不同的方法,例如从m3u8列表中删除一个ts,或者停止生成新的,以便玩家可以播放当前的m3u8并播放最后一个ts,没有任何因素导致AVPlayerItemDidPlayToEndTimeNotification
魔法发生....
我将通知注册如下:[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:self.playerItem];
所以..事实证明问题来自第三方流生成器。当流式传输TS内容时,它有'('IV',如在Initialiation Vector中)错误,所以在某些时候AVPlayer读取TS上的某个点,然后考虑电影已完成,因此发送AVPlayerItemDidPlayToEndTimeNotification
....不是真的是一个目标-C问题我想。
但我的问题是AVPlayer
在什么条件下发送AVPlayerItemDidPlayToEndTimeNotification
仍然未知。如果有人知道有关这方面的任何细节,请随时在此更新。谢谢!
最后一个参数应该是self.player而不是playerItem
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem];