Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Entwodiksyon an se kout: Mwen vle pale sou jwè a sou entènèt YouTube pou Android ak lis lokal, chanèl ak rekòmandasyon.

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Entwodiksyon elaji:
Kèk tan de sa mwen te rankontre egzakteman menm pwoblèm ak otè a nan yon aplikasyon bèl bagay Lis blan chanèl, ak detèmine pou tèt mwen egzakteman menm atitid la anvè li: Mwen vle kapab bay pitit mwen an yon tablèt oswa smartphone ak desen anime de tan zan tan, men mwen pa ditou kontan ak kote, apre 2-3 klik, lis la. nan rekòmandasyon nan aplikasyon estanda - kliyan YouTube - pran timoun nan.

Malerezman, apre yo fin enstale aplikasyon Channel Whitelist la, yo te dekouvri yon lòt defo ki pi prozaik, men ki toujou fatal - NIH mwen (epi pi enpòtan an, pitit gason m nan) te jwenn koòdone li pa trè pratik, sitou apre abitid itilize jwè YouTube Kids la.

An jeneral, apre kèk tan mwen te pare pou fè pwòp aplikasyon mwen. Apre kèk tan, li te vin posib yo mete yon tag sou premye lage a.

Karakteristik prensipal:

  • Ajoute chanèl ou ak lis pi renmen yo - yo pral sove ak endis nan baz done lokal la
  • Nan lis ajoute, fèmen videyo ki pa nesesè si ou pa bezwen yo
  • Lis rekòmandasyon yo pwodwi owaza sèlman nan chanèl ak lis ki te ajoute nan aplikasyon an

Sous louvri, lisans GPLv3: https://github.com/sadr0b0t/yashlang/

Anba la a se yon apèsi sou karakteristik prensipal yo an plis detay, plis kèk detay teknik sou kòman yo jwe videyo YouTube nan aplikasyon android ou san yo pa itilize API Google ak anbalaj entènèt.

Sou ekran prensipal la ak sou ekran jwè a: rekòmandasyon o aza soti nan chanèl ki pa o aza

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Rechèch enstantane nan baz done lokal yo

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) => Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Ajoute yon nouvo chanèl oswa playlist

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Chèche pa non sou entènèt oswa mete yon adrès li te ye. Lis videyo yon chanèl oswa yon playlist sove nan baz done lokal la; ikon yo pa kache.

Playlist dinamik - jwe rezilta rechèch la

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) => Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Nan rekòmandasyon videyo yo pral sèlman videyo ki satisfè rechèch rechèch la.

Menm jan an tou, si ou louvri yon videyo ki soti nan paramèt playlist yo, sèlman videyo ki soti nan menm lis la ap parèt nan lis rekòmandasyon yo.

Playlists ak chanèl yo ka tanporèman etenn epi limen ankò

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Tanpri sonje: videyo ki soti nan yon playlist ki andikape yo pral disparèt tou nan rezilta rechèch la, gade istwa ak nan lis favorites yo. Men, pa enkyete, yo pral parèt la ankò imedyatman apre lis la se vire sou ankò.

Ajoute yon videyo sou lis nwa a

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Yon videyo bloke pa pral parèt nan rekòmandasyon, nan rezilta rechèch, epi yo pral disparèt nan lis la nan favorites ak nan istwa a gade. Videyo a ap toujou vizib nan paramèt playlist yo.

Gade lis nwa a ak re-pèmèt atik bloke pa erè:
Anviwònman> meni header> Lis nwa

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Videyo pi renmen ak istwa gade

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Videyo pi renmen sou ekran jwè a make ak yon asterisk nan kwen anwo dwat.

Meni kontèks nan tit ekran an epi klike long nan galri ak lis

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Kopi non oswa adrès yon videyo oswa playlist nan ekran an gade oswa nan nenpòt lis.

Kòmanse rapid - ajoute chanèl rekòmande ak lis

Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?) => Lanmò Koshchei se sou lis rekòmandasyon yo (èske li posib pou fè YouTube konfòtab ak an sekirite?)

Aplikasyon an pral imedyatman sanble ak Ekran ki anwo yo.

Chanèl ak lis ki pa nesesè yo ka fèmen oswa efase nan paramèt yo.

Enstalasyon

Paj pwojè: https://github.com/sadr0b0t/yashlang/
an Anglè: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
lage: https://github.com/sadr0b0t/yashlang/releases

Kenbe nan tèt ou ke chanje ant diferan vèsyon ki soti nan diferan sous sou menm aparèy la pa pral travay akòz siyati diferan nan fichye apk la; anvan ou enstale vèsyon an soti nan yon nouvo sous, ou pral premye oblije efase vèsyon an enstale ansanm ak done yo - kachèt playlist la ak istwa Navigasyon (oswa konnen ki jan yo transfere done).

Detay teknik

Pa mande pou yon kont Google/YouTube, ou sèlman bezwen entènèt la, sèvi ak bibliyotèk sa yo:

Sous louvri, lisans GPLv3 gratis.

