Media3 / ExoPlayer في Kotlin: دليل شامل مع أمثلة
1. ما هي Media3 ولماذا نستخدمها؟
Media3 (المعروفة سابقًا باسم ExoPlayer) هي مكتبة حديثة وقوية ومرنة لتشغيل الصوت والفيديو على منصة Android، تم تطويرها بواسطة Google. وهي الخليفة للمشغل القديم MediaPlayer من Android SDK، وتوفر وظائف أوسع بكثير، وأداء أفضل، وتحكمًا كاملاً في عملية التشغيل.
لماذا نحتاج إلى Media3 / ExoPlayer؟ على عكس MediaPlayer القياسي الذي يناسب المهام البسيطة فقط، يمنح ExoPlayer المطور تحكمًا كاملاً في سلسلة معالجة الوسائط. يدعم العديد من التنسيقات (DASH, HLS, SmoothStreaming, MP4, MP3, WebM وغيرها)، والتبديل التكيفي لمعدل البت (ABR)، وتخصيص العرض، والعمل مع الترجمة (بما في ذلك WebVTT, TTML)، وحماية DRM (Widevine, PlayReady) وغيرها الكثير. المكتبة قيد التطوير النشط ويتم تحسينها باستمرار، وتُستخدم في تطبيقات مثل YouTube وGoogle Photos والعديد من الخدمات الشهيرة الأخرى.
بالنسبة لمطوري Kotlin، تُعد Media3 المعيار الفعلي لبناء أي تطبيقات وسائط: من مشغل موسيقى بسيط إلى مشغل فيديو معقد مع البث التكيفي ودعم DRM. تتيح لك كتابة كود نظيف وقابل للتعديل والاختبار، مع تحكم كامل في دورة حياة التشغيل.
2. التثبيت
Media3 هي مكتبة لنظام Android، لذا يتم تثبيتها عبر نظام بناء Gradle. أضف التبعيات التالية إلى ملف build.gradle.kts (أو build.gradle) الخاص بوحدة app الخاصة بك:
// build.gradle.kts (Module :app)
dependencies {
// المكتبة الأساسية لـ Media3 (إلزامية)
implementation("androidx.media3:media3-exoplayer:1.4.1")
// مكونات واجهة المستخدم (PlayerView, PlayerControlView إلخ)
implementation("androidx.media3:media3-ui:1.4.1")
// للعمل مع HLS (HTTP Live Streaming)
implementation("androidx.media3:media3-exoplayer-hls:1.4.1")
// للعمل مع DASH (Dynamic Adaptive Streaming over HTTP)
implementation("androidx.media3:media3-exoplayer-dash:1.4.1")
// للعمل مع SmoothStreaming
implementation("androidx.media3:media3-exoplayer-rtsp:1.4.1")
// للعمل مع الترجمة
implementation("androidx.media3:media3-exoplayer-ima:1.4.1")
// للعمل مع DRM (Widevine)
implementation("androidx.media3:media3-exoplayer-drm:1.4.1")
// للعمل مع الجلسات (MediaSession) — إلزامي للتكامل مع عناصر التحكم النظامية
implementation("androidx.media3:media3-session:1.4.1")
// للعمل مع مصادر بيانات مخصصة (مثل التخزين المؤقت)
implementation("androidx.media3:media3-datasource:1.4.1")
// للعمل مع برامج ترميز مخصصة (مثل FFmpeg)
implementation("androidx.media3:media3-decoder:1.4.1")
// للعمل مع تأثيرات مخصصة (مثل تغيير السرعة)
implementation("androidx.media3:media3-effect:1.4.1")
// للعمل مع تحويلات مخصصة (مثل قص الفيديو)
implementation("androidx.media3:media3-transformer:1.4.1")
}
ملاحظة مهمة: قد تتغير الإصدارات. يمكنك دائمًا العثور على أحدث إصدار على صفحة الإصدارات الرسمية.
بعد إضافة التبعيات، قم بمزامنة Gradle (Sync Now) في Android Studio.
3. البداية السريعة — مثال عملي بسيط
لنقم بإنشاء مشغل فيديو بسيط يقوم بتشغيل فيديو من الإنترنت. سنحتاج إلى PlayerView في تخطيط XML وكود في Activity/Fragment.
الخطوة 1: التخطيط (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="htt