Что именно вызывает AVPlayerItemDidPlayToEndTimeNotification?
Итак, я знаю, что AVPlayerItemDidPlayToEndTimeNotification
отправляется, когда фильм сыграл до конца.
Мой вопрос в том, как игрок знает, достигнет ли элемент времени до конца? Я играл в прямом эфире, создаваемом сторонним генератором. Он продолжает обновлять M3U8 и создавать новые TS файлы, которые должны транслироваться в прямом эфире. Но в какой-то момент мой игрок получает AVPlayerItemDidPlayToEndTimeNotification
и, таким образом, вызывает мои методы выхода и завершает работу. Тем не менее, генератор стороннего потока все еще работает нормально. Я могу перезагрузить плеер и посмотреть потоки.
Поскольку игровой элемент является потоком в реальном времени, playerItem.duration
не является читаемым номером продолжительности, что делает поиск конечного времени больше похожим на черную магию для меня...
На самом деле путают, как игрок думает, что это конец. Мое предположение, возможно, файл TS был проблематичным и заставил игрока подумать, что игра закончилась? Но если это так, должен ли игрок изменить свой статус, чтобы сказать "sth" вместо того, чтобы спокойно закончить игру?
P.S. Я также пробовал разные способы, как сделать один тс отсутствующим в списке m3u8 или прекратить генерировать новые, чтобы игрок играл текущую m3u8 и играл за последние ts, ничего не делало магию AVPlayerItemDidPlayToEndTimeNotification
....
Я зарегистрировал уведомление следующим образом:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:self.playerItem];
Ответы
Ответ 1
Итак, оказывается, что проблема связана с генератором сторонних потоков. Это было sth ('IV', как в Инициализационный вектор) неправильно при потоковой передаче содержимого TS, поэтому в какой-то момент AVPlayer прочитал некоторое место на TS, затем рассмотрим, что фильм закончен, и, таким образом, отправив AVPlayerItemDidPlayToEndTimeNotification
.... Не совсем проблема Objective-C, я думаю.
Но мой вопрос о том, в каком состоянии AVPlayer
отправить AVPlayerItemDidPlayToEndTimeNotification
пока неизвестно. Если кто-нибудь знает какие-либо подробности об этом, пожалуйста, не стесняйтесь обновлять здесь. Спасибо!
Ответ 2
Последний аргумент должен быть self.player, а не playerItem
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem];