2011-11-03 11 views
13

Szukam sposobu na uzyskanie rozdzielczości dowolnego filmu wideo w systemie Android. Nie musi działać z innymi formatami niż te obsługiwane w systemie Android, ale byłoby świetnie, gdyby tak było. Jeśli nie masz pewności, z obsługiwanych formatów w Androida można znaleźć na tej stronie:Czy można uzyskać rozdzielczość wideo w systemie Android?

http://developer.android.com/guide/appendix/media-formats.html

myślę, że to możliwe, aby robić to, co chcę użyciu klasy MediaPlayer, ale to wydaje się niewiarygodnie głupi i nieskuteczny. Poza tym chciałbym szybko uzyskać relację względnie.

Jestem kierowany na Androida 3.0+, jeśli to robi jakąkolwiek różnicę. Honeycomb obsługuje również pliki .mkv, chociaż nie jest oficjalnie wspierane aż do Androida 4.0.

Odpowiedz

40

Możesz użyć MediaMetadataRetriever, aby pobrać informacje o rozdzielczości pliku wideo. Użyłbyś metody extractMetadata() i stałych stałych 012 i METADATA_KEY_VIDEO_WIDTH. Więc chcesz zrobić coś takiego:

MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever(); 
metaRetriever.setDataSource(/* file descriptor or file path goes here */); 
String height = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); 
String width = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); 
+0

który wydaje absolutnie genialne! Nie mogę uwierzyć, że nigdy wcześniej nie słyszałem o tej klasie. Wielkie dzięki! :) –

+4

Czy jest jakiś łatwy sposób na pre-Honeycomb? –

+0

MediaMetadataRetriever wymaga poziomu API 14 – erdomester

3

trick API 10+:

MediaMetadataRetriever mRetriever = new MediaMetadataRetriever(); 
mRetriever.setDataSource("video_file_path"); 
Bitmap frame = mRetriever.getFrameAtTime(); 

int width = frame.getWidth(); 
int height = frame.getHeight(); 

Jesteśmy proste biorąc losową klatkę z naszego filmu i wykrywania jego szerokość i wysokość.

0

Jeśli masz video Content URI następnie można również użyć Treść zapytania dostarczający

Jak

Cursor mediaCursor = getContentResolver().query(
         videoContentURI, 
         {MediaStore.Video.Media.RESOLUTION}, null, null, null); 
     if (mediaCursor != null) { 
        if (mediaCursor.moveToFirst()) { 
     //The resolution of the video file, formatted as "XxY" 
     String resolution=mediaCursor.getString(mediaCursor 
            .getColumnIndex(MediaStore.Video.Media.RESOLUTION)); 
    } 
} 

You can check following post to get ContentURI from video Physical Path

Powiązane problemy