وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

المقدمة قصيرة: أريد التحدث عن مشغل YouTube عبر الإنترنت لنظام Android من خلال قوائم التشغيل والقنوات والتوصيات المحلية.

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

مقدمة موسعة:
منذ بعض الوقت واجهت نفس المشكلة تمامًا مثل مؤلف تطبيق رائع القائمة البيضاء للقناة، وحددت بنفسي نفس الموقف تجاهها تمامًا: أريد أن أكون قادرًا على إعطاء الطفل جهازًا لوحيًا أو هاتفًا ذكيًا به رسوم متحركة من وقت لآخر ، لكنني لست راضيًا على الإطلاق عن المكان ، بعد نقرتين أو ثلاث نقرات ، قائمة التوصيات تقود الطفل في التطبيقات القياسية - عملاء YouTube.

لسوء الحظ ، بعد تثبيت تطبيق Channel Whitelist ، كان يحتوي بالفعل على عيب آخر أكثر تعقيدًا ، ولكنه لا يزال قاتلاً - بدت لي NIH (والأهم من ذلك لابني) أن واجهته غير مريحة للغاية ، خاصة بعد عادة استخدام YouTube Kids لاعب.

بشكل عام ، لقد نضجت بعد مرور بعض الوقت لأقوم بالتطبيق الخاص بي. بعد مرور بعض الوقت ، أصبح من الممكن وضع علامة على الإصدار الأول.

الميزات الرئيسية:

  • أضف القنوات وقوائم التشغيل المفضلة لديك - سيتم حفظها وفهرستها في قاعدة البيانات المحلية
  • قم بإيقاف تشغيل مقاطع الفيديو الإضافية داخل قوائم التشغيل المضافة إذا لم تكن بحاجة إليها
  • يتم إنشاء قائمة التوصيات بشكل عشوائي فقط من القنوات وقوائم التشغيل المضافة إلى التطبيق

المصادر مفتوحة ، رخصة GPLv3: https://github.com/sadr0b0t/yashlang/

فيما يلي نظرة عامة على الميزات الرئيسية بمزيد من التفصيل ، بالإضافة إلى بعض التفاصيل الفنية حول كيفية تشغيل مقاطع فيديو YouTube في تطبيق Android الخاص بك دون استخدام Google APIs وأغلفة الويب.

على الشاشة الرئيسية وشاشة المشغل: توصيات عشوائية من قنوات غير عشوائية

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

البحث الفوري في قاعدة البيانات المحلية

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) => وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

أضف قناة جديدة أو قائمة تشغيل

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

ابحث بالاسم على الإنترنت أو أدخل عنوانًا معروفًا. يتم حفظ قائمة مقاطع الفيديو الخاصة بالقناة أو قائمة التشغيل في قاعدة بيانات محلية ، ولا يتم تخزين الرموز مؤقتًا.

قائمة تشغيل ديناميكية - تشغيل نتائج البحث

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) => وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

في التوصيات الموجودة أسفل الفيديو ، لن يكون هناك سوى مقاطع الفيديو التي تُرضي استعلام البحث.

وبالمثل ، إذا فتحت مقطع فيديو من إعدادات قائمة التشغيل ، فستظهر فقط مقاطع الفيديو من قائمة التشغيل نفسها في قائمة التوصيات.

يمكن إيقاف تشغيل قوائم التشغيل والقنوات مؤقتًا وتشغيلها مرة أخرى

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

يرجى ملاحظة ما يلي: ستختفي مقاطع الفيديو من قائمة التشغيل المعطلة أيضًا من نتائج البحث وسجل التصفح ومن قائمة المفضلة. لكن لا تقلق ، سيظهرون هناك مرة أخرى فور إعادة تشغيل قائمة التشغيل مرة أخرى.

فيديو القائمة السوداء

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

لن يظهر الفيديو المحظور في التوصيات ، وسيختفي في نتائج البحث من قائمة المفضلة ومن سجل المشاهدة. سيظل الفيديو مرئيًا في إعدادات قائمة التشغيل.

عرض القائمة السوداء وإعادة تمكين العناصر المحظورة عن طريق الخطأ:
الإعدادات> قائمة الرأس> القائمة السوداء

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

مقاطع الفيديو المفضلة وسجل العرض

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

يتم تمييز مقاطع الفيديو المفضلة على شاشة المشغل بعلامة النجمة في الزاوية اليمنى العليا.

قوائم السياق في عنوان الشاشة والنقر لفترة طويلة في المعارض والقوائم

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

