ProHoster > بلوق > أخبار الإنترنت > وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)
وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)
المقدمة قصيرة: أريد التحدث عن مشغل YouTube عبر الإنترنت لنظام Android من خلال قوائم التشغيل والقنوات والتوصيات المحلية.
مقدمة موسعة:
منذ بعض الوقت واجهت نفس المشكلة تمامًا مثل مؤلف تطبيق رائع القائمة البيضاء للقناة، وحددت بنفسي نفس الموقف تجاهها تمامًا: أريد أن أكون قادرًا على إعطاء الطفل جهازًا لوحيًا أو هاتفًا ذكيًا به رسوم متحركة من وقت لآخر ، لكنني لست راضيًا على الإطلاق عن المكان ، بعد نقرتين أو ثلاث نقرات ، قائمة التوصيات تقود الطفل في التطبيقات القياسية - عملاء YouTube.
لسوء الحظ ، بعد تثبيت تطبيق Channel Whitelist ، كان يحتوي بالفعل على عيب آخر أكثر تعقيدًا ، ولكنه لا يزال قاتلاً - بدت لي NIH (والأهم من ذلك لابني) أن واجهته غير مريحة للغاية ، خاصة بعد عادة استخدام YouTube Kids لاعب.
بشكل عام ، لقد نضجت بعد مرور بعض الوقت لأقوم بالتطبيق الخاص بي. بعد مرور بعض الوقت ، أصبح من الممكن وضع علامة على الإصدار الأول.
الميزات الرئيسية:
أضف القنوات وقوائم التشغيل المفضلة لديك - سيتم حفظها وفهرستها في قاعدة البيانات المحلية
قم بإيقاف تشغيل مقاطع الفيديو الإضافية داخل قوائم التشغيل المضافة إذا لم تكن بحاجة إليها
يتم إنشاء قائمة التوصيات بشكل عشوائي فقط من القنوات وقوائم التشغيل المضافة إلى التطبيق
فيما يلي نظرة عامة على الميزات الرئيسية بمزيد من التفصيل ، بالإضافة إلى بعض التفاصيل الفنية حول كيفية تشغيل مقاطع فيديو YouTube في تطبيق Android الخاص بك دون استخدام Google APIs وأغلفة الويب.
على الشاشة الرئيسية وشاشة المشغل: توصيات عشوائية من قنوات غير عشوائية
البحث الفوري في قاعدة البيانات المحلية
=>
أضف قناة جديدة أو قائمة تشغيل
ابحث بالاسم على الإنترنت أو أدخل عنوانًا معروفًا. يتم حفظ قائمة مقاطع الفيديو الخاصة بالقناة أو قائمة التشغيل في قاعدة بيانات محلية ، ولا يتم تخزين الرموز مؤقتًا.
قائمة تشغيل ديناميكية - تشغيل نتائج البحث
=>
في التوصيات الموجودة أسفل الفيديو ، لن يكون هناك سوى مقاطع الفيديو التي تُرضي استعلام البحث.
وبالمثل ، إذا فتحت مقطع فيديو من إعدادات قائمة التشغيل ، فستظهر فقط مقاطع الفيديو من قائمة التشغيل نفسها في قائمة التوصيات.
يمكن إيقاف تشغيل قوائم التشغيل والقنوات مؤقتًا وتشغيلها مرة أخرى
يرجى ملاحظة ما يلي: ستختفي مقاطع الفيديو من قائمة التشغيل المعطلة أيضًا من نتائج البحث وسجل التصفح ومن قائمة المفضلة. لكن لا تقلق ، سيظهرون هناك مرة أخرى فور إعادة تشغيل قائمة التشغيل مرة أخرى.
فيديو القائمة السوداء
لن يظهر الفيديو المحظور في التوصيات ، وسيختفي في نتائج البحث من قائمة المفضلة ومن سجل المشاهدة. سيظل الفيديو مرئيًا في إعدادات قائمة التشغيل.
عرض القائمة السوداء وإعادة تمكين العناصر المحظورة عن طريق الخطأ: الإعدادات> قائمة الرأس> القائمة السوداء
مقاطع الفيديو المفضلة وسجل العرض
يتم تمييز مقاطع الفيديو المفضلة على شاشة المشغل بعلامة النجمة في الزاوية اليمنى العليا.
قوائم السياق في عنوان الشاشة والنقر لفترة طويلة في المعارض والقوائم
انسخ اسم أو عنوان مقطع فيديو أو قائمة تشغيل في شاشة المشاهدة أو أي قائمة.
بداية سريعة - أضف القنوات وقوائم التشغيل الموصى بها
=>
سيبدو التطبيق فورًا مثل لقطات الشاشة أعلاه.
يمكن إيقاف تشغيل القنوات وقوائم التشغيل غير الضرورية أو حذفها في الإعدادات.
ليس على Googleplay ولن يكون في المستقبل القريب (تحظر Google التطبيقات التي ، تتجاوز واجهة برمجة التطبيقات ، تحلل موقعها ، بما في ذلك القائمة البيضاء للقناة المذكورة أعلاه أو مشغل NewPipe)
ضع في اعتبارك أن التبديل بين الإصدارات المختلفة من مصادر مختلفة على نفس الجهاز لن يعمل بسبب التوقيعات المختلفة لملف apk ، قبل تثبيت الإصدار من مصدر جديد ، سيتعين عليك أولاً حذف الإصدار المثبت مع البيانات - ذاكرة التخزين المؤقت لقائمة التشغيل وسجل التصفح (أو اكتشف كيفية نقل هذه البيانات).
تفاصيل تقنية
لا يتطلب حساب Google / YouTube ، فقط الإنترنت مطلوب ، ويستخدم المكتبات:
سؤال: هل تجريف المواقع بدون إذن (أو مع حظر صريح) من المؤلفين قانوني بشكل عام؟ تقوم Google بإزالة التطبيقات من Google Play، والتي لا تستخدم API الخاصة بهم ، ولكن تحلل مواقعهم ، لأن. ينتهكون اتفاقية المستخدم الخاصة بهم. الإجابة: بالتأكيد ، قانوني ، الأمر متروك لك لتحديد الأداة التي تستخدمها لقراءة المعلومات العامة. بالإضافة إلى: وقننت المحكمة الأمريكية كشط موقع الويب تمامًا ومنعته من التعرض للعرقلة الفنيةلكن قد يكون لغول رأي مختلف ، فأنا شخصياً لا أرغب في الذهاب إلى محكمة أمريكية لإقناعهم.
بعض التعليمات البرمجية
مكتبة NewPipeExtractor - مشروع مساعد اللاعب NewPipe، يسمح لك بتنزيل قائمة مقاطع الفيديو للقناة أو قائمة التشغيل المحددة ، وتنزيل معلومات مفصلة حول مقطع فيديو مشهور (ما هو مرئي على صفحة الويب الخاصة بالفيديو) ، والحصول على عنوان أيقونة الفيديو ، وكذلك الحصول على عنوان دفق الفيديو.
رمز تحميل قائمة التشغيل مرهق بعض الشيء ، لذا لن أحضره هنا ، لأولئك المهتمين - انظر إلى المصدر ، إنه فصل دراسي في الأساس ContentLoader.
دعونا نرى كيفية الحصول على عنوان دفق الفيديو من عنوان صفحة الفيديو العامة وتشغيله في المشغل.
اللاعب سوف إكسوبلاير من Google نفسها. هذا ليس غلاف ويب على YouTube ، ولكنه مشغل مضمّن حقيقي لتشغيل أي مقاطع فيديو ، وهو مرن للغاية وقابل للتخصيص. بما في ذلك يعرف كيفية تشغيل دفق الفيديو من يوتيوب ، إذا قمت بتحديد العنوان الصحيح لها. لقد تلقينا للتو عنوان البث ، لذلك دعونا نرى كيفية إرساله إلى المشغل.
لن نأخذ في الاعتبار جميع الفروق الدقيقة لوضع مكون المشغل على شاشة التطبيق (يمكنك رؤيته في الأمثلة الموجودة على موقع الويب الخاص بالمشروع أو في الكود) ، سننظر فقط في كيفية بدء تشغيل مقاطع الفيديو من YouTube في المشغل في العنوان الذي تم الحصول عليه أعلاه:
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);
}
}
مشاكل معروفة
لن تقوم بتشغيل مقاطع الفيديو ذات القيود العمرية التي تتطلب تسجيل الدخول إلى حساب Google / YouTube
نصيحة: أضف مقاطع الفيديو هذه إلى القائمة السوداء أو اطلب من مؤلف الفيديو إزالة التقييد الذي تم تعيينه عن طريق الخطأ.
لن يتم تشغيل بعض مقاطع فيديو البث التي تعرض الخدمة لها طولًا صفريًا (بالنسبة لمقاطع الفيديو هذه ، يتم تمييز المدة في القوائم والمعرض على أنها "[dur undef]")
إذا صادفت مقطع فيديو عام لا يتطلب تسجيل دخول ، يتم تشغيله في المتصفح ، ولكن لا يتم تشغيله في المشغل ، فأرسل تقرير خطأ (هذا ممكن تمامًا ، لقد تم إصلاح المشكلة بالفعل في الإصدار الجديد NewPipeExtractor وستحتاج فقط إلى تحديث التجميع بهذا الإصدار ، مثلا).
يمكن أن تتباطأ الواجهة مع اتصال إنترنت بطيء (ولكن لم يتم إيقاف تشغيله)
ونتيجة لذلك،
انتقل الابن من جهاز لوحي إلى تلفزيون ذكي من سامسونج لا يمكنه تشغيل تطبيقات Android. لذلك ، فإن أفضل رقابة أبوية لا تزال شخصية.
لكن تبين أن التطبيق كان مناسبًا بدرجة كافية بالنسبة لي لبدء استخدامه بنفسي. كان الانطباع الأول من إصدارات العمل المبكرة هو أنني دخلت إلى عالم آخر. يتم تنزيل كل المحتوى من اليوتيوب ، ولكن هذا لم يعد يوتيوب ، بل شيء آخر ، آمن ومسيطر عليه ، وكأنك أخذت حريشًا من عينك ووضعته في وعاء زجاجي. والأمر كله يتعلق بالتوصيات.