ProHoster > Blog > internet haberleri > Ö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ü?)
Giriş kısa: Yerel oynatma listeleri, kanallar ve önerilerle Android için YouTube çevrimiçi oynatıcısından bahsetmek istiyorum.
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ş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
Yerel veritabanında anında arama
=>
Yeni bir kanal veya oynatma listesi ekleyin
Ç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
=>
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
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
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
Favori videolar ve görüntüleme geçmişi
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
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
=>
Uygulama hemen yukarıdaki ekran görüntülerine benzeyecektir.
Gereksiz kanallar ve oynatma listeleri ayarlardan kapatılabilir veya silinebilir.
Google Play'de yer almıyor ve yakın gelecekte de olmayacak (Google, söz konusu Kanal Beyaz Listesi veya NewPipe oynatıcısı da dahil olmak üzere API'yi atlayan ve web sitelerini ayrıştıran uygulamaları yasaklar)
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:
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.
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:
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.
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:
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
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)
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.