La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

L'introduzione è breve: voglio parlare del player online YouTube per Android con playlist, canali e consigli locali.

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Introduzione ampliata:
Qualche tempo fa ho riscontrato esattamente lo stesso problema dell'autore di una meravigliosa applicazione Lista bianca dei canali, e ho determinato per me esattamente lo stesso atteggiamento nei suoi confronti: voglio poter regalare di tanto in tanto a mio figlio un tablet o uno smartphone con i cartoni animati, ma non sono affatto contento di dove, dopo 2-3 clic, l'elenco di raccomandazioni nelle applicazioni standard - client YouTube - prende il bambino.

Sfortunatamente, dopo aver installato l'applicazione Channel Whitelist, è stato scoperto un altro difetto più prosaico, ma comunque fatale: NIH I (e, soprattutto, mio ​​figlio) hanno trovato la sua interfaccia non molto comoda, soprattutto dopo l'abitudine di utilizzare il player YouTube Kids.

In generale, dopo un po 'ero pronto per realizzare la mia implementazione. Dopo un po' di tempo è diventato possibile mettere un tag sulla prima versione.

Caratteristiche principali:

  • Aggiungi i tuoi canali e playlist preferiti: verranno salvati e indicizzati nel database locale
  • All'interno delle playlist aggiunte, disattiva i video non necessari se non ti servono
  • L'elenco dei consigli viene generato in modo casuale solo dai canali e dalle playlist aggiunti all'applicazione

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

Di seguito è riportata una panoramica delle principali funzionalità in modo più dettagliato, oltre ad alcuni dettagli tecnici su come riprodurre i video di YouTube nella tua applicazione Android senza utilizzare l'API di Google e i web wrapper.

Nella schermata principale e nella schermata del lettore: consigli casuali da canali non casuali

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Ricerca istantanea nel database locale

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) => La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Aggiungi un nuovo canale o playlist

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Cerca per nome online o inserisci un indirizzo conosciuto. L'elenco dei video di un canale o di una playlist viene salvato nel database locale; le icone non vengono memorizzate nella cache.

Playlist dinamica: riproduci i risultati della ricerca

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) => La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Nei consigli video ci saranno solo i video che soddisfano la query di ricerca.

Allo stesso modo, se apri un video dalle impostazioni della playlist, nell'elenco dei consigli verranno visualizzati solo i video della stessa playlist.

Le playlist e i canali possono essere temporaneamente disattivati ​​e riattivati

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Nota: i video di una playlist disabilitata scompariranno anche dai risultati di ricerca, dalla cronologia visualizzazioni e dall'elenco dei preferiti. Ma non preoccuparti, appariranno di nuovo lì immediatamente dopo aver riattivato la playlist.

Aggiungi un video alla lista nera

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Un video bloccato non verrà visualizzato nei consigli, nei risultati di ricerca e scomparirà dall'elenco dei preferiti e dalla cronologia delle visualizzazioni. Il video sarà comunque visibile nelle impostazioni della playlist.

Visualizza la lista nera e riattiva gli elementi bloccati per errore:
Impostazioni > menu intestazione > Lista nera

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Video preferiti e cronologia visualizzazioni

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

I video preferiti sullo schermo del lettore sono contrassegnati da un asterisco nell'angolo in alto a destra.

Menu contestuali nel titolo della schermata e clic prolungato in gallerie ed elenchi

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Copia il nome o l'indirizzo di un video o di una playlist nella schermata di navigazione o in qualsiasi elenco.

Avvio rapido: aggiungi canali e playlist consigliati

La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) => La morte di Koshchei è nell'elenco delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

L'applicazione apparirà immediatamente come negli screenshot sopra.

I canali e le playlist non necessari possono essere disattivati ​​o eliminati nelle impostazioni.

Installazione

траница проекта: https://github.com/sadr0b0t/yashlang/
in inglese: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
rilascia: https://github.com/sadr0b0t/yashlang/releases

Tieni presente che il passaggio tra versioni diverse da fonti diverse sullo stesso dispositivo non funzionerà a causa delle diverse firme del file apk; prima di installare la versione da una nuova fonte, dovrai prima eliminare la versione installata insieme ai dati - la cache della playlist e la cronologia di navigazione (o capire come trasferire i dati).

Dettagli tecnici

Non richiede un account Google/YouTube, serve solo Internet, utilizza le seguenti librerie:

Licenza GPLv3 gratuita e open source.

