Advertisement
  1. Code
  2. Android SDK

Android Uygulamalarında Akan(Streaming) Video

Scroll to top
Read Time: 5 min

Turkish (Türkçe) translation by Nevres Emre Alsancak (you can also view the original English article)

Android platformu uzaktaki videolar gibi medya dosyalarını uygulamalarınızda oynatabilmeniz için kullanabileceğiniz kütüphaneler sağlar. Bu yazıda uzaktan video akıtıp bunu VideoView bileşeni ile görüntüleyip MediaController nesnesi ilede kullanıcının videoyu kontrol edebilmesini sağlayacağız.

Ayrıca videoyu MediaPlayer sınıfını kullanarak sunma süreci üzerindende kısaca geçeceğiz. Android için bir müzik çalar yaratma serisini tamamladıysanız, onu daha da geliştirmek için bu yazıda öğrendiklerinizi kullanabilirsiniz. Daha önce birkaç Android uygulaması geliştirdiyseniz bu eğitimi tamamlayabilmeniz kolay olacaktır.

1. Yeni Bir Uygulama Oluşturun

1. Adım

Bu yazıdaki kodu, üzerinde çalıştığınız mevcut bir uygulamayı geliştirmek için kullanabilir veya Eclipse veya Android Studio'da yeni bir uygulama oluşturabilirsiniz. Yeni bir Android projesi oluşturun, istediğiniz bir ismi verin, detayları ayarlayın ve buna ana başlangıç Activity sınıfını ve düzenini verin.

2. Adım

İlk olarak, akan medya için projenin manifest(manifesto)'sunu yapılandıralım. IDE'nizde projenizin manifest dosyasını açın ve XML düzenleme moduna geçin. Akış medyası için internet erişimine ihtiyacınız vardır, bu nedenle manifest öğesinin altına aşağıdaki izni ekleyin:

1
<uses-permission android:name="android.permission.INTERNET" />

2. VideoView'ı Ekleyin

1. Adım

Android platformu video dosyalarını oynatabileceğiniz VideoView sınıfını sağlar. Ana düzen dosyasına bir tane ekleyelim:

1
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2
    xmlns:tools="http://schemas.android.com/tools"
3
    android:layout_width="match_parent"
4
    android:layout_height="match_parent"
5
    android:paddingBottom="@dimen/activity_vertical_margin"
6
    android:paddingLeft="@dimen/activity_horizontal_margin"
7
    android:paddingRight="@dimen/activity_horizontal_margin"
8
    android:paddingTop="@dimen/activity_vertical_margin"
9
    android:background="#000000"
10
    tools:context=".MainActivity" >
11
12
    <VideoView
13
        android:id="@+id/myVideo"
14
        android:layout_width="fill_parent"
15
        android:layout_height="fill_parent"
16
        android:layout_centerInParent="true" />
17
        
18
</RelativeLayout>

İsterseniz ana düzeni kendi uygulamanıza uyacak şekilde düzenleyin. VideoView örneğine daha sonra tekrar ulaşabilmemiz bir id niteliği veriyoruz. Kendi tasarımınıza göre diğer düzen özelliklerini değiştirmeniz gerekebilir

2. Adım

Şimdi kodda VideoView örneğine(instance) bir referans alalım. Uygulamanızın ana Activity sınıfını açın ve aşağıdaki destek dosyalarını ekleyin:

1
import android.net.Uri;
2
import android.widget.MediaController;
3
import android.widget.VideoView;

Activity sınıfınız, içerik görünümünün ayarlandığı bir onCreate yöntemi zaten içermelidir:

1
@Override
2
protected void onCreate(Bundle savedInstanceState) {
3
  	super.onCreate(savedInstanceState);
4
		setContentView(R.layout.activity_main);
5
}

setContentView satırından sonra, XML düzeninde ayarladığımız id'yi kullanarak VideoView örneğine aşağıdaki gibi bir referans alalım:

1
VideoView vidView = (VideoView)findViewById(R.id.myVideo);

3. Video Dosyasının Akıtılması

1. Adım

Artık uygulamaya bir video dosyası akıtabiliriz. Bitiş noktası için URI'ı şu şekilde hazırlayın:

1
String vidAddress = "https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4";
2
Uri vidUri = Uri.parse(vidAddress);

Akıtma yapmak istediğiniz video dosyası için elbette uzaktaki bir adresi kullanmanız gerekecektir. Buradaki örnek, İnternet Arşivinde bulunan genel kullanıma açık bir video dosyasıdır. VideoView nesnesine iletebilmek için  adres string(dize)'ini URI olarak ayrıştırırız.

1
vidView.setVideoURI(vidUri);

Şimdi oynatmaya başlayabilirsiniz.

1
vidView.start();

Android işletim sistemi bir dizi video ve medya formatını desteklemektedir; her cihaz bunlarla beraber genellikle ek formatlarlarda desteklemektedir.

Geliştirici Kılavuzunda görebileceğiniz gibi desteklenen video dosya türleri, kullanılan türe ve kullanıcının hangi platform düzeyinde yüklediğine bağlı olarak 3GP, MP4, WEBM ve MKV'yi içerir.