انسخ اسم أو عنوان مقطع فيديو أو قائمة تشغيل في شاشة المشاهدة أو أي قائمة.

بداية سريعة - أضف القنوات وقوائم التشغيل الموصى بها

وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟) => وفاة Koshchei في قائمة التوصيات (هل من الممكن جعل YouTube مريحًا وآمنًا؟)

سيبدو التطبيق فورًا مثل لقطات الشاشة أعلاه.

يمكن إيقاف تشغيل القنوات وقوائم التشغيل غير الضرورية أو حذفها في الإعدادات.

تركيب

صفحة المشروع: https://github.com/sadr0b0t/yashlang/
باللغة الإنجليزية: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
إطلاق: https://github.com/sadr0b0t/yashlang/releases

ضع في اعتبارك أن التبديل بين الإصدارات المختلفة من مصادر مختلفة على نفس الجهاز لن يعمل بسبب التوقيعات المختلفة لملف apk ، قبل تثبيت الإصدار من مصدر جديد ، سيتعين عليك أولاً حذف الإصدار المثبت مع البيانات - ذاكرة التخزين المؤقت لقائمة التشغيل وسجل التصفح (أو اكتشف كيفية نقل هذه البيانات).

تفاصيل تقنية

لا يتطلب حساب Google / YouTube ، فقط الإنترنت مطلوب ، ويستخدم المكتبات:

المصدر المفتوح ، ترخيص مجاني GPLv3.

سؤال: هل تجريف المواقع بدون إذن (أو مع حظر صريح) من المؤلفين قانوني بشكل عام؟ تقوم Google بإزالة التطبيقات من Google Play، والتي لا تستخدم API الخاصة بهم ، ولكن تحلل مواقعهم ، لأن. ينتهكون اتفاقية المستخدم الخاصة بهم.
الإجابة: بالتأكيد ، قانوني ، الأمر متروك لك لتحديد الأداة التي تستخدمها لقراءة المعلومات العامة. بالإضافة إلى: وقننت المحكمة الأمريكية كشط موقع الويب تمامًا ومنعته من التعرض للعرقلة الفنيةلكن قد يكون لغول رأي مختلف ، فأنا شخصياً لا أرغب في الذهاب إلى محكمة أمريكية لإقناعهم.

بعض التعليمات البرمجية

مكتبة NewPipeExtractor - مشروع مساعد اللاعب NewPipe، يسمح لك بتنزيل قائمة مقاطع الفيديو للقناة أو قائمة التشغيل المحددة ، وتنزيل معلومات مفصلة حول مقطع فيديو مشهور (ما هو مرئي على صفحة الويب الخاصة بالفيديو) ، والحصول على عنوان أيقونة الفيديو ، وكذلك الحصول على عنوان دفق الفيديو.

رمز تحميل قائمة التشغيل مرهق بعض الشيء ، لذا لن أحضره هنا ، لأولئك المهتمين - انظر إلى المصدر ، إنه فصل دراسي في الأساس ContentLoader.

دعونا نرى كيفية الحصول على عنوان دفق الفيديو من عنوان صفحة الفيديو العامة وتشغيله في المشغل.

قم بتوصيل المكتبة بـ
التطبيق / build.gradle

dependencies {
...
    // NewPipe: youtube parser
    // https://github.com/TeamNewPipe/NewPipeExtractor
    implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}

من الغريب أنه بعد ذلك لا يزال يتعذر استخدامه ، لأنه. ستشتكي الأمثلة من فئة Downloader المفقودة. يمكن نسخه إلى المشروع من دليل الاختبارات التلقائي NewPipeExtractor / مستخرج / src / test / java / org / schabi / newpipe / Downloader.java - يعمل مع الإصدار 0.17.4 (يبدو أن هذا الجزء قد أعيد بناؤه في إصدار أحدث من المكتبة ، ولكن لا يزال بحاجة إلى التحقق).

احصل على عنوان دفق الفيديو من عنوان صفحة الفيديو على موقع YouTube على الويب:

app / src / main / java / su / sadrobot / yashlang / controller / ContentLoader.java

    public String extractYtStreamUrl(final String ytVidUrl) throws ExtractionException, IOException {
        // https://github.com/TeamNewPipe/NewPipeExtractor/blob/dev/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractorDefaultTest.java
        NewPipe.init(Downloader.getInstance(), new Localization("GB", "en"));
        final YoutubeStreamExtractor extractor = (YoutubeStreamExtractor) YouTube
                .getStreamExtractor(ytVidUrl);
        extractor.fetchPage();
        final String streamUrl = extractor.getVideoStreams().size() > 0 ? extractor.getVideoStreams().get(0).getUrl() : null;
//        for (final VideoStream stream : extractor.getVideoStreams()) {
//            stream.getUrl();
//        }
        return streamUrl;
    }

