Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Giriş kısa: Yerel oynatma listeleri, kanallar ve önerilerle Android için YouTube çevrimiçi oynatıcısından bahsetmek istiyorum.

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Genişletilmiş giriş:
Bir süre önce harika bir uygulamanın yazarının yaşadığı sorunun aynısıyla karşılaştım Kanal Beyaz Listesi, ve buna karşı tamamen aynı tutumu kendim için belirledim: Çocuğuma zaman zaman çizgi film içeren bir tablet veya akıllı telefon verebilmeyi istiyorum, ancak 2-3 tıklamadan sonra listenin nerede olduğu konusunda hiç mutlu değilim Standart uygulamalardaki önerilerin - YouTube istemcileri - çocuğu alır.

Ne yazık ki, Kanal Beyaz Listesi uygulamasını yükledikten sonra, daha sıradan ama yine de ölümcül bir kusur daha keşfedildi - NIH I (ve en önemlisi oğlum), özellikle YouTube Çocuk oynatıcısını kullanma alışkanlığından sonra arayüzünü pek kullanışlı bulmadı.

Genel olarak bir süre sonra kendi uygulamamı yapmaya hazırdım. Bir süre sonra ilk sürüme etiket koymak mümkün hale geldi.

Anahtar özellikler:

  • Favori kanallarınızı ve oynatma listelerinizi ekleyin; bunlar kaydedilecek ve yerel veritabanına eklenecektir
  • Eklenen oynatma listelerinde ihtiyacınız yoksa gereksiz videoları kapatın
  • Öneri listesi yalnızca uygulamaya eklenen kanallardan ve oynatma listelerinden rastgele oluşturulur

Açık kaynak, GPLv3 lisansı: https://github.com/sadr0b0t/yashlang/

Aşağıda ana özelliklere daha ayrıntılı bir genel bakışın yanı sıra YouTube videolarını Google API ve web sarmalayıcıları kullanmadan Android uygulamanızda nasıl oynatacağınıza ilişkin bazı teknik ayrıntılar bulunmaktadır.

Ana ekranda ve oynatıcı ekranında: rastgele olmayan kanallardan rastgele öneriler

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Yerel veritabanında anında arama

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) => Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Yeni bir kanal veya oynatma listesi ekleyin

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Çevrimiçi olarak ada göre arama yapın veya bilinen bir adresi ekleyin. Bir kanalın veya oynatma listesinin video listesi yerel veritabanına kaydedilir; simgeler önbelleğe alınmaz.

Dinamik oynatma listesi - arama sonuçlarını oynat

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) => Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Video önerilerinde yalnızca arama sorgusunu karşılayan videolar olacaktır.

Benzer şekilde, oynatma listesi ayarlarından bir videoyu açtığınızda öneriler listesinde yalnızca aynı oynatma listesindeki videolar görünecektir.

Oynatma listeleri ve kanallar geçici olarak kapatılıp tekrar açılabilir

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Lütfen unutmayın: Devre dışı bırakılan bir oynatma listesindeki videolar da arama sonuçlarından, görüntüleme geçmişinden ve favoriler listesinden kaybolacaktır. Ancak endişelenmeyin, oynatma listesi tekrar açıldıktan hemen sonra tekrar orada görünecekler.

Kara listeye video ekleme

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Engellenen bir video, önerilerde veya arama sonuçlarında görüntülenmeyecek ve favoriler listesinden ve görüntüleme geçmişinden kaybolacaktır. Video, oynatma listesi ayarlarında görünmeye devam edecek.

Kara listeyi görüntüleyin ve yanlışlıkla engellenen öğeleri yeniden etkinleştirin:
Ayarlar > başlık menüsü > Kara liste

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Favori videolar ve görüntüleme geçmişi

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Oynatıcı ekranındaki favori videolar sağ üst köşede bir yıldız işaretiyle işaretlenmiştir.

Ekran başlığındaki içerik menüleri ve galeriler ile listelerde uzun tıklama

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Bir videonun veya oynatma listesinin adını veya adresini görüntüleme ekranında veya herhangi bir listede kopyalayın.

Hızlı başlangıç ​​- önerilen kanalları ve oynatma listelerini ekleyin

Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?) => Öneriler listesinde Koshchei'nin ölümü var (YouTube'u rahat ve güvenli hale getirmek mümkün mü?)

Uygulama hemen yukarıdaki ekran görüntülerine benzeyecektir.

Gereksiz kanallar ve oynatma listeleri ayarlardan kapatılabilir veya silinebilir.

Montaj

Doğru yol: https://github.com/sadr0b0t/yashlang/
İngilizce: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
Salıverme: https://github.com/sadr0b0t/yashlang/releases

Apk dosyasının farklı imzaları nedeniyle aynı cihazdaki farklı kaynaklardan farklı sürümler arasında geçiş yapmanın işe yaramayacağını unutmayın; sürümü yeni bir kaynaktan yüklemeden önce, öncelikle yüklü sürümü verilerle birlikte silmeniz gerekecektir - çalma listesi önbelleği ve göz atma geçmişi (veya verilerin nasıl aktarılacağını öğrenin).

Teknik Detaylar

Google/YouTube hesabı gerektirmez, yalnızca İnternet'e ihtiyacınız vardır, aşağıdaki kütüphaneleri kullanır:

Açık kaynak, ücretsiz GPLv3 lisansı.

