De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

De introductie is kort: ik wil het hebben over de YouTube online speler voor Android met lokale afspeellijsten, kanalen en aanbevelingen.

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

Uitgebreide introductie:
Enige tijd geleden kwam ik precies hetzelfde probleem tegen als de auteur van een prachtige applicatie Witte lijst van kanalen, en heb voor mezelf precies dezelfde houding ten opzichte ervan bepaald: ik wil mijn kind van tijd tot tijd een tablet of smartphone met tekenfilms kunnen geven, maar ik ben helemaal niet blij met waar, na 2-3 klikken, de lijst van aanbevelingen in standaardapplicaties - YouTube-clients - neemt het kind mee.

Helaas werd na het installeren van de Channel Whitelist-applicatie nog een meer prozaïsche, maar nog steeds fatale fout ontdekt: NIH I (en, belangrijker nog, mijn zoon) vond de interface niet erg handig, vooral na de gewoonte om de YouTube Kids-speler te gebruiken.

Over het algemeen was ik na een tijdje klaar om mijn eigen implementatie te maken. Na enige tijd werd het mogelijk om een ​​tag op de eerste release te zetten.

Belangrijkste kenmerken:

  • Voeg uw favoriete kanalen en afspeellijsten toe - ze worden opgeslagen en geïndexeerd in de lokale database
  • Schakel binnen toegevoegde afspeellijsten onnodige video's uit als je ze niet nodig hebt
  • De lijst met aanbevelingen wordt willekeurig gegenereerd op basis van kanalen en afspeellijsten die aan de applicatie zijn toegevoegd

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

Hieronder vindt u een gedetailleerder overzicht van de belangrijkste functies, plus enkele technische details over hoe u YouTube-video's kunt afspelen in uw Android-applicatie zonder gebruik te maken van de Google API en webwrappers.

Op het hoofdscherm en op het spelersscherm: willekeurige aanbevelingen van niet-willekeurige kanalen

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

Direct zoeken in de lokale database

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) => De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

Voeg een nieuw kanaal of afspeellijst toe

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

Zoek online op naam of voer een bekend adres in. De lijst met video's van een kanaal of afspeellijst wordt opgeslagen in de lokale database; pictogrammen worden niet in de cache opgeslagen.

Dynamische afspeellijst - zoekresultaten afspelen

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) => De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

In de video-aanbevelingen staan ​​alleen video's die aan de zoekopdracht voldoen.

Als je een video opent vanuit de afspeellijstinstellingen, verschijnen alleen video's uit dezelfde afspeellijst in de lijst met aanbevelingen.

Afspeellijsten en kanalen kunnen tijdelijk worden uit- en weer ingeschakeld

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

Let op: video's uit een uitgeschakelde afspeellijst verdwijnen ook uit de zoekresultaten, kijkgeschiedenis en uit de favorietenlijst. Maar maak je geen zorgen, ze verschijnen daar meteen weer nadat de afspeellijst weer is ingeschakeld.

Voeg een video toe aan de zwarte lijst

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

Een geblokkeerde video wordt niet weergegeven in aanbevelingen, in zoekresultaten en verdwijnt uit de lijst met favorieten en uit de kijkgeschiedenis. De video is nog steeds zichtbaar in de afspeellijstinstellingen.

Bekijk de zwarte lijst en schakel per ongeluk geblokkeerde items opnieuw in:
Instellingen > kopmenu > Zwarte lijst

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

Favoriete video's en kijkgeschiedenis

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

Favoriete video's op het spelerscherm zijn gemarkeerd met een asterisk in de rechterbovenhoek.

Contextmenu's in de schermtitel en lang klikken in galerijen en lijsten

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

Kopieer de naam of het adres van een video of afspeellijst in het weergavescherm of in een willekeurige lijst.

Snelle start - voeg aanbevolen kanalen en afspeellijsten toe

De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?) => De dood van Koshchei staat op de lijst met aanbevelingen (is het mogelijk om YouTube gezellig en veilig te maken?)

De applicatie zal er onmiddellijk uitzien als de bovenstaande schermafbeeldingen.

Onnodige kanalen en afspeellijsten kunnen in de instellingen worden uitgeschakeld of verwijderd.

installatie

Projectpagina: https://github.com/sadr0b0t/yashlang/
in Engels: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
releases: https://github.com/sadr0b0t/yashlang/releases

Houd er rekening mee dat het schakelen tussen verschillende versies van verschillende bronnen op hetzelfde apparaat niet zal werken vanwege verschillende handtekeningen van het apk-bestand; voordat u de versie vanaf een nieuwe bron installeert, moet u eerst de geïnstalleerde versie samen met de gegevens verwijderen - de cache van de afspeellijst en de browsegeschiedenis (of zoek uit hoe u gegevens kunt overbrengen).

Technische details

Vereist geen Google/YouTube-account, u heeft alleen internet nodig, maakt gebruik van de volgende bibliotheken:

Open source, gratis GPLv3-licentie.

vraag: Is het over het algemeen legaal om websites te schrapen zonder toestemming (of met een expliciet verbod) van de auteurs? Google verwijdert apps van Google Play, die hun API niet gebruiken, maar hun sites parseren, omdat ze schenden hun gebruikersovereenkomst.
antwoord: natuurlijk is het legaal, het is aan jou welk hulpmiddel je moet gebruiken om openbaar beschikbare informatie te lezen. Verder: Een Amerikaanse rechtbank heeft het schrapen van websites volledig gelegaliseerd en technische interferentie daarmee verboden., maar Gul heeft daar misschien een andere mening over; persoonlijk heb ik nog niet de wens om naar een Amerikaanse rechtbank te stappen om ze te overtuigen.

Een code

bibliotheek Nieuwe PipeExtractor - Spelerondersteuningsproject NewPipe, kunt u een lijst met video's downloaden voor een specifiek kanaal of afspeellijst, gedetailleerde informatie over een beroemde video downloaden (wat zichtbaar is op de webpagina van de video), het adres van het videopictogram opvragen en ook het adres van de video opvragen stroom.

De code voor het laden van de afspeellijst is een beetje omslachtig, dus ik zal hem hier niet geven. Voor degenen die geïnteresseerd zijn, kijk eens naar de broncode, het is eigenlijk een klasse InhoudLoader.

Laten we eens kijken hoe we het adres van een videostream uit het adres van de openbare videopagina kunnen halen en deze in de speler kunnen afspelen.

Verbind de bibliotheek met
app / build.gradle

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

Het is merkwaardig dat je het hierna nog steeds niet kunt gebruiken, omdat... voorbeelden zullen klagen over de ontbrekende klasse Downloader. Het kan vanuit de directory voor geautomatiseerde tests naar het project worden gekopieerd NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - werkt voor versie 0.17.4 (het lijkt erop dat dit onderdeel opnieuw is uitgevoerd in een nieuwere versie van de bibliotheek, maar we moeten dit nog controleren).

Haal het adres van de videostream op via het adres van de videopagina op de YouTube-website:

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

Het videoadres ytVidUrl kan bijvoorbeeld het openbare adres zijn van de pagina van elke video op de YouTube-website https://www.youtube.com/watch?v=pd2RlatmNRk

De speler zal dat zijn exoplayer van Google zelf. Dit is geen webwrapper via YouTube, maar een echte ingebedde speler voor het afspelen van video's, behoorlijk flexibel en aanpasbaar. Het kan ook videostreams van YouTube afspelen als u het juiste adres opgeeft. We hebben zojuist het streamadres ontvangen, dus laten we kijken hoe we het naar de speler kunnen sturen.

Verbind de bibliotheek met het project app / build.gradle:

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

We zullen niet alle nuances in overweging nemen van het plaatsen van de spelercomponent op het applicatiescherm (je kunt de voorbeelden bekijken op de projectwebsite of in de code), we zullen alleen kijken hoe je een video van YouTube kunt afspelen in de speler op het hierboven ontvangen adres:

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

bekende problemen

  • Speelt geen video's af met leeftijdsbeperkingen waarvoor inloggen op uw Google/YouTube-account vereist is

bijvoorbeeld: Ilya Muromets, Mosfilm Cinema Concern, Ruslan en Lyudmila film 1, Mosfilm Film Concern

advies: voeg dergelijke video's toe aan de zwarte lijst of vraag de auteur van de video om de per ongeluk ingestelde beperking te verwijderen.

  • Sommige uitgezonden video's waarvoor de service een lengte van nul retourneert, worden niet afgespeeld (voor dergelijke video's wordt de duur in de lijsten en galerij gemarkeerd als "[dur undef]")

bijvoorbeeld: Wacht erop! Alle nummers van Soyuzmultfilm HD (tekenfilms voor kinderen), tekenfilms van de Soyuzmultfilm studio, Top tekenfilms Sojoezmoeltfilm, Tekenfilms van de Sojoezmoeltfilm studio

advies: voeg dergelijke video's toe aan de zwarte lijst.

  • Video's die alleen beschikbaar zijn via directe links, worden mogelijk niet opgenomen in de lokale afspeellijst, zelfs als u alle video's van de gebruiker downloadt

bijvoorbeeld: Het temmen van vuur, aflevering 1, Mosfilm Cinema Concern

  • Als je een openbare video tegenkomt waarvoor je niet hoeft in te loggen, die in de browser wordt afgespeeld, maar niet in de speler, stuur dan een bugrapport (het is heel goed mogelijk dat het probleem al is opgelost in de nieuwe versie Nieuwe PipeExtractor en u hoeft de assembly alleen met deze versie bij te werken, bij voorbeeld).

  • De interface kan vertragen als het internet traag is (maar niet is uitgeschakeld)

Dientengevolge

Mijn zoon is overgestapt van een tablet naar een Samsung smart TV, waarop geen Android-applicaties kunnen draaien. Daarom is de beste ouderlijke controle nog steeds persoonlijk.

Maar de applicatie bleek handig genoeg om er zelf mee aan de slag te gaan. De eerste indruk van de vroege werkende versies was dat ik in een andere wereld was. Alle content wordt gedownload van YouTube, maar dit is niet langer YouTube, maar iets anders, veilig en gecontroleerd, alsof je een duizendpoot uit je oog haalt en in een glazen pot stopt. En het draait allemaal om de aanbevelingen.

Bron: www.habr.com

Voeg een reactie