Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

Вступление коротко: хочу рассказать про онлайн плеер Ютюб для Андроида с локальными плейлистами, каналами и рекомендациями.

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

توسیعی تعارف:
Некоторое время назад я столкнулся ровно с такой проблемой, как и автор замечательного приложения Channel Whitelist, и определил для себя к ней ровно такое же отношение: я хочу иметь возможность время от времени давать ребенку планшет или смартфон с мультиками, но меня совершенно не устраивает, куда через 2-3 клика заводит ребенка список рекомендаций в стандартных приложениях — клиентах Ютюб.

بدقسمتی سے، چینل وائٹ لسٹ ایپلی کیشن کو انسٹال کرنے کے بعد، ایک اور زیادہ غیر معمولی، لیکن پھر بھی مہلک خامی دریافت ہوئی - NIH I (اور، سب سے اہم بات، میرے بیٹے) کو اس کا انٹرفیس بہت آسان نہیں لگا، خاص طور پر YouTube Kids پلیئر استعمال کرنے کی عادت کے بعد۔

В общем, еще через некоторое время я созрел, чтобы сделать свою реализацию. Еще через некоторое время стало возможным поставить тег на первый релиз.

اہم خصوصیات:

  • اپنے پسندیدہ چینلز اور پلے لسٹ شامل کریں - وہ مقامی ڈیٹا بیس میں محفوظ اور انڈیکس کیے جائیں گے۔
  • شامل کردہ پلے لسٹس کے اندر، اگر آپ کو ان کی ضرورت نہیں ہے تو غیر ضروری ویڈیوز کو بند کردیں
  • سفارشات کی فہرست صرف ایپلی کیشن میں شامل کردہ چینلز اور پلے لسٹس سے تصادفی طور پر تیار کی جاتی ہے۔

اوپن سورس، GPLv3 لائسنس: https://github.com/sadr0b0t/yashlang/

ذیل میں مزید تفصیل کے ساتھ اہم خصوصیات کا ایک جائزہ ہے، نیز گوگل API اور ویب ریپرز کا استعمال کیے بغیر اپنے Android ایپلیکیشن میں YouTube ویڈیوز چلانے کے طریقے کے بارے میں کچھ تکنیکی تفصیلات۔

مرکزی اسکرین پر اور پلیئر اسکرین پر: غیر بے ترتیب چینلز سے بے ترتیب سفارشات

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

مقامی ڈیٹا بیس میں فوری تلاش

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) => Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

Добавить новый канал или плейлист

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

آن لائن نام سے تلاش کریں یا معلوم پتہ داخل کریں۔ چینل یا پلے لسٹ کی ویڈیوز کی فہرست مقامی ڈیٹا بیس میں محفوظ کی جاتی ہے؛ شبیہیں کیش نہیں ہوتی ہیں۔

متحرک پلے لسٹ - تلاش کے نتائج چلائیں۔

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) => Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

ویڈیو کی سفارشات میں صرف وہ ویڈیوز ہوں گی جو تلاش کے سوال کو پورا کرتی ہیں۔

اسی طرح اگر آپ پلے لسٹ کی سیٹنگز سے کوئی ویڈیو کھولتے ہیں تو سفارشات کی فہرست میں صرف اسی پلے لسٹ کی ویڈیوز نظر آئیں گی۔

پلے لسٹس اور چینلز کو عارضی طور پر آف اور دوبارہ آن کیا جا سکتا ہے۔

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

Обратите внимание: ролики из выключенного плейлиста исчезнут также из результатов поиска, истории просмотров и из списка любимых. Но не стоит переживать, они опять появятся там сразу после того, как плейлист будет снова включен.

بلیک لسٹ میں ایک ویڈیو شامل کریں۔

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

ایک مسدود ویڈیو سفارشات میں، تلاش کے نتائج میں نہیں دکھائی جائے گی، اور پسندیدہ کی فہرست اور دیکھنے کی سرگزشت سے غائب ہو جائے گی۔ ویڈیو اب بھی پلے لسٹ کی ترتیبات میں نظر آئے گی۔

بلیک لسٹ دیکھیں اور غلطی سے مسدود آئٹمز کو دوبارہ فعال کریں:
ترتیبات > ہیڈر مینو > بلیک لسٹ

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

پسندیدہ ویڈیوز اور دیکھنے کی تاریخ

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

پلیئر اسکرین پر پسندیدہ ویڈیوز اوپری دائیں کونے میں ستارے کے ساتھ نشان زد ہوتے ہیں۔

Контекстные меню в заголовке экрана и по долгому клику в галереях и списках

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

Копировать имя или адрес видео или плейлиста в экране просмотра или в любом списке.

فوری آغاز - تجویز کردہ چینلز اور پلے لسٹس شامل کریں۔

Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟) => Koshchei کی موت سفارشات کی فہرست میں ہے (کیا یوٹیوب کو آرام دہ اور محفوظ بنانا ممکن ہے؟)

ایپلیکیشن فوری طور پر اوپر والے اسکرین شاٹس کی طرح نظر آئے گی۔

غیر ضروری چینلز اور پلے لسٹس کو سیٹنگز میں بند یا ڈیلیٹ کیا جا سکتا ہے۔

تنصیب

پروجیکٹ کا صفحہ: https://github.com/sadr0b0t/yashlang/
انگریزی میں: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
ریلیز: https://github.com/sadr0b0t/yashlang/releases

Имейте ввиду, что переключаться между разными версиями из разных источников на одном устройстве не получится из-за разных подписей файла apk, перед установкой версии из нового источника придется установленную версию сначала удалить вместе с данными — кэшем плейлистов и историей просмотров (или придумать, как эти данные перенести).

