Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Η εισαγωγή είναι σύντομη: Θέλω να μιλήσω για το διαδικτυακό πρόγραμμα αναπαραγωγής YouTube για Android με τοπικές λίστες αναπαραγωγής, κανάλια και προτάσεις.

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Διευρυμένη εισαγωγή:
Πριν λίγο καιρό αντιμετώπισα ακριβώς το ίδιο πρόβλημα με τον συγγραφέα μιας υπέροχης εφαρμογής Λίστα επιτρεπόμενων καναλιών, και καθόρισα για τον εαυτό μου ακριβώς την ίδια στάση απέναντί ​​της: Θέλω να μπορώ να δίνω στο παιδί ένα tablet ή ένα smartphone με κινούμενα σχέδια από καιρό σε καιρό, αλλά δεν είμαι καθόλου ικανοποιημένος με το πού, μετά από 2-3 κλικ, λίστα προτάσεων οδηγεί το παιδί σε τυπικές εφαρμογές - πελάτες YouTube.

Δυστυχώς, μετά την εγκατάσταση της εφαρμογής Channel Whitelist, είχε ήδη ένα άλλο πιο πεζό, αλλά ακόμα μοιραίο ελάττωμα - το NIH μου φάνηκε (και, κυρίως, στον γιο μου) η διεπαφή του όχι πολύ βολική, ειδικά μετά τη συνήθεια να χρησιμοποιώ το YouTube Kids παίχτης.

Γενικά, μετά από λίγο καιρό ωρίμασα για να κάνω τη δική μου υλοποίηση. Μετά από κάποιο χρονικό διάστημα, κατέστη δυνατή η τοποθέτηση ετικέτας στην πρώτη κυκλοφορία.

Βασικά χαρακτηριστικά:

  • Προσθέστε τα αγαπημένα σας κανάλια και λίστες αναπαραγωγής - θα αποθηκευτούν και θα ευρετηριαστούν στην τοπική βάση δεδομένων
  • Απενεργοποιήστε τα επιπλέον βίντεο μέσα στις προστιθέμενες λίστες αναπαραγωγής, εάν δεν τα χρειάζεστε
  • Η λίστα των προτάσεων δημιουργείται τυχαία μόνο από τα κανάλια και τις λίστες αναπαραγωγής που προστέθηκαν στην εφαρμογή

Οι πηγές είναι ανοιχτές, άδεια GPLv3: https://github.com/sadr0b0t/yashlang/

Αυτό που ακολουθεί είναι μια επισκόπηση των κύριων λειτουργιών με περισσότερες λεπτομέρειες, καθώς και ορισμένες τεχνικές λεπτομέρειες σχετικά με τον τρόπο αναπαραγωγής βίντεο YouTube στην εφαρμογή Android σας χωρίς τη χρήση των API της Google και των περιτυλίξεων ιστού.

Στην κύρια οθόνη και στην οθόνη του προγράμματος αναπαραγωγής: τυχαίες προτάσεις από μη τυχαία κανάλια

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Άμεση αναζήτηση στην τοπική βάση δεδομένων

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) => Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Προσθέστε νέο κανάλι ή playlist

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Αναζητήστε με το όνομα στο διαδίκτυο ή εισαγάγετε μια γνωστή διεύθυνση. Η λίστα των βίντεο ενός καναλιού ή μιας λίστας αναπαραγωγής αποθηκεύεται σε μια τοπική βάση δεδομένων, τα εικονίδια δεν αποθηκεύονται προσωρινά.

Δυναμική λίστα αναπαραγωγής - αναπαραγωγή αποτελεσμάτων αναζήτησης

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) => Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Στις προτάσεις κάτω από το βίντεο, θα υπάρχουν μόνο βίντεο που ικανοποιούν το ερώτημα αναζήτησης.

Ομοίως, εάν ανοίξετε ένα βίντεο από τις ρυθμίσεις της λίστας αναπαραγωγής, στη λίστα προτάσεων θα εμφανίζονται μόνο βίντεο από την ίδια λίστα αναπαραγωγής.

