توسيع تعارف:
ڪجهه عرصو اڳ مون کي بلڪل ساڳيو مسئلو پيش آيو جيئن هڪ شاندار ايپليڪيشن جو ليکڪ چينل وائيٽ لسٽ، ۽ پاڻ لاءِ پرعزم آهيان ان جي باري ۾ بلڪل ساڳيو رويو: مان چاهيان ٿو ته پنهنجي ٻار کي ٽيبليٽ يا اسمارٽ فون ڏيان وقت بوقت ڪارٽون، پر مان بلڪل خوش نه آهيان جتي، 2-3 ڪلڪن کان پوءِ، فهرست. معياري ايپليڪيشنن ۾ سفارشون - يوٽيوب ڪلائنٽ - ٻار کي وٺي ٿو.
بدقسمتي سان، چينل وائيٽلسٽ ايپليڪيشن کي انسٽال ڪرڻ کان پوء، هڪ ٻيو وڌيڪ پراسڪ، پر اڃا تائين موتمار نقص دريافت ڪيو ويو - NIH I (۽، سڀ کان اهم، منهنجو پٽ) ان جي انٽرفيس کي تمام آسان نه مليو، خاص طور تي YouTube Kids پليئر استعمال ڪرڻ جي عادت کان پوء.
عام طور تي، ڪجهه وقت کان پوء، مون کي پنهنجو پاڻ تي عمل ڪرڻ لاء تيار هو. ڪجهه وقت کان پوء، اهو ممڪن ٿيو ته پهرين رليز تي ٽيگ لڳائڻ.
اھڙا اھڙا
پنهنجا پسنديده چينل ۽ پبليڪيشن شامل ڪريو - اهي محفوظ ڪيا ويندا ۽ مقامي ڊيٽابيس ۾ ترتيب ڏنل
شامل ڪيل پبليڪيشنن ۾، غير ضروري وڊيوز کي بند ڪريو جيڪڏھن توھان کي انھن جي ضرورت نه آھي
سفارشن جي فهرست بي ترتيب سان ٺاهي وئي آهي صرف چينلز ۽ پلے لسٽس مان شامل ڪيل ايپليڪيشن ۾
اهو Google Play تي ناهي ۽ ويجهي مستقبل ۾ به نه هوندو (گوگل انهن ايپليڪيشنن تي پابندي لڳائي ٿو جيڪي API کي نظرانداز ڪن ٿيون ۽ انهن جي ويب سائيٽ کي پارس ڪن ٿيون، جن ۾ ذڪر ڪيل چينل وائيٽ لسٽ يا نيو پائپ پليئر شامل آهن)
مون کي اميد آهي ته اهو ڪجهه وقت کان پوء فهرست ۾ ظاهر ٿيندو F-Droid (اضافي جي درخواست منظور ٿيڻ لڳي، پر لڳ ڀڳ هڪ مهيني کان اڳتي نه وڌيو آهي) پر اڃا تائين نه
ياد رهي ته هڪ ئي ڊوائيس تي مختلف ذريعن کان مختلف ورزن جي وچ ۾ سوئچنگ apk فائل جي مختلف دستخطن جي ڪري ڪم نه ڪندي؛ نئين ماخذ کان ورجن کي انسٽال ڪرڻ کان پهريان، توهان کي پهريان ڊيٽا سان گڏ انسٽال ٿيل ورجن کي حذف ڪرڻو پوندو. پلے لسٽ ڪيش ۽ برائوزنگ جي تاريخ (يا ڄاڻو ته ڊيٽا ڪيئن منتقل ڪجي).
ٽيڪنيڪل تفصيل
گوگل/يوٽيوب اڪائونٽ جي ضرورت نه آهي، توهان کي صرف انٽرنيٽ جي ضرورت آهي، هيٺ ڏنل لائبريريون استعمال ڪري ٿو:
سوال: ڇا عام طور تي ويب سائيٽن کي اسڪريپ ڪرڻ قانوني آهي بغير اجازت (يا واضح پابندي سان) ليکڪن کان؟ گوگل گوگل پلي تان ايپس کي هٽائي ٿو، جيڪي پنهنجو API استعمال نٿا ڪن، پر انهن جي سائيٽن کي پارس ڪن ٿا، ڇاڪاڻ ته اهي انهن جي استعمال ڪندڙ معاهدي جي ڀڃڪڙي ڪن ٿا. جواب: يقينا، اهو قانوني آهي، اهو توهان تي آهي ته عوامي طور تي موجود معلومات پڙهڻ لاءِ ڪهڙو اوزار استعمال ڪجي. وڌيڪ: هڪ آمريڪي عدالت مڪمل طور تي ويب سائيٽ جي اسڪراپنگ کي قانوني قرار ڏنو آهي ۽ ان سان گڏ ٽيڪنيڪل مداخلت منع ڪئي آهي.پر گل جي راءِ مختلف ٿي سگهي ٿي؛ ذاتي طور تي، مون کي اڃا تائين اها خواهش ناهي ته ڪنهن آمريڪي عدالت ۾ وڃي کين قائل ڪريان.
ڪجهه ڪوڊ
لائبريري نئون پائپ ڪڍڻ وارو - پليئر سپورٽ پروجيڪٽ نئون پائپ، توهان کي اجازت ڏئي ٿو ته هڪ مخصوص چينل يا پلي لسٽ لاءِ وڊيوز جي فهرست ڊائون لوڊ ڪريو، مشهور وڊيو بابت تفصيلي معلومات ڊائون لوڊ ڪريو (جيڪي وڊيو جي ويب پيج تي نظر اچن ٿا)، وڊيو آئڪن جو پتو حاصل ڪريو، ۽ وڊيو جو پتو پڻ حاصل ڪريو. وهڪرو.
پلي لسٽ لوڊ ڪرڻ جو ڪوڊ ٿورڙو مشڪل آهي، ان ڪري مان ان کي هتي نه ڏيندس، دلچسپي رکندڙن لاءِ، سورس ڪوڊ تي هڪ نظر وجهو، اهو بنيادي طور هڪ ڪلاس آهي مواد لوڊ ڪندڙ.
اچو ته ڏسو ته ڪيئن حاصل ڪجي وڊيو اسٽريم جو پتو عوامي وڊيو صفحي جي ايڊريس مان ۽ ان کي پليئر ۾ ادا ڪريو.
رانديگر ڪندو Exo پليئر پاڻ گوگل کان. هي يوٽيوب تي ويب ريپر ناهي، پر ڪنهن به وڊيو کي هلائڻ لاءِ هڪ حقيقي ايمبيڊڊ پليئر آهي، ڪافي لچڪدار ۽ حسب ضرورت. اهو يوٽيوب تان وڊيو اسٽريم پڻ هلائي سگهي ٿو جيڪڏهن توهان ان کي صحيح پتو ڏيو ٿا. اسان کي صرف اسٽريم ايڊريس مليل آهي، سو اچو ته ڏسون ته ان کي پليئر کي ڪيئن موڪليو وڃي.
اسان پليئر جزو کي ايپليڪيشن اسڪرين تي رکڻ جي سڀني نونسن تي غور نه ڪنداسين (توهان پروجيڪٽ جي ويب سائيٽ يا ڪوڊ ۾ مثالن کي ڏسي سگهو ٿا)، اسان صرف اهو ڏسنداسين ته يوٽيوب کان وڊيو کي ڪيئن شروع ڪجي پليئر ۾. مٿي ڏنل ايڊريس:
private void playVideoStream(final String streamUrl, final long seekTo) {
if (streamUrl == null) {
// остановить проигрывание текущего ролика, если был загружен
videoPlayerView.getPlayer().stop(true);
} else {
// https://exoplayer.dev/
// https://github.com/google/ExoPlayer
final Uri mp4VideoUri = Uri.parse(streamUrl);
final MediaSource videoSource = new ProgressiveMediaSource.Factory(videoDataSourceFactory)
.createMediaSource(mp4VideoUri);
// Поставим на паузу старое видео, пока готовим новое
if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
// Если ставить на паузу здесь после того, как плеер встал на паузу сам, закончив
// играть видео, получим здесь второе событие STATE_ENDED, поэтому нам нужна здесь
// специальная проверка.
// При этом значение getPlayWhenReady() останется true, поэтому проверяем именно состояние.
// https://github.com/google/ExoPlayer/issues/2272
videoPlayerView.getPlayer().setPlayWhenReady(false);
}
// Prepare the player with the source.
((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);
// Укажем текущую позицию сразу при загрузке видео
// (в коментах что-то пишут что-то про датасорсы, которые поддерживают или не поддерживают
// переходы seek при загрузке, похоже, что это фигня - просто делаем seek сразу после загрузки)
// Exoplayer plays new Playlist from the beginning instead of provided position
// https://github.com/google/ExoPlayer/issues/4375
// How to load stream in the desired position? #2197
// https://github.com/google/ExoPlayer/issues/2197
// в этом месте нормлаьный duration еще не доступен, поэтому его не проверяем
//if(seekTo > 0 && seekTo < videoPlayerView.getPlayer().getDuration()) {
if (seekTo > 0) {
// на 5 секунд раньше
videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
}
videoPlayerView.getPlayer().setPlayWhenReady(true);
}
}
Issاتل مسئلا
عمر جي پابندين سان وڊيوز نه هلندا جيڪي توهان جي گوگل/يوٽيوب اڪائونٽ ۾ لاگ ان ٿيڻ گهرجن