Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Wprowadzenie jest krótkie: chcę porozmawiać o odtwarzaczu internetowym YouTube na Androida z lokalnymi playlistami, kanałami i rekomendacjami.

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Rozszerzone wprowadzenie:
Jakiś czas temu napotkałem dokładnie ten sam problem, co autor wspaniałej aplikacji Biała lista kanałów, i ustaliłam dla siebie dokładnie takie samo podejście do tego: chcę od czasu do czasu móc dać dziecku tablet czy smartfon z kreskówkami, ale wcale nie jestem zadowolona z tego, gdzie po 2-3 kliknięciach lista rekomendacji w standardowych aplikacjach – klientach YouTube – zabiera dziecko.

Niestety po zainstalowaniu aplikacji Channel Whitelist odkryto kolejną, bardziej prozaiczną, ale wciąż fatalną wadę - NIH Ja (a co najważniejsze mój syn) uznałem jej interfejs za niezbyt wygodny, zwłaszcza po przyzwyczajeniu się do korzystania z odtwarzacza YouTube Kids.

Generalnie po pewnym czasie byłem gotowy na własną realizację. Po pewnym czasie stało się możliwe umieszczenie tagu na pierwszym wydaniu.

Najważniejsze cechy:

  • Dodaj swoje ulubione kanały i playlisty – zostaną one zapisane i zaindeksowane w lokalnej bazie danych
  • W dodanych playlistach wyłącz niepotrzebne filmy, jeśli ich nie potrzebujesz
  • Lista rekomendacji generowana jest losowo wyłącznie z kanałów i playlist dodanych do aplikacji

Open source, licencja GPLv3: https://github.com/sadr0b0t/yashlang/

Poniżej znajduje się bardziej szczegółowy przegląd głównych funkcji oraz kilka szczegółów technicznych dotyczących odtwarzania filmów z YouTube'a w aplikacji na Androida bez korzystania z interfejsu API Google i opakowań internetowych.

Na ekranie głównym i na ekranie odtwarzacza: losowe rekomendacje z nielosowych kanałów

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Natychmiastowe wyszukiwanie w lokalnej bazie danych

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) => Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Dodaj nowy kanał lub playlistę

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Szukaj według nazwy online lub wprowadź znany adres. Lista filmów z kanału lub playlisty jest zapisywana w lokalnej bazie danych; ikony nie są zapisywane w pamięci podręcznej.

Dynamiczna playlista – odtwarzaj wyniki wyszukiwania

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) => Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

W rekomendacjach filmów pojawią się tylko filmy spełniające zapytanie.

Podobnie, jeśli otworzysz film w ustawieniach playlisty, na liście rekomendacji pojawią się tylko filmy z tej samej playlisty.

Listy odtwarzania i kanały można tymczasowo wyłączyć i włączyć ponownie

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Uwaga: filmy z wyłączonej playlisty znikną także z wyników wyszukiwania, historii oglądania i listy ulubionych. Ale nie martw się, pojawią się tam ponownie natychmiast po ponownym włączeniu listy odtwarzania.

Dodaj film do czarnej listy

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Zablokowany film nie będzie wyświetlany w rekomendacjach, wynikach wyszukiwania, zniknie z listy ulubionych i historii oglądania. Film będzie nadal widoczny w ustawieniach playlisty.

Wyświetl czarną listę i włącz ponownie elementy zablokowane przez pomyłkę:
Ustawienia > menu nagłówka > Czarna lista

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Ulubione filmy i historia oglądania

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Ulubione filmy na ekranie odtwarzacza oznaczone są gwiazdką w prawym górnym rogu.

Menu kontekstowe w tytule ekranu i długie kliknięcie w galeriach i listach

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Skopiuj nazwę lub adres filmu lub listy odtwarzania na ekranie przeglądania lub na dowolnej liście.

Szybki start — dodaj polecane kanały i playlisty

Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?) => Śmierć Koszczeja znajduje się na liście rekomendacji (czy można sprawić, by YouTube był przytulny i bezpieczny?)

Aplikacja od razu będzie wyglądać jak na powyższych zrzutach ekranu.

Niepotrzebne kanały i playlisty można wyłączyć lub usunąć w ustawieniach.

Instalacja

Страница проекта: https://github.com/sadr0b0t/yashlang/
po angielsku: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
wydania: https://github.com/sadr0b0t/yashlang/releases

Pamiętaj, że przełączanie pomiędzy różnymi wersjami z różnych źródeł na tym samym urządzeniu nie będzie działać ze względu na różne sygnatury pliku apk; przed zainstalowaniem wersji z nowego źródła będziesz musiał najpierw usunąć zainstalowaną wersję wraz z danymi - pamięć podręczną playlist i historię przeglądania (lub dowiedz się, jak przesłać dane).

Szczegóły techniczne

Nie wymaga konta Google/YouTube, wystarczy Internet, korzysta z następujących bibliotek:

Open source, bezpłatna licencja GPLv3.

pytanie: Czy zdrapywanie stron internetowych bez zgody (lub wyraźnego zakazu) autorów jest ogólnie legalne? Google usuwa aplikacje z Google Play, które nie używają swojego API, ale analizują swoje witryny, ponieważ naruszają umowę użytkownika.
odpowiedź: oczywiście, że jest to zgodne z prawem, od Ciebie zależy, jakiego narzędzia użyjesz do zapoznania się z publicznie dostępnymi informacjami. Ponadto: Amerykański sąd całkowicie zalegalizował scrapowanie stron internetowych i zakazał ingerencji technicznej w nie., ale Gul może mieć inne zdanie, osobiście nie mam jeszcze ochoty udawać się do amerykańskiego sądu, żeby ich przekonać.

Jakiś kod

biblioteka Nowy ekstraktor rur - projekt wsparcia graczy NewPipe, umożliwia pobranie listy filmów dla określonego kanału lub playlisty, pobranie szczegółowych informacji o znanym filmie (co jest widoczne na stronie filmu), uzyskanie adresu ikony filmu, a także uzyskanie adresu filmu strumień.

Kod ładujący playlistę jest trochę uciążliwy, więc nie będę go tutaj podawać, dla zainteresowanych zerknijcie do kodu źródłowego, to w zasadzie klasa Moduł ładowania treści.

Zobaczmy, jak uzyskać adres strumienia wideo z adresu publicznej strony wideo i odtworzyć go w odtwarzaczu.

Połącz bibliotekę z
app/build.gradle

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

Ciekawe, że po tym nadal nie będziesz mógł z niego skorzystać, bo... przykłady będą narzekać na brakującą klasę Downloadera. Można go skopiować do projektu z katalogu testów automatycznych NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - działa dla wersji 0.17.4 (wydaje się, że ta część została przerobiona w nowszej wersji biblioteki, ale musimy to jeszcze sprawdzić).

Uzyskaj adres strumienia wideo z adresu strony wideo w serwisie 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;
    }

Adres wideo ytVidUrl może być na przykład adresem publicznym strony dowolnego filmu wideo w serwisie YouTube https://www.youtube.com/watch?v=pd2RlatmNRk

Gracz to zrobi explayer od samego Google’a. To nie jest opakowanie internetowe na YouTube, ale prawdziwy wbudowany odtwarzacz do odtwarzania dowolnych filmów, dość elastyczny i konfigurowalny. Może także odtwarzać strumienie wideo z YouTube, jeśli podasz mu prawidłowy adres. Właśnie otrzymaliśmy adres strumienia, więc zobaczmy, jak wysłać go do gracza.

Połącz bibliotekę z projektem app/build.gradle:

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

Nie będziemy rozważać wszystkich niuansów związanych z umieszczeniem komponentu odtwarzacza na ekranie aplikacji (przykłady można zobaczyć na stronie projektu lub w kodzie), przyjrzymy się jedynie, jak rozpocząć odtwarzanie wideo z YouTube w odtwarzaczu pod adresem adres otrzymany powyżej:

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

Znane problemy

  • Nie będzie odtwarzać filmów z ograniczeniami wiekowymi, które wymagają zalogowania się na konto Google/YouTube

na przykład: Ilya Muromets, koncern kinowy Mosfilm, Rusłan i Ludmiła film 1, Koncern Filmowy Mosfilm

rada: dodaj takie filmy do czarnej listy lub poproś autora filmu o usunięcie omyłkowo ustawionego ograniczenia.

  • Niektóre nadawane filmy, dla których usługa zwraca zerową długość, nie będą odtwarzane (w przypadku takich filmów czas trwania na listach i w galerii jest oznaczony jako „[dur undef]”)

na przykład: Czekaj na to! Wszystkie numery Soyuzmultfilm HD (kreskówki dla dzieci), Kreskówki ze studia Soyuzmultfilm, Najlepsze kreskówki Soyuzmultfilm, Kreskówki ze studia Soyuzmultfilm

rada: dodaj takie filmy do czarnej listy.

  • Filmy dostępne wyłącznie za pośrednictwem bezpośrednich linków mogą nie zostać uwzględnione na lokalnej liście odtwarzania, nawet jeśli pobierzesz wszystkie filmy użytkownika

na przykład: Poskromienie ognia, odcinek 1, koncern Mosfilm Cinema

  • Jeśli natkniesz się na publiczny film, który nie wymaga logowania, odtwarza się w przeglądarce, ale nie odtwarza się w odtwarzaczu, wyślij raport o błędzie (jest całkiem możliwe, że problem został już naprawiony w nowej wersji Nowy ekstraktor rur i będziesz musiał jedynie zaktualizować zestaw o tę wersję, Przykładowo).

  • Interfejs może spowolnić, jeśli Internet jest wolny (ale nie wyłączony)

W efekcie,

Mój syn przesiadł się z tabletu na telewizor Samsung Smart TV, na którym nie można uruchomić aplikacji na Androida. Dlatego najlepsza kontrola rodzicielska jest nadal osobista.

Ale aplikacja okazała się na tyle wygodna, że ​​sam zacząłem z niej korzystać. Pierwsze wrażenie z wczesnych wersji roboczych było takie, że byłem w innym świecie. Wszystkie treści są pobierane z YouTube, ale to już nie YouTube, ale coś innego, bezpiecznego i kontrolowanego, jakbyś wyjął stonogę z oka i włożył do szklanego słoika. A to wszystko dzięki rekomendacjom.

Źródło: www.habr.com

Dodaj komentarz