Medya Oynatıcı'yı kullanmaya başlama

Bu belgede, Medya Oynatıcı ile çalışmadan önce bilmeniz gereken temel kavramlar tanıtılmaktadır.

Ses ve video dersleri

Android çerçevesinde ses ve video oynatan sınıflar şunlardır:

  • MediaPlayer: Bu sınıf, ses ve video oynatma için kullanılan birincil API'dir.
  • AudioManager: Bu sınıf, bir cihazdaki ses kaynaklarını ve ses çıkışını yönetir.

Manifest beyanları

MediaPlayer'ı kullanarak uygulamanızda geliştirme yapmaya başlamadan önce manifest dosyanızda ilgili özelliklerin kullanımına izin veren uygun bildirimlerin bulunduğundan emin olun.

  • İnternet İzni: Ağ tabanlı içerikleri yayınlamak için MediaPlayer'ı kullanıyorsanız uygulamanızın ağ erişimi istemesi gerekir.

    <uses-permission android:name="android.permission.INTERNET" />
    
  • Uyanık kalma kilidi izni: Oynatıcı uygulamanızın ekranın kararmasını veya işlemcinin uyku moduna girmesini engellemesi ya da MediaPlayer.setScreenOnWhilePlaying(boolean) veya MediaPlayer.setWakeMode(android.content.Context, int) yöntemlerini kullanması gerekiyorsa bu izni istemeniz gerekir.

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

MediaPlayer sınıfını kullanma

MediaPlayer sınıfı, medya çerçevesinin önemli bir bileşenidir. Bu sınıfın bir nesnesi, minimum kurulumla hem ses hem de video getirebilir, kodunu çözebilir ve oynatabilir. MediaPlayer aşağıdakiler de dahil olmak üzere çeşitli medya kaynaklarını destekler:

  • Yerel kaynaklar
  • İçerik Çözücü'den alabileceğiniz gibi dahili URI'ler
  • Harici URL'ler (yayın)

Android'in desteklediği medya biçimlerinin listesi için Desteklenen Medya Biçimleri sayfasına bakın.

Ses kaynaklarıyla çalışma örnekleri

Yerel ham kaynak olarak kullanılabilen (uygulamanızın res/raw/ dizinine kaydedilmiş) sesleri çalma örneğini aşağıda bulabilirsiniz:

Kotlin

var mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1)
mediaPlayer.start() // no need to call prepare(); create() does that for you

Java

MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you

Bu durumda "işlenmemiş" kaynak, sistemin belirli bir şekilde ayrıştırmaya çalışmadığı bir dosyadır. Ancak bu kaynağın içeriği ham ses olmamalıdır. Desteklenen biçimlerden birinde doğru şekilde kodlanmış ve biçimlendirilmiş bir medya dosyası olmalıdır.

Aşağıda, sistemde yerel olarak bulunan bir URI'den (örneğin, bir Content Resolver aracılığıyla edindiğiniz) nasıl oynayabileceğiniz açıklanmaktadır:

Kotlin

val myUri: Uri = .... // initialize Uri here
val mediaPlayer = MediaPlayer().apply {
    setAudioAttributes(
        AudioAttributes.Builder()
            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
            .setUsage(AudioAttributes.USAGE_MEDIA)
            .build()
    )
    setDataSource(applicationContext, myUri)
    prepare()
    start()
}

Java

Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(
    new AudioAttributes.Builder()
        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
        .setUsage(AudioAttributes.USAGE_MEDIA)
        .build()
);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();

HTTP akışı kullanılarak uzak bir URL'den oynatma işlemi şu şekilde görünür:

Kotlin

val url = "http://........" // your URL here
val mediaPlayer = MediaPlayer().apply {
    setAudioAttributes(
        AudioAttributes.Builder()
            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
            .setUsage(AudioAttributes.USAGE_MEDIA)
            .build()
    )
    setDataSource(url)
    prepare() // might take long! (for buffering, etc)
    start()
}

Java

String url = "http://........"; // your URL here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(
    new AudioAttributes.Builder()
        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
        .setUsage(AudioAttributes.USAGE_MEDIA)
        .build()
);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.start();

Performansı artırmak için eşzamansız hazırlamayı kullanma

MediaPlayer özelliğini kullanırken performansı göz önünde bulundurun. Örneğin, prepare() işlevi, medya verilerinin getirilmesini ve kodunun çözülmesini gerektirebileceğinden uzun sürebilir. Bu nedenle, yürütülmesi uzun zaman alabilecek diğer yöntemler gibi, uygulamanızın kullanıcı arayüzü iş parçacığından asla çağırmayın. Bunu yapmak, yöntem döndürülene kadar kullanıcı arayüzünün yanıt vermeyi durdurmasına neden olur. Bu durum, kötü bir kullanıcı deneyimidir ve ANR (Uygulama Yanıt Vermiyor) hatasına neden olabilir.

Kullanıcı arayüzü iş parçacığınızın askıya alınmasını önlemek için MediaPlayer öğesini hazırlamak üzere başka bir iş parçacığı oluşturun ve işlem tamamlandığında ana iş parçacığını bilgilendirin. Çerçeve, bu görevi yerine getirmek için prepareAsync() yöntemini kullanmanın kolay bir yolunu sunar. Bu yöntem, medyayı arka planda hazırlamaya başlar ve hemen geri döner. Medya hazırlanma işlemi tamamlandığında, setOnPreparedListener() üzerinden yapılandırılan MediaPlayer.OnPreparedListener onPrepared() yöntemi çağrılır.

Daha fazla bilgi

Jetpack Media3, uygulamanızda medya oynatma için önerilen çözümdür. Daha fazla bilgi edinin.

Bu sayfalarda ses ve video kaydetme, depolama ve oynatma ile ilgili konular ele alınır: