Подтвердить что ты не робот

Что именно вызывает 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];

4b9b3361

Ответ 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];