究竟是什么触发了AVPlayerItemDidPlayToEndTimeNotification?

时间:2013-04-16 05:35:09

标签: objective-c avplayer

所以我知道电影“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];

2 个答案:

答案 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];