13

所以我知道AVPlayerItemDidPlayToEndTimeNotification当电影“播放到结束时间”时发送。

我的问题是玩家如何知道一个项目是否达到了结束时间?我正在播放由 3rd 方生成器生成的实时流。它不断更新 M3U8 并创建新的 TS 文件,这是直播应该做的。但在某些时候,我的播放器收到一个AVPlayerItemDidPlayToEndTimeNotification并因此调用我的退出方法并退出。3rd 方流生成器仍然运行良好。我可以重新启动播放器并观看流。由于播放项目是直播,playerItem.duration不是可读的持续时间数字,这使得找到结束时间对我来说更像是一种黑魔法......

真的很困惑玩家如何认为它结束了。我的猜测是可能是 TS 文件有问题,让玩家认为整个播放结束了?但如果是这样,玩家是否应该改变其状态以说某事而不是默默地完成游戏?

PS我还尝试了不同的方法,比如从 m3u8 列表中删除一个 ts,或者停止生成新的,这样玩家就可以播放当前的 m3u8 并播放过去的 ts,没有任何事情让AVPlayerItemDidPlayToEndTimeNotification魔法发生......

我将通知注册如下: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem];

4

2 回答 2

5

所以..事实证明问题出在第 3 方流生成器上。在流式传输 TS 内容时,它有 sth('IV',如Initialiation Vector)错误,所以在某些时候 AVPlayer 读取了 TS 上的某个位置,然后认为电影已经完成,因此发送AVPlayerItemDidPlayToEndTimeNotification......不是真正的目标-C 问题我猜。

但我的问题是在什么条件下AVPlayer发送AVPlayerItemDidPlayToEndTimeNotification仍然未知。如果有人知道这方面的任何细节,请随时在此处更新。谢谢!

于 2013-04-17T07:41:19.313 回答
-3

最后一个参数应该是 self.player 而不是 playerItem

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem];
于 2013-09-13T14:16:36.827 回答