Bu dokümanda, Media Player ile çalışmaya başlamadan ö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 oynatmak için birincil API'dir.AudioManager
: Bu sınıf, cihazdaki ses kaynaklarını ve ses çıkışını yönetir.
Manifest beyanları
MediaPlayer'ı kullanarak uygulamanızı geliştirmeye başlamadan önce, manifest dosyanızda ilgili özelliklerin kullanımına izin verecek uygun beyanların bulunduğundan emin olun.
İnternet İzni: Ağ tabanlı içerik 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 gerekiyorsa ya da
MediaPlayer.setScreenOnWhilePlaying(boolean)
veyaMediaPlayer.setWakeMode(android.content.Context, int)
yöntemlerini kullanıyorsa 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ıftaki bir nesne, minimum kurulumla hem ses hem de videoyu alabilir, kodlarını çözebilir ve oynatabilir. MediaPlayer
aşağıdakiler dahil olmak üzere çeşitli medya kaynaklarını destekler:
- Yerel kaynaklar
- İçerik çözücüden alabileceğiniz gibi dahili URI'ler
- Harici URL'ler (akış)
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/
dizininde kayıtlı) seslerin nasıl çalınacağına dair bir örnek aşağıda verilmiştir:
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 "ham" 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.
Sistemde yerel olarak bulunan bir URI'den (ör. Content Resolver aracılığıyla edindiğiniz) içerik oynatmak için:
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 aktarımı kullanılarak uzak bir URL'den oynatma işlemi aşağıdaki gibi 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ırlığı kullanma
MediaPlayer
'ı kullanırken performansı göz önünde bulundurun. Örneğin, prepare()
adresine yapılan çağrının yürütülmesi, medya verilerinin getirilmesi ve kodunun çözülmesini içerebileceğinden uzun sürebilir. Bu nedenle, yürütülmesi uzun zaman alabilen tüm yöntemler gibi bu yöntemi hiçbir zaman uygulamanızın kullanıcı arayüzü iş parçacığında çağırmayın. Bu işlem, yöntem döndürülene kadar kullanıcı arayüzünün yanıt vermeyi durdurmasına neden olur. Bu, 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 takılmasını önlemek için MediaPlayer
'yi hazırlamak üzere başka bir iş parçacığı oluşturun ve iş bittiğinde ana iş parçacığına bildirim gönderin. Çerçeve, bu görevi gerçekleştirmek için prepareAsync()
yöntemini kullanmanın uygun bir yolunu sağlar. Bu yöntem, medyayı arka planda hazırlamaya başlar ve hemen döndürülür. Medya hazırlandığında, setOnPreparedListener()
aracılığıyla yapılandırılmış MediaPlayer.OnPreparedListener
öğesinin onPrepared()
yöntemi çağrılır.
Daha fazla bilgi
Uygulamanızda medya oynatma için önerilen çözüm Jetpack Media3'tür. Bu konu hakkında daha fazla bilgi edinin.
Bu sayfalarda ses ve video kaydetme, depolama ve oynatma ile ilgili konular ele alınmaktadır: