Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Wprowadzenie w skrócie: chcę opowiedzieć o odtwarzaczu online YouTube dla Androida z lokalnymi listami odtwarzania, kanałami i rekomendacjami.

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Rozbudowane wprowadzenie:
Jakiś czas temu miałem dokładnie ten sam problem, co autor wspaniałej aplikacji Biała lista kanałów, i dokładnie tak samo podchodziłem do tej kwestii: chciałem mieć możliwość od czasu do czasu dawać dziecku tablet lub smartfon z bajkami, ale zupełnie nie odpowiadało mi, dokąd prowadzi dziecko lista rekomendacji w standardowych aplikacjach — klientach YouTube po 2-3 kliknięciach.

Niestety, po zainstalowaniu aplikacji Channel Whitelist zauważyłem inny, bardziej przyziemny, ale wciąż fatalny niedobór — interfejs NIH wydawał mi się (i, co najważniejsze, mojemu synowi) niezbyt wygodny, zwłaszcza po przyzwyczajeniu się do korzystania z YouTube Kids.

W każdym razie, po pewnym czasie dojrzałem do stworzenia własnej implementacji. Po pewnym czasie możliwe stało się wprowadzenie tagu do pierwszej wersji.

Podstawowe funkcje:

  • Dodawaj ulubione kanały i playlisty — będą one zapisane i zindeksowane w lokalnej bazie
  • W dodanych playlistach wyłączaj niepotrzebne filmiki, jeśli ich nie potrzebujesz
  • Lista rekomendacji generowana jest losowo tylko z dodanych do aplikacji kanałów i playlist

Kod źródłowy jest otwarty, licencja GPLv3: https://github.com/sadr0b0t/yashlang/

Poniżej przegląd głównych możliwości w bardziej szczegółowy sposób, plus kilka technicznych szczegółów na temat tego, jak odtwarzać wideo z YouTube w swojej aplikacji na Androida bez używania API Google i powłok webowych.

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

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Natychmiastowe wyszukiwanie w lokalnej bazie

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) => Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Dodaj nowy kanał lub playlistę

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Szukaj według nazwy online lub wklej znany adres. Lista filmów kanału lub playlisty jest zapisywana w lokalnej bazie, ikony nie są buforowane.

Dynamiczna playlista — odtwarzaj wyniki wyszukiwania

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) => Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

W rekomendacjach pod wideo będą tylko filmiki spełniające wymagania zapytania wyszukiwania.

Podobnie, jeśli otworzysz wideo z ustawień playlisty, w liście rekomendacji będą tylko filmiki z tej samej playlisty.

Playlisty i kanały można tymczasowo wyłączać i ponownie włączać

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Uwaga: filmiki z wyłączonej playlisty znikną również z wyników wyszukiwania, historii oglądania i listy ulubionych. Ale nie ma się czym martwić, ponownie pojawią się tam zaraz po ponownym włączeniu playlisty.

Dodaj film do czarnej listy

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

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

Przejrzyj czarną listę i znów włącz elementy, które zostały błędnie zablokowane:
Ustawienia > menu w nagłówku > Czarna lista

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Ulubione filmy i historia oglądania

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

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

Menu kontekstowe w nagłówku ekranu i po długim kliknięciu w galeriach i listach

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

Skopiuj nazwę lub adres filmu lub playlisty w ekranie oglądania lub w dowolnej liście.

Szybki start — dodaj zalecane kanały i playlisty

Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?) => Śmierć Kościej w rekomendacjach (czy można uczynić YouTube przytulnym i bezpiecznym?)

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

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

Instalacja

Strona projektu: https://github.com/sadr0b0t/yashlang/
w języku angielskim: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
wydania: https://github.com/sadr0b0t/yashlang/releases

Pamiętaj, że nie można przełączać się między różnymi wersjami z różnych źródeł na jednym urządzeniu z powodu różnych podpisów pliku apk, przed zainstalowaniem wersji z nowego źródła musisz najpierw usunąć zainstalowaną wersję razem z danymi — pamięcią podręczną playlist i historią oglądania (lub wymyślić, jak te dane przenieść).

Szczegóły techniczne

Nie wymaga konta Google/YouTube, potrzebny jest tylko internet, korzysta z bibliotek:

Otwarty kod źródłowy, wolna licencja GPLv3.

pytanie: Czy parsowanie stron bez zgody (lub z wyraźnym zakazem) autorów jest w ogóle legalne? Google usuwa z Google Play aplikacje, które nie korzystają z ich API, a przeszukują ich strony, ponieważ naruszają ich zasady użytkowania.
odpowiedź: Oczywiście, że legalne, to twoja sprawa, jakiego narzędzia używać do czytania ogólnodostępnych informacji. Ba, więcej: Amerykański sąd całkowicie zalegalizował skanowanie stron internetowych i zabronił technicznego blokowania tego procesu., ale Gul może mieć inne zdanie, ja osobiście na razie nie mam chęci przekonywać ich w amerykańskim sądzie.

Trochę kodu

Biblioteka NewPipeExtractor — pomocniczy projekt odtwarzacza NewPipe, umożliwia pobieranie listy filmów dla wskazanej strony lub playlisty, pobieranie szczegółowych informacji o znanym wideo (tych, które są widoczne na stronie filmu), uzyskiwanie adresu ikony wideo oraz adresu strumienia wideo.

