究竟是什么触发了AVPlayerItemDidPlayToEndTimeNotification? [关闭]

问题描述 投票:13回答:2

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

objective-c avplayer
2个回答
5
投票

所以..事实证明问题来自第三方流生成器。当流式传输TS内容时,它有'('IV',如在Initialiation Vector中)错误,所以在某些时候AVPlayer读取TS上的某个点,然后考虑电影已完成,因此发送AVPlayerItemDidPlayToEndTimeNotification ....不是真的是一个目标-C问题​​我想。

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


-3
投票

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

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem];
© www.soinside.com 2019 - 2024. All rights reserved.