Οι λίστες αναπαραγωγής και τα κανάλια μπορούν να απενεργοποιηθούν και να ενεργοποιηθούν ξανά προσωρινά

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Σημείωση: τα βίντεο από την απενεργοποιημένη λίστα αναπαραγωγής θα εξαφανιστούν επίσης από τα αποτελέσματα αναζήτησης, το ιστορικό περιήγησης και από τη λίστα αγαπημένων. Αλλά μην ανησυχείτε, θα εμφανιστούν ξανά εκεί αμέσως μετά την εκ νέου ενεργοποίηση της λίστας αναπαραγωγής.

Βίντεο μαύρης λίστας

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Ένα αποκλεισμένο βίντεο δεν θα εμφανίζεται στις προτάσεις, στα αποτελέσματα αναζήτησης, θα εξαφανιστεί από τη λίστα των αγαπημένων και από το ιστορικό προβολής. Το βίντεο θα εξακολουθεί να είναι ορατό στις ρυθμίσεις της λίστας αναπαραγωγής.

Δείτε τη μαύρη λίστα και ενεργοποιήστε ξανά τα στοιχεία που αποκλείστηκαν κατά λάθος:
Ρυθμίσεις > μενού κεφαλίδας > Μαύρη λίστα

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Αγαπημένα βίντεο και ιστορικό προβολής

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Τα αγαπημένα βίντεο στην οθόνη του προγράμματος αναπαραγωγής επισημαίνονται με έναν αστερίσκο στην επάνω δεξιά γωνία.

Μενού περιβάλλοντος στον τίτλο της οθόνης και σε παρατεταμένο κλικ σε γκαλερί και λίστες

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Αντιγράψτε το όνομα ή τη διεύθυνση ενός βίντεο ή μιας λίστας αναπαραγωγής στην οθόνη παρακολούθησης ή σε οποιαδήποτε λίστα.

Γρήγορη εκκίνηση - προσθέστε προτεινόμενα κανάλια και λίστες αναπαραγωγής

Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;) => Ο θάνατος του Koshchei στη λίστα των συστάσεων (είναι δυνατόν να γίνει το YouTube άνετο και ασφαλές;)

Η εφαρμογή θα μοιάζει αμέσως με τα παραπάνω στιγμιότυπα οθόνης.

Τα περιττά κανάλια και οι λίστες αναπαραγωγής μπορούν να απενεργοποιηθούν ή να διαγραφούν στις ρυθμίσεις.

Εγκατάσταση

Σελίδα έργου: https://github.com/sadr0b0t/yashlang/
Στα Αγγλικά: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
εκδόσεις: https://github.com/sadr0b0t/yashlang/releases

  • Όχι στο Googleplay και δεν θα είναι στο εγγύς μέλλον (η Google απαγορεύει εφαρμογές που, παρακάμπτοντας το API, αναλύουν τον ιστότοπό τους, συμπεριλαμβανομένης της προαναφερθείσας λίστας λευκών καναλιών ή του προγράμματος αναπαραγωγής NewPipe)
  • Δημιουργία από πηγή: https://github.com/sadr0b0t/yashlang/
  • Κατεβάστε το apk από την ενότητα εκδόσεων: https://github.com/sadr0b0t/yashlang/releases
  • Ελπίζω να είναι σύντομα στον κατάλογο. f-droid (η αίτηση για προσθήκη φαίνεται να εγκρίνεται, αλλά δεν έχει προχωρήσει για σχεδόν ένα μήνα), αλλά όχι ακόμα

Λάβετε υπόψη ότι η εναλλαγή μεταξύ διαφορετικών εκδόσεων από διαφορετικές πηγές στην ίδια συσκευή δεν θα λειτουργήσει λόγω διαφορετικών υπογραφών του αρχείου apk, πριν εγκαταστήσετε την έκδοση από μια νέα πηγή, θα πρέπει πρώτα να διαγράψετε την εγκατεστημένη έκδοση μαζί με τα δεδομένα - προσωρινή μνήμη playlist και ιστορικό περιήγησης (ή μάθετε πώς μεταφέρουν αυτά τα δεδομένα).

Τεχνικές λεπτομέρειες

