poniedziałek, 17 lutego 2014

Odtwarzanie video


Kod źródłowy do tej lekcji znajduje się tutaj. Rozpakuj go i zaimportuj. W katalogu z kodem źródłowym znajdą się podkatalogi oznaczone numerami. Są to po prostu kolejne wersje kodu, tworzonego w ramach przykładów. Możesz analizować kolejne kroki tworzenia aplikacji, lub od razu zabrać się za kod z katalogu o najwyższym numerku.



Odtwarzać możemy formaty MP4 (MPEG-4), AVC, 3GP. Mamy gotowy komponent który wystarczy przykleić gdzieś na aktywności. Sam plik video może znajdować się już w aplikacji, ale może się też znajdować np. na karcie SD. W tym przykładzie uruchomię plik video znajdujący się w aplikacji. W katalogu „res” aplikacji dodaję podkatalog „raw”. Do niego wrzucam plik video. Wklejony przeze mnie filmik to 2 i pół minuty video z tańczącymi i śpiewającymi parabolami. Nie wrzucaj zbyt dużego pliku video, ponieważ przy każdej aktualizacji kodu i ponownym uruchamianiu programu , całość będzie uploadowana na emulator lub telefon. Gdyby plik był duży, trwałoby to niemiłosiernie długo.


W kolejnym kroku przyklejam na aktywności komponent VideoView:




Następnie wprowadzam kilka zmian w metodzie onCreate aktywności głównej:



Linia 15 do podpięcie referencji do komponentu VideoView. Muszę to zrobić by w jakikolwiek sposób móc się do tego elementu odnosić (np. wskazać mu plik video). Ponieważ chcę wskazać plik video zawarty w samej aplikacji, muszę stworzyć do niego referencję w postaci obiektu klasy Uri i przekazać go do metody setVideoURI komponentu klasy VideoView (linie 16 i 17). Średnio to wygodne moim zdaniem . Szkoda że nie ma możliwości przekazania po prostu ścieżki jako Stringa. Ścieżkę do pliku muszę podać z przedrostkiem „android:resource://”, pakietem w którym znajduje się dana aktywność, katalogiem raw i nazwą pliku video bez rozszerzenia.




W linii 18 widać wykomentowany alternatywny sposób. Podaję tutaj ścieżkę do pliku wideo znajdującego się poza aplikacją, z użyciem metody setVideoPath. Tutaj dla odmiany możemy podać ścieżkę jako zwykłego Stringa.
Po uruchomieniu aplikacji wszystko działa w spodziewany sposób. Jedyna drobna uwaga – filmik nie dopasowuje się do ustawionej wielkości komponentu VideoView, a wyświetla się w swoich oryginalnych proporcjach. W związku z powyższym w orientacji pionowej u mnie (Samsung ACE 3 ) przy propocji ekranu 480:800, wideo zajmuje jaką 1/3 ekranu.


12 komentarzy:

  1. Witam,
    jak zmodyfikować kod aby po zakończeniu pierwszego pliku wideo od razu rozpoczęło się odtwarzanie drugiego pliku video.
    Szukałem przykładów na necie ale wszystkie przykłady nie działają. pojawia się tam metoda setOnCompletionListener()
    Czy możesz cos podpowiedzieć?

    Pozdro, Pablo.

    OdpowiedzUsuń
  2. już nie aktualne

    Pozdro, Pablo

    OdpowiedzUsuń
  3. Masz jakiś sposób na niewyłączanie muzyki po zablokowaniu ekranu?

    OdpowiedzUsuń
  4. Brakuje tutaj informacji, że w przypadku odtwarzania filmu spoza aplikacji trzeba mieć uprawnienie do odczytu danych z zewnętrznej pamięci: w AndroidManifest.xml dodajemy pomiędzy a linię:

    OdpowiedzUsuń
    Odpowiedzi
    1. Widzę, że skrypt komentarzy ukrywa znaczniki :P

      Usuń
  5. Wpis zawiera bardzo ciekawe informacje

    OdpowiedzUsuń
  6. Niesamowicie wartościowy wpis. Super

    OdpowiedzUsuń