2015-11-10 25 views
6

Duraklama modundayken görüntülenen videonun geçerli karesi numarası'u almam gereken bir Android video uygulaması geliştiriyorum.Android: ExoPlayer - Videodan geçerli kare numarasını al

Sunucumu şu anda videoda duraklatılan kare numarasını göndermem ve o kare/saat ile ilgili bir liste geri almam gerekiyor, şimdi geçerli duraklatılmış süreyi milisaniye olarak gönderiyorum, ancak oldukça çalışmıyor iyi, çünkü Sunucu zamana göre hesaplanan belirli bir kareye gönderilen zamanı karşılaştırır, ancak bazen karşılaştırma kesin değildir.

MediaMetaDataRetriever'u kullanırsanız o kareden bir bitmap alabilirsiniz ve yaptım, ancak bitmap görüntüsü döndürüyor ve ihtiyacım olan şey bir dizin. ExoPlayer kullanıyorum (bu özellik için MP4 ve HLS için de bu özelliğe ihtiyacım var).

Bu bilgiyi videodan almanın bir yolu var mı?

@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; 
} 

:

+0

aslında güzel nokta – michael

+0

'u izliyorum Şu anki kare sayısını milisaniye cinsinden değil de bilmem gerekiyor. Milisaniye değerini kareye hesaplarsanız, genellikle bir yuvarlama hatası alırsınız, böylece çerçeve doğru değildir. – jclova

cevap

1

Ben sadece ExoPlayer kitaplığından MediaCodecVideoTrackRenderer.java sınıf genişletilmiş ve işlevinde olan lastOutputBufferTimestamp değerini kullanılan kesin çerçeve saati almak için, benim soruna bir çözüm sonrası Bana tam zamanı, son söz, mPlayer.getDuration() ya da bunun gibi bir şey değil, yuvarlak bir zaman verir. Videonuzda sabit bir FPS varsa, bunu bölünerek hesaplayabilir ve çerçevenin sayısını alabilirsiniz. Tam kare zamanını bilmek benim için yeterliydi.

ExoPlayer sürüm r1.5.3 kullanıyorum, bu yüzden kodun değişmiş olması nedeniyle bu çözümün daha yeni bir sürüm için çalışıp çalışmayacağını bilmiyorum.