kesyon: Èske li jeneralman legal yo grate sit entènèt san pèmisyon (oswa avèk yon entèdiksyon eksplisit) nan men otè yo? Google retire aplikasyon yo nan Google Play, ki pa sèvi ak API yo, men analize sit yo, paske yo vyole akò itilizatè yo.
repons: nan kou, li legal, se ou menm ki zouti yo itilize pou li enfòmasyon ki disponib piblikman. Anplis de sa: Yon tribinal ameriken te legalize konplètman grate sit entènèt ak entèdi entèferans teknik ak li., men Gul ka gen yon opinyon diferan; pèsonèlman, mwen poko gen dezi pou ale nan yon tribinal Ameriken pou konvenk yo.

Kèk kòd

bibliyotèk NewPipeExtractor - pwojè sipò jwè Newpipe, pèmèt ou telechaje yon lis videyo pou yon chanèl espesifye oswa playlist, telechaje enfòmasyon detaye sou yon videyo pi popilè (sa ki vizib sou paj wèb videyo a), jwenn adrès ikòn videyo a, epi tou jwenn adrès videyo a. kouran.

Kòd pou chaje playlist la se yon ti kras ankonbran, kidonk mwen pa pral bay li isit la, pou moun ki enterese, gade nan kòd sous la, se fondamantalman yon klas. ContentLoader.

Ann wè ki jan yo jwenn adrès la nan yon kouran videyo soti nan adrès la nan paj videyo piblik la epi jwe li nan jwè a.

Konekte bibliyotèk la
app/build.gradle

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

Li kirye ke apre sa ou toujou p ap kapab sèvi ak li, paske... egzanp yo pral plenyen sou klas Downloader ki manke a. Li ka kopye nan pwojè a soti nan anyè tès otomatik yo NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - travay pou vèsyon 0.17.4 (li sanble ke pati sa a te refè nan yon vèsyon pi nouvo nan bibliyotèk la, men nou toujou bezwen tcheke).

Jwenn adrès videyo a pa adrès paj videyo a sou sit entènèt YouTube la:

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

Adrès videyo ytVidUrl kapab adrès piblik la nan paj nenpòt videyo sou sit entènèt YouTube la, pou egzanp. https://www.youtube.com/watch?v=pd2RlatmNRk

Jwè a pral exoplayer soti nan Google tèt li. Sa a se pa yon wrapper entènèt sou YouTube, men yon reyèl jwè entegre pou jwe nenpòt videyo, byen fleksib ak customizable. Li kapab tou jwe kouran videyo soti nan YouTube si ou bay li ak adrès ki kòrèk la. Nou jis resevwa adrès kouran an, kidonk ann wè ki jan yo voye li bay jwè a.

Konekte bibliyotèk la ak pwojè a app/build.gradle:

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

Nou pa pral konsidere tout nuans yo nan mete eleman jwè a sou ekran aplikasyon an (ou ka gade egzanp yo sou sit entènèt pwojè a oswa nan kòd la), nou pral sèlman gade nan ki jan yo kòmanse jwe yon videyo soti nan YouTube nan jwè a nan adrès ou resevwa pi wo a:

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

Konnen Pwoblèm

  • Pa pral jwe videyo ki gen restriksyon laj ki mande pou konekte sou kont Google/YouTube ou

pa egzanp: Ilya Muromets, Mosfilm Cinema Concern, Ruslan ak Lyudmila fim 1, Mosfilm Film Concern

konsèy: ajoute videyo sa yo nan lis nwa a oswa mande otè videyo a pou retire restriksyon ki te mete pa erè a.

  • Gen kèk videyo emisyon pou ki sèvis la retounen zewo longè pa pral jwe (pou videyo sa yo, dire a nan lis yo ak galri yo make kòm "[dur undef]").

pa egzanp: Tann li! Tout pwoblèm nan Soyuzmultfilm HD (Desen pou timoun), Desen soti nan Soyuzmultfilm estidyo, Top desen Soyuzmultfilm, Cartoons soti nan Soyuzmultfilm estidyo

konsèy: ajoute videyo sa yo nan lis nwa a.

  • Videyo ki disponib sèlman atravè lyen dirèk yo ka pa enkli nan playlist lokal la, menm si w telechaje tout videyo itilizatè a.

pa egzanp: Taming of Fire Episode 1, Mosfilm Cinema Concern

  • Si ou rankontre yon videyo piblik ki pa mande pou yon login, jwe nan navigatè a, men li pa jwe nan jwè a, voye yon rapò ensèk (li se byen posib ke pwoblèm nan te deja fiks nan nouvo vèsyon an NewPipeExtractor epi w ap sèlman bezwen mete ajou asanble a ak vèsyon sa a, pou egzanp).

  • Koòdone a ka ralanti si Entènèt la dousman (men li pa fèmen)

Nan fen an

Pitit gason m 'te deplase soti nan yon grenn nan yon televizyon entelijan Samsung, ki pa ka kouri aplikasyon pou android. Se poutèt sa, pi bon kontwòl paran an toujou pèsonèl.

Men, aplikasyon an te tounen ase pratik pou mwen kòmanse sèvi ak li tèt mwen. Premye enpresyon ki soti nan vèsyon yo k ap travay byen bonè se ke mwen te nan yon lòt mond. Tout kontni telechaje soti nan YouTube, men sa a se pa YouTube ankò, men yon lòt bagay, san danje epi kontwole, kòm si ou te pran yon santipèd soti nan je ou epi mete l 'nan yon bokal an vè. Epi li se tout sou rekòmandasyon yo.

Sous: www.habr.com

Add nouvo kòmantè