Δεν απαιτεί λογαριασμό Google / YouTube, χρειάζεται μόνο το Διαδίκτυο, χρησιμοποιεί βιβλιοθήκες:

Ανοιχτού κώδικα, δωρεάν άδεια GPLv3.

Ερώτηση: Είναι γενικά νόμιμη η απόξεση τοποθεσιών χωρίς την άδεια (ή με ρητή απαγόρευση) των δημιουργών; Η Google αφαιρεί εφαρμογές από το Google Play, τα οποία δεν χρησιμοποιούν το API τους, αλλά αναλύουν τους ιστότοπούς τους, επειδή. παραβιάζουν τη συμφωνία χρήστη τους.
Απάντηση: Σίγουρα, νόμιμο, εξαρτάται από εσάς ποιο εργαλείο θα χρησιμοποιήσετε για να διαβάσετε δημόσιες πληροφορίες. Επί πλέον: Το αμερικανικό δικαστήριο νομιμοποίησε πλήρως την απόξεση ιστοτόπων και απαγόρευσε την τεχνική παρεμπόδισή της, αλλά ο Γκιούλ μπορεί να έχει διαφορετική άποψη, προσωπικά δεν έχω καμία επιθυμία να πάω σε αμερικανικό δικαστήριο για να τους πείσω.

Κάποιος κωδικός

Βιβλιοθήκη NewPipeExtractor - έργο βοηθός παίκτη NewPipe, σας επιτρέπει να κατεβάσετε μια λίστα βίντεο για το καθορισμένο κανάλι ή λίστα αναπαραγωγής, να κατεβάσετε λεπτομερείς πληροφορίες για ένα διάσημο βίντεο (τι είναι ορατό στην ιστοσελίδα του βίντεο), να λάβετε τη διεύθυνση του εικονιδίου βίντεο και επίσης να λάβετε τη διεύθυνση του τη ροή βίντεο.

Ο κωδικός για τη φόρτωση της λίστας αναπαραγωγής είναι λίγο δυσκίνητος, επομένως δεν θα τον φέρω εδώ, για όσους ενδιαφέρονται - κοιτάξτε την πηγή, είναι βασικά μια τάξη ContentLoader.

Ας δούμε πώς μπορείτε να λάβετε τη διεύθυνση της ροής βίντεο από τη διεύθυνση της δημόσιας σελίδας βίντεο και να την παίξετε στο πρόγραμμα αναπαραγωγής.

Συνδέστε τη βιβλιοθήκη με
app / build.gradle

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

Είναι περίεργο ότι μετά από αυτό δεν μπορεί να χρησιμοποιηθεί ακόμα, γιατί. τα παραδείγματα θα παραπονεθούν για την κατηγορία Downloader που λείπει. Μπορεί να αντιγραφεί στο έργο από τον κατάλογο αυτόματων δοκιμών NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - λειτουργεί για την έκδοση 0.17.4 (φαίνεται ότι αυτό το τμήμα έχει ξαναδημιουργηθεί σε μια νεότερη έκδοση της βιβλιοθήκης, αλλά πρέπει ακόμα να ελεγχθεί).

Λάβετε τη διεύθυνση της ροής βίντεο από τη διεύθυνση της σελίδας βίντεο στον ιστότοπο του 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;
    }

Η διεύθυνση βίντεο ytVidUrl μπορεί να είναι η δημόσια διεύθυνση της σελίδας οποιουδήποτε βίντεο στον ιστότοπο YouTube, για παράδειγμα https://www.youtube.com/watch?v=pd2RlatmNRk

Ο παίκτης θα εξωπαίχτης από την ίδια την Google. Αυτό δεν είναι ένα περιτύλιγμα ιστού πάνω από το YouTube, αλλά ένα πραγματικό ενσωματωμένο πρόγραμμα αναπαραγωγής για αναπαραγωγή οποιωνδήποτε βίντεο, αρκετά ευέλικτο και προσαρμόσιμο. Η Συμπερίληψη γνωρίζει πώς να αναπαράγει ροές βίντεο από το YouTube, εάν καθορίσετε τη σωστή διεύθυνση για αυτό. Μόλις λάβαμε τη διεύθυνση ροής, οπότε ας δούμε πώς να τη στείλουμε στη συσκευή αναπαραγωγής.

