2015-11-10 25 views
6

Sto sviluppando un'app video Android in cui ho bisogno di ottenere il numero corrente numero del video visualizzato in modalità di pausa.Android: ExoPlayer - Ottieni il numero di fotogramma corrente dal video

Ho bisogno di inviare al mio server il numero di fotogramma correntemente in pausa nel video e recuperare un elenco di elementi relativi a quel fotogramma/ora, in questo momento sto inviando il tempo di pausa corrente in millisecondi, ma non funziona abbastanza beh, perché il server confronta il tempo inviato a un determinato frame calcolato, in base al tempo, ma a volte il confronto non è esatto.

So che è possibile ottenere una bitmap da quella cornice se si utilizza MediaMetaDataRetriever e l'ho fatto ma restituisce l'immagine bitmap e ciò di cui ho bisogno è un indice. Sto usando ExoPlayer (ho bisogno di quella funzione anche per MP4 e HLS, se questo è importante).

C'è un modo per ottenere tali informazioni dal video?

+0

punto davvero bello sto seguendo – michael

+0

Ho anche bisogno di conoscere il numero di fotogramma corrente non il tempo in millisecondi. Se si calcola millisecondi per frame, si ottiene spesso un errore di arrotondamento in modo che il frame non sia accurato. – jclova

risposta

1

ho posto una soluzione al mio problema, Al fine di ottenere l'esatto tempo telaio ho semplicemente esteso classe MediaCodecVideoTrackRenderer.java dalla libreria ExoPlayer e utilizzato il valore di lastOutputBufferTimestamp che è in funzione:

@Override 
protected boolean processOutputBuffer(long positionUs, long elapsedRealtimeUs, 
             MediaCodec codec, ByteBuffer buffer, MediaCodec.BufferInfo bufferInfo, int bufferIndex, 
             boolean shouldSkip) { 
    boolean processed = super.processOutputBuffer(positionUs, elapsedRealtimeUs, codec, buffer, 
      bufferInfo, bufferIndex, shouldSkip); 
    if (!shouldSkip && processed) { 
     lastOutputBufferTimestamp = bufferInfo.presentationTimeUs; 
    } 
    return processed; 
} 

Mi dà il tempo esatto e non un tempo arrotondato, per esempio, mPlayer.getDuration() o qualcosa del genere. Se hai un FPS costante nel tuo video, puoi calcolarlo per divisione e ottenere il numero del fotogramma. Era semplicemente sufficiente per me sapere il tempo esatto del frame.

Utilizzo la versione ExoPlayer r1.5.3 quindi non so se questa soluzione funzionerà con la versione più recente poiché il codice è probabilmente cambiato.

Problemi correlati