يمكن أن يكون عنوان فيديو ytVidUrl هو العنوان العام لصفحة أي فيديو على موقع YouTube ، على سبيل المثال https://www.youtube.com/watch?v=pd2RlatmNRk

اللاعب سوف إكسوبلاير من Google نفسها. هذا ليس غلاف ويب على YouTube ، ولكنه مشغل مضمّن حقيقي لتشغيل أي مقاطع فيديو ، وهو مرن للغاية وقابل للتخصيص. بما في ذلك يعرف كيفية تشغيل دفق الفيديو من يوتيوب ، إذا قمت بتحديد العنوان الصحيح لها. لقد تلقينا للتو عنوان البث ، لذلك دعونا نرى كيفية إرساله إلى المشغل.

ربط المكتبة بالمشروع التطبيق / build.gradle:

dependencies {
...
    // google Exoplayer
    // https://github.com/google/ExoPlayer
    // https://exoplayer.dev/
    implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}

لن نأخذ في الاعتبار جميع الفروق الدقيقة لوضع مكون المشغل على شاشة التطبيق (يمكنك رؤيته في الأمثلة الموجودة على موقع الويب الخاص بالمشروع أو في الكود) ، سننظر فقط في كيفية بدء تشغيل مقاطع الفيديو من YouTube في المشغل في العنوان الذي تم الحصول عليه أعلاه:

app / src / main / java / su / sadrobot / yashlang / WatchVideoActivity.java

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

على سبيل المثال: إيليا موروميتس ، شركة Mosfilm Cinema Concern, سلسلة رسلان وليودميلا الأولى / رسلان وليودميلا فيلم 1 ، Mosfilm Cinema Concern

نصيحة: أضف مقاطع الفيديو هذه إلى القائمة السوداء أو اطلب من مؤلف الفيديو إزالة التقييد الذي تم تعيينه عن طريق الخطأ.

  • لن يتم تشغيل بعض مقاطع فيديو البث التي تعرض الخدمة لها طولًا صفريًا (بالنسبة لمقاطع الفيديو هذه ، يتم تمييز المدة في القوائم والمعرض على أنها "[dur undef]")

على سبيل المثال: انتظرها! جميع القضايا Soyuzmultfilm HD (رسوم متحركة للأطفال) ، كاريكاتير استوديو Soyuzmultfilm, أهم أفلام الكرتون Soyuzmultfilm ، استوديو الرسوم المتحركة Soyuzmultfilm

نصيحة: أضف مقاطع الفيديو هذه إلى القائمة السوداء.

  • قد لا يتم تضمين مقاطع الفيديو المتوفرة فقط من خلال الروابط المباشرة في قائمة التشغيل المحلية ، حتى إذا قمت بتنزيل جميع مقاطع الفيديو الخاصة بالمستخدم

على سبيل المثال: ترويض النار الحلقة 1 ، موسفيلم السينما

  • إذا صادفت مقطع فيديو عام لا يتطلب تسجيل دخول ، يتم تشغيله في المتصفح ، ولكن لا يتم تشغيله في المشغل ، فأرسل تقرير خطأ (هذا ممكن تمامًا ، لقد تم إصلاح المشكلة بالفعل في الإصدار الجديد NewPipeExtractor وستحتاج فقط إلى تحديث التجميع بهذا الإصدار ، مثلا).

  • يمكن أن تتباطأ الواجهة مع اتصال إنترنت بطيء (ولكن لم يتم إيقاف تشغيله)

ونتيجة لذلك،

انتقل الابن من جهاز لوحي إلى تلفزيون ذكي من سامسونج لا يمكنه تشغيل تطبيقات Android. لذلك ، فإن أفضل رقابة أبوية لا تزال شخصية.

لكن تبين أن التطبيق كان مناسبًا بدرجة كافية بالنسبة لي لبدء استخدامه بنفسي. كان الانطباع الأول من إصدارات العمل المبكرة هو أنني دخلت إلى عالم آخر. يتم تنزيل كل المحتوى من اليوتيوب ، ولكن هذا لم يعد يوتيوب ، بل شيء آخر ، آمن ومسيطر عليه ، وكأنك أخذت حريشًا من عينك ووضعته في وعاء زجاجي. والأمر كله يتعلق بالتوصيات.

المصدر: www.habr.com

إضافة تعليق