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