تکنیکی تفصیلات

Не требует аккаунт Гугл/Ютюб, нужен только интернет, использует библиотеки:

اوپن سورس، مفت GPLv3 لائسنس۔

вопрос: Парсить сайты без разрешения (или с явным запретом) авторов вообще законно? Гугл удаляет из Гугл-плея приложения، جو اپنا API استعمال نہیں کرتے ہیں، لیکن اپنی سائٹس کو پارس کرتے ہیں، کیونکہ وہ اپنے صارف کے معاہدے کی خلاف ورزی کرتے ہیں۔
جواب: یقیناً، یہ قانونی ہے، یہ آپ پر منحصر ہے کہ عوامی طور پر دستیاب معلومات کو پڑھنے کے لیے کون سا ٹول استعمال کرنا ہے۔ مزید برآں: Суд США полностью легализовал скрапинг сайтов и запретил ему технически препятствоватьلیکن گل کی رائے مختلف ہو سکتی ہے؛ ذاتی طور پر، میں ابھی تک ان کو قائل کرنے کے لیے کسی امریکی عدالت میں جانے کی خواہش نہیں رکھتا۔

کچھ کوڈ

لائبریری نیو پائپ ایکسٹریکٹر - پلیئر سپورٹ پروجیکٹ نیو پائپ, позволяет загружать список роликов для указанного канала или плейлиста, загружать подробную информацию об известном видео (то, что видно на веб-странице ролика), получать адрес иконки видео, а так же получать адрес потока видео.

Код для загрузки плейлиста немного громоздкий, поэтому здесь приводить его не буду, кому интересно — загляните в исходники, в основном это класс مواد لوڈر.

آئیے دیکھتے ہیں کہ پبلک ویڈیو پیج کے ایڈریس سے ویڈیو اسٹریم کا پتہ کیسے حاصل کیا جائے اور اسے پلیئر میں کیسے چلایا جائے۔

لائبریری کو اس سے جوڑیں۔
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 (похоже, что в более новой версии библиотеки эта часть была переделана, но нужно еще проверить).

Получить адрес потока видео по адресу странички видео на сайте Ютюб:

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 может быть публичный адрес странички любого видео на сайте Ютюб, например https://www.youtube.com/watch?v=pd2RlatmNRk

Плеер будет exoplayer от самой Google. Это не веб-обертка над Ютюб, а самый настоящий встраиваемый плеер для проигрывания любых видеороликов, достаточно гибкий и настраиваемый. В том числе умеет играть потоки видео с Ютюба, если указать ему правильный адрес. Адрес потока мы получили только что, поэтому посмотрим, как его отправить в плеер.

لائبریری کو پروجیکٹ سے مربوط کریں۔ app/build.gradle:

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

Все нюансы размещения компонента плеера на экране приложения рассматривать не будем (можете посмотреть в примерах на сайте проекта или в коде), посмотрим только на то, как запустить проигрывание видео с Ютюба в плеере по полученному выше адресу:

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);
    }
}

معروف مسائل۔

  • Не будет играть ролики с возрастными ограничениями, требующие логин в аккаунт Гугл/Ютюб

مثال کے طور پر: الیا مورومیٹس، موسفلم سنیما کنسرن, Руслан и Людмила 1-ая серия / Ruslan and Lyudmila film 1, Киноконцерн «Мосфильм»

مشورہ: ایسی ویڈیوز کو بلیک لسٹ میں شامل کریں یا ویڈیو کے مصنف سے غلطی سے لگائی گئی پابندی کو ہٹانے کو کہیں۔

  • Не будет играть некоторые ролики-трансляции, для которых сервис возвращает нулевую длину (для таких роликов продолжительность в списках и галерее отмечена как «[dur undef]»)

مثال کے طور پر: Ну Погоди! Все Выпуски Союзмультфильм HD (Мультики для детей), Мультики студии Союзмультфильм, Топ мультиков Союзмультфильм, Мультики студии Союзмультфильм

совет: добавлять такие ролики в черный список.

  • Ролики, доступные только по прямым ссылкам, могут не попасть в локальный плейлист, даже если вы загружаете все ролики пользователя

مثال کے طور پر: فائر ایپیسوڈ 1 کی ٹیمنگ، موسفلم سنیما کنسرن

  • Если встретите публичный ролик, который не требует логин, играет в браузере, но не играет в плеере, присылайте баг-репорт (вполне возможно, проблема уже исправлена в новой версии نیو پائپ ایکسٹریکٹر اور آپ کو صرف اس ورژن کے ساتھ اسمبلی کو اپ ڈیٹ کرنے کی ضرورت ہوگی، مثال کے طور پر).

  • Интерфейс может подтормаживать при медленном (но не выключенном) интернете

اس کے نتیجے کے طور پر،

Сын переехал с планшета на смарт-тв Самсунг, который не умеет запускать приложения Андроид. Поэтому лучший родительский контроль — всё равно личный.

لیکن یہ ایپلی کیشن میرے لیے کافی آسان نکلی کہ میں اسے خود استعمال کرنا شروع کر دوں۔ ابتدائی کام کرنے والے ورژن سے پہلا تاثر یہ تھا کہ میں کسی اور دنیا میں ہوں۔ تمام مواد یوٹیوب سے ڈاؤن لوڈ کیا جاتا ہے، لیکن یہ اب یوٹیوب نہیں ہے، بلکہ کچھ اور ہے، محفوظ اور کنٹرول، گویا آپ نے اپنی آنکھ سے سینٹی پیڈ نکال کر شیشے کے برتن میں ڈال دیا۔ اور یہ سب سفارشات کے بارے میں ہے۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں