مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

مقدمه کوتاه است: می‌خواهم درباره پخش‌کننده آنلاین YouTube برای اندروید با لیست‌های پخش، کانال‌ها و توصیه‌های محلی صحبت کنم.

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

مقدمه گسترده:
چند وقت پیش دقیقاً با همان مشکل نویسنده یک برنامه فوق العاده روبرو شدم لیست سفید کانالو دقیقاً همان نگرش را نسبت به آن برای خودم تعیین کردم: من می خواهم هر از گاهی یک تبلت یا تلفن هوشمند با کارتونی به فرزندم بدهم، اما اصلاً از جایی که پس از 2-3 کلیک، لیست را مشاهده می کنم، راضی نیستم. توصیه ها در برنامه های استاندارد - مشتریان YouTube - کودک را می گیرد.

متأسفانه، پس از نصب برنامه Channel Whitelist، یک نقص معمولی تر، اما همچنان کشنده دیگر کشف شد - NIH I (و مهمتر از همه، پسرم) رابط آن را بسیار راحت یافت، به خصوص پس از عادت به استفاده از پخش کننده YouTube Kids.

به طور کلی، پس از مدتی من آماده بودم تا پیاده سازی خود را انجام دهم. پس از مدتی امکان گذاشتن برچسب در اولین نسخه وجود داشت.

ویژگی های کلیدی:

  • کانال ها و لیست های پخش مورد علاقه خود را اضافه کنید - آنها در پایگاه داده محلی ذخیره و نمایه می شوند
  • در فهرست‌های پخش اضافه‌شده، اگر به ویدیوهای غیرضروری نیاز ندارید، آن‌ها را خاموش کنید
  • لیست توصیه ها فقط از کانال ها و لیست های پخش اضافه شده به برنامه به صورت تصادفی ایجاد می شود

منبع باز، مجوز GPLv3: https://github.com/sadr0b0t/yashlang/

در زیر مروری بر ویژگی‌های اصلی با جزئیات بیشتر، به‌علاوه برخی جزئیات فنی در مورد نحوه پخش ویدیوهای YouTube در برنامه Android خود بدون استفاده از Google API و بسته‌های وب ارائه شده است.

در صفحه اصلی و در صفحه پخش کننده: توصیه های تصادفی از کانال های غیر تصادفی

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

جستجوی فوری در پایگاه داده محلی

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) => مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

یک کانال یا لیست پخش جدید اضافه کنید

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

با نام آنلاین جستجو کنید یا یک آدرس شناخته شده وارد کنید. لیست ویدیوهای یک کانال یا لیست پخش در پایگاه داده محلی ذخیره می شود؛ نمادها در حافظه پنهان ذخیره نمی شوند.

لیست پخش پویا - نتایج جستجو را پخش کنید

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) => مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

در توصیه های ویدیویی فقط ویدیوهایی وجود خواهند داشت که عبارت جستجو را برآورده می کنند.

به همین ترتیب، اگر ویدیویی را از تنظیمات لیست پخش باز کنید، فقط ویدیوهای همان لیست پخش در لیست توصیه‌ها ظاهر می‌شوند.

لیست های پخش و کانال ها را می توان به طور موقت خاموش و دوباره روشن کرد

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

لطفاً توجه داشته باشید: ویدیوهای یک لیست پخش غیرفعال نیز از نتایج جستجو، سابقه مشاهده و از لیست علاقه مندی ها ناپدید می شوند. اما نگران نباشید، بلافاصله پس از روشن شدن مجدد لیست پخش، دوباره در آنجا ظاهر می شوند.

یک ویدیو به لیست سیاه اضافه کنید

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

یک ویدیوی مسدود شده در توصیه‌ها، در نتایج جستجو نمایش داده نمی‌شود و از فهرست موارد دلخواه و سابقه مشاهده ناپدید می‌شود. ویدیو همچنان در تنظیمات لیست پخش قابل مشاهده خواهد بود.

مشاهده لیست سیاه و فعال کردن مجدد موارد مسدود شده به اشتباه:
تنظیمات > منوی سرصفحه > لیست سیاه

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

فیلم های مورد علاقه و سابقه مشاهده

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

ویدیوهای مورد علاقه در صفحه پخش کننده با یک ستاره در گوشه سمت راست بالا مشخص شده اند.

منوهای زمینه در عنوان صفحه و روی گالری ها و لیست ها طولانی کلیک کنید

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

نام یا آدرس یک ویدیو یا لیست پخش را در صفحه نمایش یا در هر لیستی کپی کنید.

شروع سریع - کانال ها و لیست های پخش توصیه شده را اضافه کنید

مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟) => مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)

برنامه بلافاصله مانند تصاویر بالا خواهد بود.

کانال ها و لیست های پخش غیر ضروری را می توان در تنظیمات خاموش یا حذف کرد.

نصب

صفحه پروژه: 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.

