2012-12-06 12 views
11

Oba poniżej działają poprawnie na emulatorze (2.3.3), ale na rzeczywistym urządzeniu (Nexus S z 4.1.2) żadne zdjęcie nie jest wyświetlane dla miniatury. Spróbuję też uruchomić go na Android 4 Emulator. Jeśli ustawię domyślny android:src dla ImageView, nie będzie on już pokazywany. To sprawia, że ​​myślę, że został zastąpiony, ale ImageView jest pusty.Możliwe jest wyświetlanie miniatury wideo z adresu URL systemu Android 4 lub nowszego?

public class MainActivity extends Activity { 

    ImageView img; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     img = (ImageView)findViewById(R.id.img_thumbnail); 
     new MyAsync().execute("http://commonsware.com/misc/test.mp4"); 
    } 

    //This version is still not working, but it's more readable (edited: Selvin). 
    public class MyAsync extends AsyncTask<String, Void, Bitmap>{ 

     @Override 
     protected Bitmap doInBackground(String... objectURL) { 
      //return ThumbnailUtils.createVideoThumbnail(objectURL[0], Thumbnails.MINI_KIND); 
      return ThumbnailUtils.extractThumbnail(ThumbnailUtils.createVideoThumbnail(objectURL[0], Thumbnails.MINI_KIND), 100, 100); 
     } 

     @Override 
     protected void onPostExecute(Bitmap result){ 
      img.setImageBitmap(result); 
     } 
    } 
} 

Wiem, że podobne pytanie zostało zadane wcześniej, Displaying video thumbnails in an Android device from a remote video URL, ale ja już próbowałem i ten sam rezultat.

Dlaczego to nie działa na urządzeniu i jak działa?

+2

definiować nie działa ... jakieś kłody logcat? – Selvin

+0

@Selvin No..no LogCat – AlexAndro

+0

tak bmThumbnail ma wartość null po wyodrębnieniu? spróbuj wywołać ekstrakt w AsyncTask ... – Selvin

Odpowiedz

2

Zastosowanie FFmpegMediaMetadataRetriever aby wyodrębnić miniaturkę w wymaganej pozycji: FFmpegMediaMetadataRetriever

+1

Próbowałem twojej biblioteki i działa. Korzystając z przykładowego kodu z opisu, 'Bitmap b = mmr.getFrameAtTime (2000000, FFmpegMediaMetadataRetriever.OPTION_CLOSEST)' działa! Mimo to 'byte [] artwork = mmr.getEmbeddedPicture(); zwraca' null'. – AlexAndro

+0

Nadużywane Nadal szukam możliwej metody uzyskania miniatury pliku lokalnego ścieżki pliku lub uri – Lion789

+0

Wielkość tej biblioteki wynosi prawie 25 MB! –

0

Nie jest to możliwe w systemach Android i Java oraz, o ile wiem, w jakimkolwiek innym języku bez pobierania całego pliku wideo (popraw mnie, jeśli się mylę). Nie bez powodu YouTube i jakakolwiek inna duża usługa wideo udostępnia prosty interfejs API służący do uzyskiwania wideo-kciuka. Więc jeśli serwer, na którym znajdują się pliki wideo, nie obsługuje tego rodzaju interfejsu API, zadzwoń do pecha.

+0

Właściwie moje filmy znajdują się na Amazon. Zapewniają taki rodzaj API. Dzięki opisanej powyżej metodzie udało mi się wygenerować ponad 500 miniatur na emulatorze Android 2.3 w ciągu około 2 godzin, używając wątku rekursywnego. Te filmy zawierają więcej niż 32 GB, więc ... Nie wiem, jak dokładnie emulator działa za sceną, ale myślę, że obserwowałbym taką przestrzeń zajętości pamięci, gdyby ją pobrać. Może to było coś tymczasowego, nie wiem co powiedzieć, ale z pewnością działało na 2.3 i nie działa na Androidzie 4+. – AlexAndro

+0

Oto krótki fragment mojej pracy, w którym korzystałem z Amazon API, aby uzyskać dostęp do filmów: http: // stackoverflow.com/questions/13287233/how-to-play-a-video-from-amazon-s3-in-android-app – AlexAndro

+0

@AlexAndro Cóż, jedyną rzeczą, którą udało mi się znaleźć w dokumentacji do generowania kciuków z wideo jest MediaStore.Video.Thumbnails i działa tylko w pamięci wewnętrznej i zewnętrznej. Jeśli twoje wcześniejsze rozwiązanie spełnia twoje potrzeby, powinieneś go użyć: ściągnij wideo 1 na raz i wygeneruj kciuk, a następnie usuń wideo ponownie: S <- brzmi dla mnie naprawdę głupio. – Warpzit

0

Ten sam problem dotyczy wersji 2.3, gdy próbowano utworzyć miniaturkę z pliku znajdującego się w folderze pamięci podręcznej. Ustawienie flagi uprawnień rozwiązał problem:

videoFile.setReadable(true, false); 
+3

W przypadku 2.3 prac, problem dotyczy 4+ filmów online. – AlexAndro

Powiązane problemy