ProHoster > Blog > ειδήσεις στο διαδίκτυο > Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)
Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)
Η εισαγωγή είναι σύντομη: Θέλω να μιλήσω για το διαδικτυακό πρόγραμμα αναπαραγωγής YouTube για Android με τοπικές λίστες αναπαραγωγής, κανάλια και προτάσεις.
Διευρυμένη εισαγωγή:
Πριν λίγο καιρό αντιμετώπισα ακριβώς το ίδιο πρόβλημα με τον συγγραφέα μιας υπέροχης εφαρμογής Λίστα επιτρεπόμενων καναλιών, και καθόρισα για τον εαυτό μου ακριβώς την ίδια στάση απέναντί της: Θέλω να μπορώ να δίνω στο παιδί ένα tablet ή ένα smartphone με κινούμενα σχέδια από καιρό σε καιρό, αλλά δεν είμαι καθόλου ικανοποιημένος με το πού, μετά από 2-3 κλικ, λίστα προτάσεων οδηγεί το παιδί σε τυπικές εφαρμογές - πελάτες YouTube.
Δυστυχώς, μετά την εγκατάσταση της εφαρμογής Channel Whitelist, είχε ήδη ένα άλλο πιο πεζό, αλλά ακόμα μοιραίο ελάττωμα - το NIH μου φάνηκε (και, κυρίως, στον γιο μου) η διεπαφή του όχι πολύ βολική, ειδικά μετά τη συνήθεια να χρησιμοποιώ το YouTube Kids παίχτης.
Γενικά, μετά από λίγο καιρό ωρίμασα για να κάνω τη δική μου υλοποίηση. Μετά από κάποιο χρονικό διάστημα, κατέστη δυνατή η τοποθέτηση ετικέτας στην πρώτη κυκλοφορία.
Βασικά χαρακτηριστικά:
Προσθέστε τα αγαπημένα σας κανάλια και λίστες αναπαραγωγής - θα αποθηκευτούν και θα ευρετηριαστούν στην τοπική βάση δεδομένων
Απενεργοποιήστε τα επιπλέον βίντεο μέσα στις προστιθέμενες λίστες αναπαραγωγής, εάν δεν τα χρειάζεστε
Η λίστα των προτάσεων δημιουργείται τυχαία μόνο από τα κανάλια και τις λίστες αναπαραγωγής που προστέθηκαν στην εφαρμογή
Αυτό που ακολουθεί είναι μια επισκόπηση των κύριων λειτουργιών με περισσότερες λεπτομέρειες, καθώς και ορισμένες τεχνικές λεπτομέρειες σχετικά με τον τρόπο αναπαραγωγής βίντεο YouTube στην εφαρμογή Android σας χωρίς τη χρήση των API της Google και των περιτυλίξεων ιστού.
Στην κύρια οθόνη και στην οθόνη του προγράμματος αναπαραγωγής: τυχαίες προτάσεις από μη τυχαία κανάλια
Άμεση αναζήτηση στην τοπική βάση δεδομένων
=>
Προσθέστε νέο κανάλι ή playlist
Αναζητήστε με το όνομα στο διαδίκτυο ή εισαγάγετε μια γνωστή διεύθυνση. Η λίστα των βίντεο ενός καναλιού ή μιας λίστας αναπαραγωγής αποθηκεύεται σε μια τοπική βάση δεδομένων, τα εικονίδια δεν αποθηκεύονται προσωρινά.
Στις προτάσεις κάτω από το βίντεο, θα υπάρχουν μόνο βίντεο που ικανοποιούν το ερώτημα αναζήτησης.
Ομοίως, εάν ανοίξετε ένα βίντεο από τις ρυθμίσεις της λίστας αναπαραγωγής, στη λίστα προτάσεων θα εμφανίζονται μόνο βίντεο από την ίδια λίστα αναπαραγωγής.
Οι λίστες αναπαραγωγής και τα κανάλια μπορούν να απενεργοποιηθούν και να ενεργοποιηθούν ξανά προσωρινά
Σημείωση: τα βίντεο από την απενεργοποιημένη λίστα αναπαραγωγής θα εξαφανιστούν επίσης από τα αποτελέσματα αναζήτησης, το ιστορικό περιήγησης και από τη λίστα αγαπημένων. Αλλά μην ανησυχείτε, θα εμφανιστούν ξανά εκεί αμέσως μετά την εκ νέου ενεργοποίηση της λίστας αναπαραγωγής.
Βίντεο μαύρης λίστας
Ένα αποκλεισμένο βίντεο δεν θα εμφανίζεται στις προτάσεις, στα αποτελέσματα αναζήτησης, θα εξαφανιστεί από τη λίστα των αγαπημένων και από το ιστορικό προβολής. Το βίντεο θα εξακολουθεί να είναι ορατό στις ρυθμίσεις της λίστας αναπαραγωγής.
Δείτε τη μαύρη λίστα και ενεργοποιήστε ξανά τα στοιχεία που αποκλείστηκαν κατά λάθος: Ρυθμίσεις > μενού κεφαλίδας > Μαύρη λίστα
Αγαπημένα βίντεο και ιστορικό προβολής
Τα αγαπημένα βίντεο στην οθόνη του προγράμματος αναπαραγωγής επισημαίνονται με έναν αστερίσκο στην επάνω δεξιά γωνία.
Μενού περιβάλλοντος στον τίτλο της οθόνης και σε παρατεταμένο κλικ σε γκαλερί και λίστες
Αντιγράψτε το όνομα ή τη διεύθυνση ενός βίντεο ή μιας λίστας αναπαραγωγής στην οθόνη παρακολούθησης ή σε οποιαδήποτε λίστα.
Γρήγορη εκκίνηση - προσθέστε προτεινόμενα κανάλια και λίστες αναπαραγωγής
=>
Η εφαρμογή θα μοιάζει αμέσως με τα παραπάνω στιγμιότυπα οθόνης.
Τα περιττά κανάλια και οι λίστες αναπαραγωγής μπορούν να απενεργοποιηθούν ή να διαγραφούν στις ρυθμίσεις.
Όχι στο Googleplay και δεν θα είναι στο εγγύς μέλλον (η Google απαγορεύει εφαρμογές που, παρακάμπτοντας το API, αναλύουν τον ιστότοπό τους, συμπεριλαμβανομένης της προαναφερθείσας λίστας λευκών καναλιών ή του προγράμματος αναπαραγωγής NewPipe)
Λάβετε υπόψη ότι η εναλλαγή μεταξύ διαφορετικών εκδόσεων από διαφορετικές πηγές στην ίδια συσκευή δεν θα λειτουργήσει λόγω διαφορετικών υπογραφών του αρχείου apk, πριν εγκαταστήσετε την έκδοση από μια νέα πηγή, θα πρέπει πρώτα να διαγράψετε την εγκατεστημένη έκδοση μαζί με τα δεδομένα - προσωρινή μνήμη playlist και ιστορικό περιήγησης (ή μάθετε πώς μεταφέρουν αυτά τα δεδομένα).
Τεχνικές λεπτομέρειες
Δεν απαιτεί λογαριασμό Google / YouTube, χρειάζεται μόνο το Διαδίκτυο, χρησιμοποιεί βιβλιοθήκες:
NewPipeExtractor για λήψη δεδομένων από την υπηρεσία YouTube και
Ερώτηση: Είναι γενικά νόμιμη η απόξεση τοποθεσιών χωρίς την άδεια (ή με ρητή απαγόρευση) των δημιουργών; Η Google αφαιρεί εφαρμογές από το Google Play, τα οποία δεν χρησιμοποιούν το API τους, αλλά αναλύουν τους ιστότοπούς τους, επειδή. παραβιάζουν τη συμφωνία χρήστη τους. Απάντηση: Σίγουρα, νόμιμο, εξαρτάται από εσάς ποιο εργαλείο θα χρησιμοποιήσετε για να διαβάσετε δημόσιες πληροφορίες. Επί πλέον: Το αμερικανικό δικαστήριο νομιμοποίησε πλήρως την απόξεση ιστοτόπων και απαγόρευσε την τεχνική παρεμπόδισή της, αλλά ο Γκιούλ μπορεί να έχει διαφορετική άποψη, προσωπικά δεν έχω καμία επιθυμία να πάω σε αμερικανικό δικαστήριο για να τους πείσω.
Κάποιος κωδικός
Βιβλιοθήκη NewPipeExtractor - έργο βοηθός παίκτη NewPipe, σας επιτρέπει να κατεβάσετε μια λίστα βίντεο για το καθορισμένο κανάλι ή λίστα αναπαραγωγής, να κατεβάσετε λεπτομερείς πληροφορίες για ένα διάσημο βίντεο (τι είναι ορατό στην ιστοσελίδα του βίντεο), να λάβετε τη διεύθυνση του εικονιδίου βίντεο και επίσης να λάβετε τη διεύθυνση του τη ροή βίντεο.
Ο κωδικός για τη φόρτωση της λίστας αναπαραγωγής είναι λίγο δυσκίνητος, επομένως δεν θα τον φέρω εδώ, για όσους ενδιαφέρονται - κοιτάξτε την πηγή, είναι βασικά μια τάξη ContentLoader.
Ας δούμε πώς μπορείτε να λάβετε τη διεύθυνση της ροής βίντεο από τη διεύθυνση της δημόσιας σελίδας βίντεο και να την παίξετε στο πρόγραμμα αναπαραγωγής.
Είναι περίεργο ότι μετά από αυτό δεν μπορεί να χρησιμοποιηθεί ακόμα, γιατί. τα παραδείγματα θα παραπονεθούν για την κατηγορία Downloader που λείπει. Μπορεί να αντιγραφεί στο έργο από τον κατάλογο αυτόματων δοκιμών NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - λειτουργεί για την έκδοση 0.17.4 (φαίνεται ότι αυτό το τμήμα έχει ξαναδημιουργηθεί σε μια νεότερη έκδοση της βιβλιοθήκης, αλλά πρέπει ακόμα να ελεγχθεί).
Λάβετε τη διεύθυνση της ροής βίντεο από τη διεύθυνση της σελίδας βίντεο στον ιστότοπο του YouTube:
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;
}
Η διεύθυνση βίντεο ytVidUrl μπορεί να είναι η δημόσια διεύθυνση της σελίδας οποιουδήποτε βίντεο στον ιστότοπο YouTube, για παράδειγμα https://www.youtube.com/watch?v=pd2RlatmNRk
Ο παίκτης θα εξωπαίχτης από την ίδια την Google. Αυτό δεν είναι ένα περιτύλιγμα ιστού πάνω από το YouTube, αλλά ένα πραγματικό ενσωματωμένο πρόγραμμα αναπαραγωγής για αναπαραγωγή οποιωνδήποτε βίντεο, αρκετά ευέλικτο και προσαρμόσιμο. Η Συμπερίληψη γνωρίζει πώς να αναπαράγει ροές βίντεο από το YouTube, εάν καθορίσετε τη σωστή διεύθυνση για αυτό. Μόλις λάβαμε τη διεύθυνση ροής, οπότε ας δούμε πώς να τη στείλουμε στη συσκευή αναπαραγωγής.
Δεν θα εξετάσουμε όλες τις αποχρώσεις της τοποθέτησης του στοιχείου αναπαραγωγής στην οθόνη της εφαρμογής (μπορείτε να το δείτε στα παραδείγματα στον ιστότοπο του έργου ή στον κώδικα), θα εξετάσουμε μόνο πώς να ξεκινήσετε την αναπαραγωγή βίντεο από το YouTube στο πρόγραμμα αναπαραγωγής στο τη διεύθυνση που ελήφθη παραπάνω:
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);
}
}
Γνωστά προβλήματα
Δεν θα αναπαράγονται βίντεο με περιορισμούς ηλικίας που απαιτούν σύνδεση λογαριασμού Google/YouTube
συμβουλή: προσθέστε τέτοια βίντεο στη μαύρη λίστα ή ζητήστε από τον συγγραφέα του βίντεο να καταργήσει τον περιορισμό που έχει τεθεί κατά λάθος.
Ορισμένα μεταδιδόμενα βίντεο για τα οποία η υπηρεσία επιστρέφει μηδενική διάρκεια δεν θα αναπαράγονται (για τέτοια βίντεο, η διάρκεια στις λίστες και τη συλλογή επισημαίνεται ως "[dur undef]")
συμβουλή: προσθέστε τέτοια βίντεο στη μαύρη λίστα.
Τα βίντεο που είναι διαθέσιμα μόνο μέσω απευθείας συνδέσμων ενδέχεται να μην περιλαμβάνονται στην τοπική λίστα αναπαραγωγής, ακόμα κι αν κάνετε λήψη όλων των βίντεο του χρήστη
Εάν συναντήσετε ένα δημόσιο βίντεο που δεν απαιτεί σύνδεση, παίζει στο πρόγραμμα περιήγησης, αλλά δεν παίζει στη συσκευή αναπαραγωγής, στείλτε μια αναφορά σφάλματος (είναι πολύ πιθανό, το πρόβλημα έχει ήδη επιδιορθωθεί στη νέα έκδοση NewPipeExtractor και θα χρειαστεί μόνο να ενημερώσετε το συγκρότημα με αυτήν την έκδοση, για παράδειγμα).
Η διεπαφή μπορεί να επιβραδύνει με αργό (αλλά όχι απενεργοποιημένο) Διαδίκτυο
Ως αποτέλεσμα,
Ο γιος μετακόμισε από ένα tablet σε μια έξυπνη τηλεόραση Samsung, η οποία δεν μπορεί να τρέξει εφαρμογές Android. Επομένως, ο καλύτερος γονικός έλεγχος εξακολουθεί να είναι προσωπικός.
Αλλά η εφαρμογή αποδείχθηκε αρκετά βολική για να αρχίσω να τη χρησιμοποιώ μόνος μου. Η πρώτη εντύπωση από τις πρώτες εργάσιμες εκδόσεις ήταν ότι μπήκα σε έναν άλλο κόσμο. Όλο το περιεχόμενο γίνεται λήψη από το YouTube, αλλά αυτό δεν είναι πια YouTube, αλλά κάτι άλλο, ασφαλές και ελεγχόμενο, σαν να έβγαλες μια σαρανταποδαρούσα από το μάτι σου και να την βάλεις σε ένα γυάλινο βάζο. Και όλα έχουν να κάνουν με τις συστάσεις.