سوال: آیا به طور کلی خراش دادن وب سایت ها بدون اجازه (یا با ممنوعیت صریح) از نویسندگان قانونی است؟ گوگل اپلیکیشن ها را از گوگل پلی حذف می کند، که از API خود استفاده نمی کنند، اما سایت های خود را تجزیه می کنند، زیرا آنها قرارداد کاربر خود را نقض می کنند.
پاسخ: البته، قانونی است، این به شما بستگی دارد که از چه ابزاری برای خواندن اطلاعات در دسترس عموم استفاده کنید. علاوه بر این: یک دادگاه آمریکایی خراش دادن وب سایت را کاملا قانونی کرده و تداخل فنی با آن را ممنوع کرده است.اما گل ممکن است نظر دیگری داشته باشد؛ من شخصاً هنوز تمایلی به مراجعه به دادگاه آمریکایی برای متقاعد کردن آنها ندارم.

مقداری کد

کتابخانه NewPipeExtractor - پروژه پشتیبانی بازیکن لوله جدید، به شما امکان می دهد لیستی از ویدیوها را برای یک کانال یا لیست پخش مشخص دانلود کنید، اطلاعات دقیق یک ویدیوی معروف را دانلود کنید (آنچه در صفحه وب ویدیو قابل مشاهده است)، آدرس نماد ویدیو را دریافت کنید و همچنین آدرس ویدیو را دریافت کنید. جریان

کد برای بارگیری لیست پخش کمی دست و پا گیر است، بنابراین من آن را در اینجا نمی دهم، برای علاقه مندان، نگاهی به کد منبع بیندازید، این اساسا یک کلاس است ContentLoader.

بیایید ببینیم چگونه می توان آدرس یک جریان ویدئو را از آدرس صفحه ویدیوی عمومی دریافت کرد و آن را در پخش کننده پخش کرد.

کتابخانه را به
app/build.gradle

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

جالب است که پس از این هنوز نمی توانید از آن استفاده کنید، زیرا ... نمونه ها در مورد کلاس دانلودر از دست رفته شکایت خواهند کرد. می توان آن را از دایرکتوری تست های خودکار در پروژه کپی کرد NewPipeExtractor/extractor/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

بازیکن خواهد شد بازیکن خارجی از خود گوگل این یک بسته بندی وب روی یوتیوب نیست، بلکه یک پخش کننده واقعی جاسازی شده برای پخش هر ویدیویی است، کاملاً انعطاف پذیر و قابل تنظیم است. همچنین می‌تواند جریان‌های ویدیویی را از یوتیوب پخش کند، اگر آدرس صحیح را ارائه دهید. ما به تازگی آدرس استریم را دریافت کردیم، پس بیایید ببینیم چگونه آن را برای پخش کننده ارسال کنیم.

کتابخانه را به پروژه متصل کنید app/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 شما دارند پخش نخواهد شد

برای مثال: ایلیا مورومتس، دغدغه سینما مسفیلم, فیلم روسلان و لیودمیلا 1، نگرانی فیلم Mosfilm

توصیه: چنین ویدیوهایی را به لیست سیاه اضافه کنید یا از نویسنده ویدیو بخواهید محدودیتی که به اشتباه ایجاد شده را حذف کند.

  • برخی از ویدیوهای پخشی که سرویس طول مدت آنها را صفر می کند پخش نمی شوند (برای چنین ویدیوهایی، مدت زمان در لیست ها و گالری به عنوان "[dur undef]" علامت گذاری شده است)

برای مثال: منتظرش باش! همه شماره های سایوزمولت فیلم HD (کارتون برای کودکان)، کارتون از استودیو سایوزمولت فیلم, کارتون های برتر سایوزمولت فیلم, کارتون های استودیو سایوزمولت فیلم

توصیه: چنین ویدیوهایی را به لیست سیاه اضافه کنید.

  • ویدیوهایی که فقط از طریق پیوندهای مستقیم در دسترس هستند ممکن است در لیست پخش محلی قرار نگیرند، حتی اگر همه ویدیوهای کاربر را دانلود کنید.

برای مثال: رام کردن آتش قسمت 1 دغدغه سینما مسفیلم

  • اگر با یک ویدیوی عمومی مواجه شدید که نیازی به ورود به سیستم ندارد، در مرورگر پخش می‌شود، اما در پلیر پخش نمی‌شود، یک گزارش باگ ارسال کنید (احتمالاً این مشکل قبلاً در نسخه جدید برطرف شده است. NewPipeExtractor و فقط باید اسمبلی را با این نسخه به روز کنید، مثلا).

  • اگر اینترنت کند باشد (اما خاموش نشود) ممکن است رابط کند شود.

به عنوان یک نتیجه،

پسرم از تبلت به تلویزیون هوشمند سامسونگ منتقل شد که نمی تواند برنامه های اندروید را اجرا کند. بنابراین، بهترین کنترل والدین هنوز شخصی است.

اما این برنامه به اندازه کافی راحت بود که من خودم شروع به استفاده از آن کنم. اولین برداشت از نسخه های اولیه کار این بود که من در دنیای دیگری هستم. همه محتوا از یوتیوب دانلود می شود، اما اینجا دیگر یوتیوب نیست، بلکه چیز دیگری است، امن و کنترل شده، انگار یک صدپا را از چشم خود بیرون آورده اید و در یک ظرف شیشه ای گذاشته اید. و همه چیز در مورد توصیه هاست.

منبع: www.habr.com

اضافه کردن نظر