شرح كيفية عمل مشغل الفيديو باستخدام ExoPlayer
How to develop a video player using ExoPlayer

السلام عليكم ورحمة الله
اول درس على المدونة دى وان شاء الله مش هيكون الاخير
مش هعمل زى عادة العرب ونعيد اختراع العجلة وابدأ من الاول من اساسيات متكررة وبعد فترة ازهق واترك اساسيات مفادتش حد
عشان كده الدروس دى معظمها هتكون Advanced
على بركة الله :D
- لماذا ExoPlayer؟
- ExoPlayer هى مكتبة بتعملها compile بالتالي تقدر تحدد اي اصدار تستخدمه ، بتدعم عدد كبير جدا جدا من الصيغ ، سهل تعملها Customize وتعدل وتضيف عليها وبيدعم انظمة عالية زى Dash , HLS
لمعرفة اكتر عن الصيغ المتوافقة مع ExoPlayer قم بزيارة الرابط التالي
لمعرفة اكتر عن الصيغ المتوافقة مع ExoPlayer قم بزيارة الرابط التالي
- لو مهتم بعرض فيديوهات من اليوتيوب فقط استخدم youtube Api من الرابط التالي
نبدأ في الدرس
هنضيف الdependency بتاعت المكتبة في build.gradle app file
compile 'com.google.android.exoplayer:exoplayer:r2.4.2'
نضيف في الXml الresource بتاعها
<com.google.android.exoplayer2.ui.SimpleExoPlayerView
android:id="@+id/playerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
هنعمل reference من المشغل و نحددله الداتا سورس اللى هيشغل منها في صيغة Uri
لو هنفترض هنا ان الفيديو اللى هنشغله اللينك بتاعه مثلا ده ف متغير mVideoUrl
String mVideoUrl = "https://s3-us-west-2.amazonaws.com/askquran-media/video/Arabic_Efasy_001_001_007.mp4"; SimpleExoPlayerView playerView = (playerView) findViewById(R.id.playerView); playerView.requestFocus(); initializePlayer(Uri.parse(mVideoUrl));الان جزء مهم وهو انه اللى عملناه لحد الان هو الView مش المشغل نفسه
بنعمل متغير Global نسميه مثلا mExoPlayer
private SimpleExoPlayer mExoPlayer;
والان ميثود الinitialize لتحميل الداتا سورس الى المشغل
// Initialize the exoPlayer private void initializePlayer(Uri mediaUri) { if (mExoPlayer == null) { TrackSelector trackSelector = new DefaultTrackSelector(); LoadControl loadControl = new DefaultLoadControl(); mExoPlayer = ExoPlayerFactory.newSimpleInstance(getContext(), trackSelector, loadControl); binding.playerView.setPlayer(mExoPlayer); String userAgent = Util.getUserAgent(getContext(), ""); MediaSource mediaSource = new ExtractorMediaSource(mediaUri, new DefaultDataSourceFactory( getContext(), userAgent), new DefaultExtractorsFactory(), null, null); mExoPlayer.prepare(mediaSource); mExoPlayer.setPlayWhenReady(true); } }
اخر سطر وهو setPlayWhenReady لو عايز الفيديو يشتغل علطول اول ما يكون جزء من الفيديو جاهز وﻻ ﻻ
بالتالي اذا اردت تعمل Pause للفيديو في اي وقت بس نعمل
mExoPlayer.setPlayWhenReady(false);والان الفيديو اشتغل لكن لازم نعمل resources handling
بمعنى انه لما اليوزر يخرج من الابلكيشن لازم نوقف المشغل
بنعمل دالة اسمها releasePlayer ونستدعيها من onDestroy
private void releasePlayer() { if (mExoPlayer != null) { mExoPlayer.stop(); mExoPlayer.release(); mExoPlayer = null; } }وينصح ايضا بعمل ريليز للمشغل في onPause or onStop لانه لما يطلع اليوزر من الابلكيشن مش شرط ان onDestroy يتم تنفيذها التطبيق يفضل شغال في الbackground لحد ما الsystem يعمله destroy
فكده اليوزر هيسمع الصوت شغال حتى لما يطلع من الابلكيشن
- ممكن تsave الposition قبل ما تعمل release ولما يرجع تانى تعمل seekTo الSaved position بحيث هيكمل من اخر مرة كان واقف عندها قبل ما يخرج
و ف درس تاني هشرح طريقة سهل لعمل caching للفيديو لان لو خرجت ودخلت هيحمل تانى من الاول
انا معرفش الناس هتشوف الدرس ده امتى بس ان شاء الله يعجبكم لما تشوفوه :D
نسألكم الدعاء والتعليق والشير واللايك والمتابعة والاشتراك :D
إشترك بالنشرة البريدية
6 comments
اضف تعليقصراحة شرح اكتر من رائع. اللهم اجعله في ميزان حسناتك.
ردشكرا لك شرح جميل
ردكيف ممكن اضيف جودة الفيديو للمشغل ؟؟
رداعجبني الشرح.. شكرا
ردما اروعك
ردتحويل كودإخفاء محول الأكواد الإبتساماتإخفاء