Ses dosyası formatlarını olarakda standart olarak MP3, MID, OGG ve WAV desteği vardır. RTSP, HTTP ve HTTPS (Android 3.1'den) üzerinden Android'de medya akışını gerçekleştirebilirsiniz.

4. Oynatım Kontrollerinin Eklenmesi

1. Adım

Video oynatma işlemini gerçekleştirdik, ancak kullanıcı genel olarak alışık olduğu gibi bunu kontrol etmeyi isteyecektir. Yine, Android platformu MediaController sınıfı aracılığıyla bu bilindik etkileşim için kaynaklar sağlar.

Activity sınıfının onCreate yönteminde, VideoView'de start'ı çağırdığımız satırdan önce, sınıfın bir örneğini oluşturun:

1
MediaController vidControl = new MediaController(this);

Ardından, VideoView örneğini bağlantı noktası olarak kullanacak şekilde ayarlayın:

1
vidControl.setAnchorView(vidView);

Sonra onu VideoView nesnesinin medya denetleyicisi olarak ayarlayın:

1
vidView.setMediaController(vidControl);

Şimdi uygulamayı çalıştırdığınızda, kullanıcı hızlı ileri ve geri sarma düğmeleri, oynat/duraklat düğmesi ve arama çubuğu kontrolü de dahil olmak üzere akan videonun oynatımını kontrol edebilecektir.

Arama çubuğunun sağinda medya dosyasının uzunluğu ve solunda şu andaki oynatma konumu bulunacaktır. Dosyadaki bir konuma atlamak için arama çubuğuna dokunmanın yanı sıra akış durumu kullanıcının YouTube veya benzeri sitelerden alışık olduğu şekilde gösterilir.

Uygulamayı çalıştırdığınızda göreceğiniz gibi varsayılan davranış kontrollerin bir kaç saniye sonra kaybolması ve kullanıcı ekrana dokunduğunda tekrar görünmesidir. MediaController nesnesinin davranışını çeşitli şekillerde değiştirebiliriz. Bunun bir örneği için Android için müzik çalar uygulaması oluşturma serisine bakınız. Uygulamanızın davranışını yapılandırmak için çeşitli dinleyiciler(listeners) ayarlayarak medya oynatımını dahada geliştirebilirsiniz.

5. MediaPlayer Kullanımı

1. Adım

Bitirmeden önce, müzik çalar serisini oluştururken kullandığımız için MediaPlayer sınıfını kullanarak video akışı için alternatif bir yol izleyelim. Surface view(Yüzey görünümü) kullanarak, video'da dahil olmak üzere, bir medyayı MediaPlayer nesnesine akıtabilirsiniz. Örneğin, aşağıdaki düzeni kullanabilirsiniz:

1
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2
    xmlns:tools="http://schemas.android.com/tools"
3
    android:layout_width="match_parent"
4
    android:layout_height="match_parent"
5
    android:background="#000000"
6
    android:paddingBottom="@dimen/activity_vertical_margin"
7
    android:paddingLeft="@dimen/activity_horizontal_margin"
8
    android:paddingRight="@dimen/activity_horizontal_margin"
9
    android:paddingTop="@dimen/activity_vertical_margin"
10
    tools:context=".MainActivity" >
11
12
    <SurfaceView
13
        android:id="@+id/surfView"
14
        android:layout_width="fill_parent"
15
        android:layout_height="fill_parent" />
16
17
</RelativeLayout>

Activity sınıfının uygulanmasında SurfaceView'e atıfta bulunacağız.

2. Adım

Activity sınıfınızda aşağıdaki arabirimleri ekleyin:

1
public class MainActivity extends Activity implements SurfaceHolder.Callback, OnPreparedListener

IDE'niz bu uygulanmamış yöntemleri eklemenizi isteyecektir.

1
@Override
2
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
3
	// TODO Auto-generated method stub

4
}
5
6
@Override
7
public void surfaceCreated(SurfaceHolder arg0) {
8
//setup

9
}
10
11
@Override
12
public void surfaceDestroyed(SurfaceHolder arg0) {
13
	// TODO Auto-generated method stub

14
}
15
16
@Override
17
public void onPrepared(MediaPlayer mp) {
18
//start playback

19
}

surfaceCreated ve onPrepared yöntemlerine eklemeler yapacağız.

3. Adım

Oynatmayı uygulamak için sınıfa aşağıdaki örnek değişkenlerini ekleyin:

1
private MediaPlayer mediaPlayer;
2
private SurfaceHolder vidHolder;
3
private SurfaceView vidSurface;
4
String vidAddress = "https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4";

Bu değişkenleri Activity'in onCreate yönteminde,   düzene eklediğiniz SurfaceView nesnesini kullanarak başlatabilirsiniz:

1
vidSurface = (SurfaceView) findViewById(R.id.surfView);
2
vidHolder = vidSurface.getHolder();
3
vidHolder.addCallback(this);

4. Adım

surfaceCreated yönteminde, medya oynatma kaynaklarınızı ayarlayın:

1
try {
2
	mediaPlayer = new MediaPlayer();
3
	mediaPlayer.setDisplay(vidHolder);
4
	mediaPlayer.setDataSource(vidAddress);
5
	mediaPlayer.prepare();
6
	mediaPlayer.setOnPreparedListener(this);
7
	mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
8
} 
9
catch(Exception e){
10
	e.printStackTrace();
11
}

Son olarak, onPrepared yönteminde oynatmayı başlatın:

1
mediaPlayer.start();

Uygulamanızı çalıştırdığınızda, videonuz MediaPlayer örneğinde oynamalıdır.

Sonuç

Bu yazıda VideoView ve MediaPlayer sınıflarını kullanarak Android'de video akışının temellerini açıkladık. Örnek olarak oluşturduğumuz müzik çalar uygulamasına video veya akış medyası desteği ekleyerek burada oluşturduğumuz koda pek çok yenilik ekleyebilirsiniz. Android ile alakalı YouTube Android Player API'ı gibi kaynaklarada bakmak isteyebilirsiniz.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.