ProHoster > blog > internetnieuws > 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 introductie is kort: ik wil het hebben over de YouTube online speler voor Android met lokale afspeellijsten, kanalen en aanbevelingen.
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
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
Direct zoeken in de lokale database
=>
Voeg een nieuw kanaal of afspeellijst toe
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
=>
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
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
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
Favoriete video's en kijkgeschiedenis
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
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 applicatie zal er onmiddellijk uitzien als de bovenstaande schermafbeeldingen.
Onnodige kanalen en afspeellijsten kunnen in de instellingen worden uitgeschakeld of verwijderd.
Het staat niet op Google Play en zal dat in de nabije toekomst ook niet zijn (Google verbiedt applicaties die de API omzeilen en hun website parseren, inclusief de genoemde Channel Whitelist of de NewPipe-speler)
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:
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.
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:
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.
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:
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
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]")
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
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.