soru: Web sitelerini yazarların izni olmadan (veya açıkça yasaklanarak) kazımak genel olarak yasal mıdır? Google, uygulamaları Google Play'den kaldırırAPI'lerini kullanmayan ancak sitelerini ayrıştıran , çünkü Kullanıcı sözleşmesini ihlal ediyorlar.
cevap: elbette yasaldır, kamuya açık bilgileri okumak için hangi aracı kullanacağınız size bağlıdır. Üstelik: Bir ABD mahkemesi, web sitelerinin kazınmasını tamamen yasallaştırdı ve buna teknik müdahaleyi yasakladı.Ama Gül'ün farklı bir düşüncesi olabilir, kişisel olarak benim henüz Amerikan mahkemesine gidip onları ikna etme isteğim yok.

Bazı kodlar

Kütüphane Yeni Boru Çıkarıcı - oyuncu destek projesi NewPipe, belirli bir kanal veya oynatma listesi için videoların listesini indirmenize, ünlü bir video hakkında ayrıntılı bilgi indirmenize (videonun web sayfasında görünenler), video simgesinin adresini almanıza ve ayrıca videonun adresini almanıza olanak tanır aktarım.

Çalma listesini yükleme kodu biraz hantal o yüzden burada vermeyeceğim, ilgilenenler için kaynak koduna bir göz atın, temelde bir sınıf İçerik Yükleyici.

Bir video akışının adresini genel video sayfasının adresinden nasıl alıp oynatıcıda oynatacağımızı görelim.

Kitaplığı şuraya bağlayın:
app / build.gradle

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

Bundan sonra hala kullanamayacak olmanız ilginç, çünkü... örnekler eksik Downloader sınıfından şikayetçi olacaktır. Otomatik testler dizininden projeye kopyalanabilir NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - 0.17.4 sürümü için çalışıyor (bu bölüm kitaplığın daha yeni bir sürümünde yeniden yapılmış gibi görünüyor, ancak yine de kontrol etmemiz gerekiyor).

Video akışının adresini YouTube web sitesindeki video sayfasının adresinden alın:

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 video adresi, YouTube web sitesindeki herhangi bir videonun sayfasının genel adresi olabilir; örneğin https://www.youtube.com/watch?v=pd2RlatmNRk

Oyuncu olacak ExoOyuncu Google'ın kendisinden. Bu, YouTube üzerinden bir web sarmalayıcı değil, herhangi bir videoyu oynatmak için oldukça esnek ve özelleştirilebilir gerçek bir gömülü oynatıcıdır. Doğru adresi sağlarsanız YouTube'dan video akışlarını da oynatabilir. Yayın adresini yeni aldık, şimdi oynatıcıya nasıl göndereceğimizi görelim.

Kütüphaneyi projeye bağlayın app / build.gradle:

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

Oynatıcı bileşenini uygulama ekranına yerleştirmenin tüm nüanslarını dikkate almayacağız (proje web sitesindeki veya koddaki örneklere bakabilirsiniz), yalnızca YouTube'dan bir videoyu oynatıcıda oynatmaya nasıl başlayacağınıza bakacağız. yukarıda alınan 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);
    }
}

Bilinen Sorunlar

  • Google/YouTube hesabınıza giriş yapmanızı gerektiren yaş sınırlaması olan videolar oynatılmayacaktır

örneğin: Ilya Muromets, Mosfilm Sinema Şirketi, Ruslan ve Lyudmila filmi 1, Mosfilm Film Endişesi

tavsiye: bu tür videoları kara listeye ekleyin veya videonun yazarından yanlışlıkla belirlenen kısıtlamayı kaldırmasını isteyin.

  • Hizmetin sıfır uzunluk döndürdüğü bazı yayın videoları oynatılmayacaktır (bu tür videolar için listelerde ve galeride süre "[dur undef]" olarak işaretlenir)

örneğin: Bunun için bekle! Soyuzmultfilm HD'nin Tüm Sayıları (Çocuklar için Çizgi Filmler), Soyuzmultfilm stüdyosundan Çizgi Filmler, En popüler çizgi filmler Soyuzmultfilm, Soyuzmultfilm stüdyosundan çizgi filmler

tavsiye: bu tür videoları kara listeye ekleyin.

  • Yalnızca doğrudan bağlantılar yoluyla erişilebilen videolar, kullanıcının tüm videolarını indirseniz bile yerel oynatma listesine dahil edilmeyebilir

örneğin: Ateşin Evcilleştirilmesi 1. Bölüm, Mosfilm Sinema Kaygısı

  • Oturum açma gerektirmeyen, tarayıcıda oynatılan ancak oynatıcıda oynatılmayan, herkese açık bir videoyla karşılaşırsanız bir hata raporu gönderin (sorunun yeni sürümde zaten düzeltilmiş olması oldukça olasıdır) Yeni Boru Çıkarıcı ve derlemeyi yalnızca bu sürümle güncellemeniz gerekecek, örneğin).

  • İnternet yavaşsa (ancak kapatılmamışsa) arayüz yavaşlayabilir

Bunun bir sonucu olarak,

Oğlum tabletten Android uygulamalarını çalıştıramayan Samsung akıllı TV'ye geçti. Bu nedenle en iyi ebeveyn kontrolü hala kişiseldir.

Ancak uygulamanın kendim kullanmaya başlamam için yeterince kullanışlı olduğu ortaya çıktı. İlk çalışma versiyonlarından edindiğim ilk izlenim, başka bir dünyada olduğum yönündeydi. Tüm içerik YouTube'dan indiriliyor, ancak bu artık YouTube değil, başka bir şey, güvenli ve kontrollü, sanki gözünden bir çıyan çıkarıp cam bir kavanoza koymuşsun gibi. Ve her şey önerilerle ilgili.

Kaynak: habr.com

Yorum ekle