Video Streaming u Android Aplikacijama
Croatian (Hrvatski) translation by Maja Petek (you can also view the original English article)
Android platforma nudi biblioteke koje možete koristiti za streamanje media datoteka, poput remote videa, predstavljaući ih za reprodukciju u vašim aplikacijama. U ovom tutorialu ćemo stream-ati video datoteku, prikazujući je koristeći VideoView
komponentu zajedno sa MediaController
objektom kako bismo omogućili korisniku da upravlja reproduciranjem.
Također ćemo ukratko proći kroz proces prezentiranja videa koristeći MediaPlayer
klasu. Ako ste završili serije o izradi muzičkog playera za Android, ono što ste naučili u ovom tutorialu mogli biste naučiti da proširite i unaprijedite znanje. Ako ste razvili barem jednu Android aplikaciju, trebali biste biti u mogućnosti završiti ovaj tutorial.
1. Izradite Novu Aplikaciju
1. korak
Možete upotrijebiti kod u ovom tutorialu da unaprijedite postojeću aplikaciju na kojoj radite ili možete napraviti novu aplikaciju sada, u Eclipse ili Android Studio-u. Izradite novi Android projekt, nazovite ga po vlastitom izboru, konfigurirajte detalje i dodijelite mu inicijalnu glavnu Activity
klasu i layout.
2. korak
Konfigurirajmo prvo manifest projekta za streamanje medija. Otvorite manifest datoteku vašeg projekta i prebacite u XML editiranje u svojem IDE-u. Za streaming medija, potreban vam je pristup internetu, stoga dodajte sljedeću dozvolu unutar manifest
elementa:
<uses-permission android:name="android.permission.INTERNET" />
2. Dodajte VideoWiev
1. korak
Android platforma pruža VideoView
klasu u kojoj možete pokrenuti video datoteke. Dodajmo jednu na glavnu layout datoteku:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:background="#000000" tools:context=".MainActivity" > <VideoView android:id="@+id/myVideo" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerInParent="true" /> </RelativeLayout>
Promijenite roditeljski layout kako bi odgovarao vašoj aplikaciji ukoliko je potrebno. VideoView
instanci dajemo id
atribut kako bismo mu se kasnije mogli referirati. Za svoj dizajn ćete možda morati podesiti druga layout svojstva.
2. korak
Dohvatimo referencu na VideoView
instancu u kodu. Otvorite glavnu Activity
klasu vaše aplikacije i dodajte sljedeći import:
import android.net.Uri; import android.widget.MediaController; import android.widget.VideoView;
Vaša Activity
klasa već bi trebala sadržavati onCreate
metodu u kojoj je sadržaj podešen:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
Nakon setContentView
linije, referirajmo se na VideoWiev
instancu kao što slijedi, koristeći id
koji podesimo u XML layoutu:
VideoView vidView = (VideoView)findViewById(R.id.myVideo);
3. Streaming Video Datoteke
1. korak
Sada možemo proslijediti video datoteku u aplikaciju. Pripremite URI za krajnju točku kao što slijedi:
String vidAddress = "https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4"; Uri vidUri = Uri.parse(vidAddress);
Naravno, morati ćete upotrijebiti remote adresu za video datoteku koju želite proslijediti. Ovdje naveden primjer je besplatna javna (public domain) video datoteka poslužena na Internet Achive-u. Parsiramo niz adresa kao URI kako bismo ga mogli prenijeti na VideoView
objekt:
vidView.setVideoURI(vidUri);
Sada jednostavno možete započeti reproduciranje:
vidView.start();
Android operativni sustav podržava niz video i media formata.
Kao što možete vidjeti u Vodiču za Developere, podržane datoteke u video formatu uključuju 3GP, MP4, WEBM i MKV, ovisno o upotrijebljenom formatu i platformi koju je korisnik upotrijebio za instalaciju.
Datoteke audio formata za koje možete očekivati ugrađenu podršku uključuju MP3, MID, OGG i WAV. Možete streamati medije na Android preko RTSP, HTTP, i HTTPS (s Androida 3.1).
4. Dodajte Reprodukcijsko Upravljanje
1. korak
Implementirali smo video reprodukciju, ali korisnik će očekivati, po navici imati kontrolu nad njome. Opet, Android platforma nudi resurse za upravljanje ovom interakcijom putem MediaController
klase.
U vašoj Activity
klasi onCreate
metodi, prije reda u kojem zovete start
na VideoView
-u, izradite instancu klase:
MediaController vidControl = new MediaController(this);
Zatim je podesite da koristi VideoView
instancu kao svoje sidro:
vidControl.setAnchorView(vidView);
I konačno, podesite je kao media kontroler za VideView
objekt:
vidView.setMediaController(vidControl);
Sada, kada pokrenete aplikaciju, korisnik bi trebao biti u mogućnosti kontrolirati reprodukciju streamanog videa, uključujući naprijed i nazad gumbe, play/pauza gumbe i kontrolna traka za pretraživanje.
Kontrolnoj traci za pretraživanje, zdesna je dodana dužina datoteke medija i trenutna pozicija reprodukcije s lijeva. Kao i mogućnost da dotaknete traku za pretraživanje kako bi odredili poziciju na datoteci, streaming status je indiciran koristeći isti tip prikaza na koji je korisnik naviknut sa stranica i aplikacija kao što je YouTube.