Kod do pobrania playlisty jest nieco rozbudowany, dlatego nie będę go tutaj podawać, kto jest ciekawy — może zajrzeć do źródeł, głównie jest to klasa ContentLoader.

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

Dodać bibliotekę w
app/build.gradle

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

Ciekawostką jest to, że po tym i tak nie będzie można jej używać, ponieważ przykłady będą zgłaszać brakujący klasę Downloader. Można ją 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 (wygląda na to, że w nowszej wersji biblioteki ta część została zmieniona, ale trzeba to jeszcze sprawdzić).

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

Jako adres wideo ytVidUrl może być publiczny adres strony z dowolnym wideo na YouTube, na przykład https://www.youtube.com/watch?v=pd2RlatmNRk

Odtwarzacz będzie ExoPlayer od samego Google. To nie jest opakowanie internetowe na YouTube, lecz prawdziwy odtwarzacz osadzony do odtwarzania dowolnych filmów, wystarczająco elastyczny i konfigurowalny. Potrafi także odtwarzać strumienie wideo z YouTube, jeśli podano mu prawidłowy adres. Adres strumienia właśnie otrzymaliśmy, więc sprawdzimy, jak wysłać go do odtwarzacza.

Podłącz bibliotekę do projektu 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 umieszczania komponentu odtwarzacza na ekranie aplikacji (możesz zobaczyć to w przykładach na stronie projektu lub w kodzie), skupimy się tylko na tym, jak uruchomić odtwarzanie wideo z YouTube w odtwarzaczu za pomocą adresu uzyskanego powyżej:

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

private void playVideoStream(final String streamUrl, final long seekTo) {
    if (streamUrl == null) {
        // zatrzymaj odtwarzanie aktualnego wideo, jeśli zostało załadowane
        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);

        // Wstrzymaj stare wideo podczas przygotowywania nowego
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // Jeśli zatrzymujesz tutaj po tym, jak odtwarzacz już zrobił pauzę, kończąc
            // odtwarzanie wideo, dostaniemy tutaj drugie zdarzenie STATE_ENDED, dlatego potrzebujemy tutaj
            // specjalnej weryfikacji.
            // Wartość getPlayWhenReady() pozostanie true, więc sprawdzamy właśnie stan.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Przygotuj odtwarzacz z źródłem.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // Ustawimy aktualną pozycję od razu przy ładowaniu wideo
        // (w komentarzach piszą o źródłach danych, które wspierają lub nie wspierają
        // przesunięć seek przy ładowaniu, wydaje się, że to bzdura - po prostu robimy seek zaraz po ładowaniu)
        // Exoplayer odtwarza nową playlistę od początku, zamiast podanej pozycji
        // https://github.com/google/ExoPlayer/issues/4375
        // Jak załadować strumień w żądanej pozycji? #2197
        // https://github.com/google/ExoPlayer/issues/2197
        // w tym miejscu normalny czas trwania jeszcze nie jest dostępny, dlatego go nie sprawdzamy
        //if(seekTo > 0 && seekTo  0) {
            // o 5 sekund wcześniej
            videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

Znane problemy

  • Nie będzie odtwarzać filmów z ograniczeniami wiekowymi, wymagających logowania do konta Google/Youtube

na przykład: Ilia Muromiec, Kinocentrum „Mosfilm”, Ruslan i Ludmiła, odcinek 1 / Ruslan and Lyudmila film 1, Kinocentrum „Mosfilm”

rada: dodaj takie filmy do czarnej listy lub poproś autora filmu o usunięcie ograniczenia, nałożonego przez pomyłkę.

  • Nie będzie odtwarzać niektórych filmów na żywo, dla których serwis zwraca zerową długość (dla takich filmów długość w listach i galerii oznaczona jest jako „[dur undef]”)

na przykład: Nu, Pogoń! Wszystkie odcinki Sojuzmultfilm HD (Bajki dla dzieci), Bajki studia Sojuzmultfilm, Top bajek Sojuzmultfilm, Bajki studia Sojuzmultfilm

Porada: dodawaj takie filmy do czarnej listy.

  • Filmy dostępne tylko pod bezpośrednimi linkami mogą nie trafić do lokalnej listy odtwarzania, nawet jeśli przesyłasz wszystkie filmy użytkownika.

na przykład: Ujarzmienie ognia odcinek 1, Wytwórnia filmowa «Mosfilm»

  • Jeśli natkniesz się na publiczny film, który nie wymaga logowania, działa w przeglądarce, ale nie działa w odtwarzaczu, zgłoś błąd (możliwe, że problem został już naprawiony w nowej wersji. NewPipeExtractor Należy tylko zaktualizować wersję tej wersji, na przykład).

  • Interfejs może się zacinać przy wolnym (ale nie wyłączonym) internecie.

W konsekwencji,

Syn przeszedł z tabletu na smart TV Samsunga, który nie potrafi uruchamiać aplikacji Android. Dlatego najlepsza kontrola rodzicielska to jednak osobista forma.

Jednak aplikacja okazała się na tyle wygodna, że zacząłem z niej korzystać sam. Pierwsze wrażenie z wczesnych działających wersji – trafiłem do innego świata. Cała zawartość ładowana jest z YouTube, ale to już nie jest YouTube, a coś innego, bezpiecznego i kontrolowanego, jakby wyjął skolopendrę z oka i umieścił ją w szklanym słoju. A kwestia dotyczy właśnie rekomendacji.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster