2013-04-16 21 views
13

Quindi so che AVPlayerItemDidPlayToEndTimeNotification viene inviato quando un film "has played to its end time".Cosa fa scattare esattamente AVPlayerItemDidPlayToEndTimeNotification?

La mia domanda è: come fa il giocatore a sapere se un oggetto raggiunge la sua ora di fine? Stavo riproducendo un live stream generato da un generatore di terze parti. Mantiene aggiornato l'M3U8 e crea nuovi file TS, che lo streaming live dovrebbe fare. Ma a un certo punto il mio giocatore riceve uno AVPlayerItemDidPlayToEndTimeNotification e quindi invoca i miei metodi di uscita e chiude. Tuttavia, il generatore di stream di terze parti continua a funzionare correttamente. Posso riavviare il lettore e guardare i flussi. Dal momento che l'elemento di gioco è un flusso dal vivo, playerItem.duration non è un numero durata leggibile, che fa trovare l'ora di fine più simile a una magia nera per me ...

molto confuso su come fa il giocatore pensa che sia fine. La mia ipotesi è forse che il file TS fosse problematico e ha fatto credere al giocatore che l'intera esecuzione fosse finita? Ma se è così, il giocatore dovrebbe cambiare il suo stato per dire sth invece di giocare silenziosamente?

P.S. Ho anche provato diversi modi, come fare a meno della lista m3u8, o smettere di generarne di nuovi in ​​modo che il giocatore possa giocare m3u8 corrente e giocare oltre gli ultimi ts, nulla ha reso la magia AVPlayerItemDidPlayToEndTimeNotification succedere ....

I registrato la notifica come segue: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem];

+0

Sei sicuro che non è solo auto-aggancio in un nuovo flusso in uscita? – CodaFi

+1

"Che cosa fa scattare esattamente AVPlayerItemDidPlayToEndTimeNotification?" - inserire un breakpoint in un metodo che è registrato per esso, eseguire in debuggger, attendere il punto di interruzione da colpire, 'backtrace',' frame 1', profitto. –

+0

@CodaFi Grazie per aver risposto! Sì, sono sicuro, il giocatore smette di giocare e non legge nulla dal server da cui proviene l'm3u8. – Ooops

risposta

5

Quindi .. si scopre che il problema è dal generatore di flusso di terze parti. Aveva sth ('IV', come in Initialiation Vector) sbagliato durante lo streaming dei contenuti di TS, quindi ad un certo punto AVPlayer legge qualche punto su un TS, quindi considera che il film è finito, e quindi inviando AVPlayerItemDidPlayToEndTimeNotification .... Non proprio un Obiettivo -C problema credo.

Ma la mia domanda su in che condizioni è AVPlayer inviare AVPlayerItemDidPlayToEndTimeNotification è ancora sconosciuto. Se qualcuno conosce qualche dettaglio su questo, per favore sentiti libero di aggiornare qui. Grazie!

-3

L'ultimo argomento dovrebbe essere self.player non il playerItem

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem]; 
+5

Questo non è corretto. La notifica è parte della classe AVPlayerItem. – martinjbaker