domanda: è generalmente legale eseguire lo scraping di siti Web senza il permesso (o con un divieto esplicito) da parte degli autori? Google rimuove le app da Google Play, che non utilizzano la propria API, ma analizzano i propri siti, perché violano il loro accordo con l'utente.
risposta: certo, è legale, sta a te decidere quale strumento utilizzare per leggere le informazioni disponibili al pubblico. Inoltre: Un tribunale statunitense ha completamente legalizzato lo scraping dei siti Web e ha vietato l'interferenza tecnica con essi., ma Gul potrebbe essere di diverso avviso; personalmente non ho ancora voglia di andare davanti a un tribunale americano per convincerli.

Un po' di codice

Biblioteca NewPipeExtractor - progetto di supporto ai giocatori NewPipe, ti consente di scaricare un elenco di video per un canale o una playlist specifica, scaricare informazioni dettagliate su un video famoso (ciò che è visibile sulla pagina web del video), ottenere l'indirizzo dell'icona del video e anche l'indirizzo del video flusso.

Il codice per caricare la playlist è un po' macchinoso, quindi non lo riporto qui, per chi fosse interessato dia un'occhiata al codice sorgente, è praticamente una classe ContentLoader.

Vediamo come ottenere l'indirizzo di un flusso video dall'indirizzo della pagina video pubblica e riprodurlo nel player.

Connetti la libreria a
app / build.gradle

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

È curioso che dopo questo non sarai ancora in grado di usarlo, perché... esempi si lamenteranno della mancanza della classe Downloader. Può essere copiato nel progetto dalla directory dei test automatizzati NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - funziona con la versione 0.17.4 (sembra che questa parte sia stata rifatta in una versione più recente della libreria, ma dobbiamo ancora verificare).

Ottieni l'indirizzo del flusso video tramite l'indirizzo della pagina video sul sito Web di 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;
    }

L'indirizzo del video ytVidUrl può essere, ad esempio, l'indirizzo pubblico della pagina di qualsiasi video sul sito web di YouTube https://www.youtube.com/watch?v=pd2RlatmNRk

Il giocatore lo sarà exogiocatore da Google stessa. Questo non è un web wrapper su YouTube, ma un vero e proprio player incorporato per riprodurre qualsiasi video, abbastanza flessibile e personalizzabile. Può anche riprodurre flussi video da YouTube se gli fornisci l'indirizzo corretto. Abbiamo appena ricevuto l'indirizzo dello streaming, quindi vediamo come inviarlo al lettore.

Connetti la libreria al progetto app / build.gradle:

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

Non considereremo tutte le sfumature del posizionamento del componente player sulla schermata dell'applicazione (puoi guardare gli esempi sul sito web del progetto o nel codice), vedremo solo come avviare la riproduzione di un video da YouTube nel player all'indirizzo l'indirizzo ricevuto sopra:

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

problemi conosciuti

  • Non riprodurrà video con limiti di età che richiedono l'accesso al tuo account Google/YouTube

ad esempio Ilya Muromets, Mosfilm Cinema Concern, Ruslan e Lyudmila film 1, Mosfilm Film Concern

consiglio: aggiungi tali video alla lista nera o chiedi all'autore del video di rimuovere la restrizione impostata per errore.

  • Alcuni video trasmessi per i quali il servizio restituisce una durata pari a zero non verranno riprodotti (per tali video, la durata negli elenchi e nella galleria è contrassegnata come "[dur undef]")

ad esempio Aspettalo! Tutti i numeri di Soyuzmultfilm HD (Cartoni animati per bambini), Cartoni animati dello studio Soyuzmultfilm, I migliori cartoni animati Soyuzmultfilm, cartoni animati dello studio Soyuzmultfilm

consiglio: aggiungi tali video alla lista nera.

  • I video disponibili solo tramite collegamenti diretti potrebbero non essere inclusi nella playlist locale, anche se scarichi tutti i video dell'utente

ad esempio L'addomesticamento del fuoco Episodio 1, Mosfilm Cinema Concern

  • Se trovi un video pubblico che non richiede login, viene riprodotto nel browser, ma non nel player, invia una segnalazione di bug (è del tutto possibile che il problema sia già stato risolto nella nuova versione NewPipeExtractor e dovrai solo aggiornare l'assembly con questa versione, per esempio).

  • L'interfaccia potrebbe rallentare se Internet è lento (ma non disattivato)

Come risultato,

Mio figlio è passato dal tablet alla smart TV Samsung, che non può eseguire applicazioni Android. Pertanto, il miglior controllo parentale è ancora personale.

Ma l'applicazione si è rivelata abbastanza comoda da permettermi di iniziare a usarla da solo. La prima impressione dalle prime versioni funzionanti era che fossi in un altro mondo. Tutti i contenuti vengono scaricati da YouTube, ma questo non è più YouTube, ma qualcos'altro, sicuro e controllato, come se ti togliessi un millepiedi dall'occhio e lo mettessi in un barattolo di vetro. Ed è tutta una questione di raccomandazioni.

Fonte: habr.com

Aggiungi un commento