Kao što ćete vidjeti kada pokrenete aplikaciju, zadano ponašanje je za kontrole, kako bi nestale nakon kratkog vremena i ponovile se kada korisnik dotakne ekran. Ponašanje MediaController
objekta možete konfigurirati na više načina. Pogledajte serije o izradi aplikacije muzičkog playera za Android kako biste vidjeli na primjeru kako se to radi. Također možete unaprijediti reprodukciju medija implementiranjem video slušalaca da konfigurirate ponašanje aplikacije.
5. Korištenje MediPlayer
-a
1. korak
Prije nego što završimo, prođimo kroz alternativni pristup za streamanje videa koristeći MediaPlayer
klasu, pošto smo je upotrijebili u seriji o izradi muzičkog playera. Možete streamati medije, uključujući video, na MediaPlayer
objekt koristeći surface view:. Na primjer, mogli biste upotrijebiti sljedeći layout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000000" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <SurfaceView android:id="@+id/surfView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout>
Referirati ćemo se na SurfaceView
u implementaciji Activity
klase:
2. korak
U vašoj Activity
klasi, dodajte sljedeća sučelja:
public class MainActivity extends Activity implements SurfaceHolder.Callback, OnPreparedListener
Vaš IDE bi vas trebao tražiti da dodate ove neimplementirane metode:
@Override public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder arg0) { //setup } @Override public void surfaceDestroyed(SurfaceHolder arg0) { // TODO Auto-generated method stub } @Override public void onPrepared(MediaPlayer mp) { //start playback }
Dodati ćemo surfaceCreated
i onPrepared
metodama.
3. korak
Kako biste implemetirali reprodukciju, klasi dodajte sljedeće varijable instanci:
private MediaPlayer mediaPlayer; private SurfaceHolder vidHolder; private SurfaceView vidSurface; String vidAddress = "https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4";
U Activity
-jevoj onCreate
metodi, tada možete početi instancirati ove varijable koristeći SurfaceView
objekt koji ste dodali layoutu:
vidSurface = (SurfaceView) findViewById(R.id.surfView); vidHolder = vidSurface.getHolder(); vidHolder.addCallback(this);
4. korak
U surfaceCreated
metodi, podesite resurse za reproduciranje medija:
try { mediaPlayer = new MediaPlayer(); mediaPlayer.setDisplay(vidHolder); mediaPlayer.setDataSource(vidAddress); mediaPlayer.prepare(); mediaPlayer.setOnPreparedListener(this); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); } catch(Exception e){ e.printStackTrace(); }
Konačno, u onPrepared
metodi, počnite reproduciranje:
mediaPlayer.start();
Vaš video trebao bi sada reproducirati u MediaPlayer
-u instanci kada pokrenete aplikaciju.
Zaključak
U ovom tutorialu, naglasili smo osnove streamanja videa na Androidu koristeći VideoView
i MediaPlayer
klase. Mogli biste prilično mnogo unaprijediti kod koji smo ovdje implementirali, na primjer, izgradnjom podrške za video ili streaming medije u aplikaciju muzičkog playera koju smo kreirali. Možda biste također željeli pogledati resurse vezane za Android kao što su YouTube Android Player API.