Συνδέστε τη βιβλιοθήκη με το έργο app / build.gradle:

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

Δεν θα εξετάσουμε όλες τις αποχρώσεις της τοποθέτησης του στοιχείου αναπαραγωγής στην οθόνη της εφαρμογής (μπορείτε να το δείτε στα παραδείγματα στον ιστότοπο του έργου ή στον κώδικα), θα εξετάσουμε μόνο πώς να ξεκινήσετε την αναπαραγωγή βίντεο από το YouTube στο πρόγραμμα αναπαραγωγής στο τη διεύθυνση που ελήφθη παραπάνω:

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

Γνωστά προβλήματα

  • Δεν θα αναπαράγονται βίντεο με περιορισμούς ηλικίας που απαιτούν σύνδεση λογαριασμού Google/YouTube

για παράδειγμα: Ilya Muromets, Mosfilm Cinema Concern, Ruslan and Lyudmila 1η σειρά / Ruslan and Lyudmila film 1, Mosfilm Cinema Concern

συμβουλή: προσθέστε τέτοια βίντεο στη μαύρη λίστα ή ζητήστε από τον συγγραφέα του βίντεο να καταργήσει τον περιορισμό που έχει τεθεί κατά λάθος.

  • Ορισμένα μεταδιδόμενα βίντεο για τα οποία η υπηρεσία επιστρέφει μηδενική διάρκεια δεν θα αναπαράγονται (για τέτοια βίντεο, η διάρκεια στις λίστες και τη συλλογή επισημαίνεται ως "[dur undef]")

για παράδειγμα: Περιμένετε! Όλα τα Θέματα Soyuzmultfilm HD (Κινούμενα σχέδια για παιδιά), Cartoons of Soyuzmultfilm studio, Κορυφαία κινούμενα σχέδια Soyuzmultfilm, Cartoons studio Soyuzmultfilm

συμβουλή: προσθέστε τέτοια βίντεο στη μαύρη λίστα.

  • Τα βίντεο που είναι διαθέσιμα μόνο μέσω απευθείας συνδέσμων ενδέχεται να μην περιλαμβάνονται στην τοπική λίστα αναπαραγωγής, ακόμα κι αν κάνετε λήψη όλων των βίντεο του χρήστη

για παράδειγμα: Taming the Fire Episode 1, Mosfilm Cinema Concern

  • Εάν συναντήσετε ένα δημόσιο βίντεο που δεν απαιτεί σύνδεση, παίζει στο πρόγραμμα περιήγησης, αλλά δεν παίζει στη συσκευή αναπαραγωγής, στείλτε μια αναφορά σφάλματος (είναι πολύ πιθανό, το πρόβλημα έχει ήδη επιδιορθωθεί στη νέα έκδοση NewPipeExtractor και θα χρειαστεί μόνο να ενημερώσετε το συγκρότημα με αυτήν την έκδοση, για παράδειγμα).

  • Η διεπαφή μπορεί να επιβραδύνει με αργό (αλλά όχι απενεργοποιημένο) Διαδίκτυο

Ως αποτέλεσμα,

Ο γιος μετακόμισε από ένα tablet σε μια έξυπνη τηλεόραση Samsung, η οποία δεν μπορεί να τρέξει εφαρμογές Android. Επομένως, ο καλύτερος γονικός έλεγχος εξακολουθεί να είναι προσωπικός.

Αλλά η εφαρμογή αποδείχθηκε αρκετά βολική για να αρχίσω να τη χρησιμοποιώ μόνος μου. Η πρώτη εντύπωση από τις πρώτες εργάσιμες εκδόσεις ήταν ότι μπήκα σε έναν άλλο κόσμο. Όλο το περιεχόμενο γίνεται λήψη από το YouTube, αλλά αυτό δεν είναι πια YouTube, αλλά κάτι άλλο, ασφαλές και ελεγχόμενο, σαν να έβγαλες μια σαρανταποδαρούσα από το μάτι σου και να την βάλεις σε ένα γυάλινο βάζο. Και όλα έχουν να κάνουν με τις συστάσεις.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο