FrameExtractor sınıfı, kod çözümü yapılmış kareleri MediaItem kaynağından çıkarmak için verimli bir yol sağlar.
Yaygın kullanım alanları:
- Küçük resim oluşturma: Video galerisi veya arama çubuğu için yüksek kaliteli küçük resimler oluşturma.
- Video düzenleme önizlemeleri: Düzenleyici zaman çizelgesinde hassas kare önizlemeleri göstererek kullanıcıların içerikte arama yapmasına ve kareleri doğru şekilde görselleştirmesine olanak tanır.
- Ayıklama sırasında doğrudan ölçeklendirme, kırpma veya döndürme gibi dönüşümler uygulama, ayrı bir son işleme adımını atlama.
- İçerik analizi: Sahne algılama, nesne tanıma veya kalite kontrolü gibi görevler için analiz hattına göndermek üzere belirli aralıklarla kare çıkarma.
Genel Bakış
FrameExtractor kullanmak iki adımlı bir işlemdir:
- Ayıklayıcıyı oluşturun:
FrameExtractor.Builderkullanarak bir örnek oluşturun. İncelemek istediğinizContextveMediaItemöğesini oluşturucuya iletin. Gelişmiş ayarlar içinBuilderüzerinde yapılandırma yöntemlerini de zincirleyebilirsiniz. - Kareleri ayıklama: Belirli bir zaman damgasında kare ayıklamak için
getFrame(), temsili bir küçük resim istemek içingetThumbnail()işlevini çağırın. Bu yöntemler eşzamansızdır veListenableFuturedöndürür. Bu nedenle, karmaşık kod çözme işlemi ana iş parçacığını engellemez.
Kotlin
suspend fun extractFrames(context: Context, mediaItem: MediaItem) { try { // 1. Build the frame extractor. // `FrameExtractor` implements `AutoCloseable`, so wrap it in // a Kotlin `.use` block, which calls `close()` automatically. FrameExtractor.Builder(context, mediaItem).build().use { extractor -> // 2. Extract frames asynchronously. val frame = extractor.getFrame(5000L).await() val thumbnail = extractor.thumbnail.await() handleFrame(frame, thumbnail) } } catch (e: Exception) { handleFailure(e) } }
Java
public void extractFrames(Context context, MediaItem mediaItem) { // 1. Build the frame extractor. // `FrameExtractor` implements `AutoCloseable`, so use try-with-resources // so that the resources are automatically released. try (FrameExtractor frameExtractor = new FrameExtractor.Builder(context, mediaItem).build()) { // 2. Extract frames asynchronously. ListenableFuture<FrameExtractor.Frame> frameFuture = frameExtractor.getFrame(5000L); ListenableFuture<FrameExtractor.Frame> thumbnailFuture = frameExtractor.getThumbnail(); ListenableFuture<List<Object>> allFutures = Futures.allAsList(frameFuture, thumbnailFuture); Futures.addCallback( allFutures, new FutureCallback<List<Object>>() { @Override public void onSuccess(List<Object> result) { handleFrame(Futures.getUnchecked(frameFuture), Futures.getUnchecked(thumbnailFuture)); } @Override public void onFailure(Throwable t) { handleFailure(t); } }, directExecutor()); } }