13

So I know AVPlayerItemDidPlayToEndTimeNotification is sent when a movie 'has played to its end time'.

My question is how does the player know if an item reaches its end time? I was playing a live stream generated by a 3rd party generator. It keeps updating the M3U8 and creating new TS files, which live streaming should do. But at some point my player receives an AVPlayerItemDidPlayToEndTimeNotification and thus invokes my exit methods and quit. The 3rd party stream generator is still running OK though. I can restart the player and watch the streams. Since the playing item is a live stream, playerItem.duration is not a readable duration number, which makes finding the End Time more like a black magic to me...

プレイヤーがどうやって終わりだと思っているのか、本当に混乱しています。私の推測では、おそらく TS ファイルに問題があり、プレーヤーに再生全体が終了したと思わせたのでしょうか? しかし、もしそうなら、プレイヤーは無言でプレイを終了するのではなく、sth と言うようにステータスを変更する必要がありますか?

PS また、m3u8 リストから欠落している 1 つの ts を作成するか、プレーヤーが現在の m3u8 を再生し、最後の ts を過ぎて再生するように新しいものの生成を停止するなど、さまざまな方法を試しましたが、AVPlayerItemDidPlayToEndTimeNotification魔法は何も起こりませんでした....

次のように通知を登録しました。 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem];

4

2 に答える 2

5

だから..問題はサードパーティのストリームジェネレーターにあることがわかりました。TS コンテンツをストリーミングするときに sth ( Initialiation Vectorのように「IV」) が間違っていたため、ある時点で AVPlayer は TS のいくつかのスポットを読み取り、映画が終了したと見なして送信しAVPlayerItemDidPlayToEndTimeNotificationます .... 実際には目的ではありません-Cの問題だと思います。

しかし、どのような状態でAVPlayer送信されるのかという私の質問AVPlayerItemDidPlayToEndTimeNotificationはまだ不明です. 誰かがこれについて詳細を知っている場合は、ここで更新してください。ありがとう!

于 2013-04-17T07:41:19.313 に答える
-3

最後の引数は、playerItem ではなく、self.player にする必要があります。

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