Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Ներածությունը կարճ է. ես ուզում եմ խոսել Android-ի համար YouTube առցանց նվագարկչի մասին՝ տեղական երգացանկերով, ալիքներով և առաջարկություններով:

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Ընդլայնված ներածություն.
Որոշ ժամանակ առաջ ես հանդիպեցի ճիշտ նույն խնդրին, ինչ հրաշալի հավելվածի հեղինակը Ալիքների սպիտակ ցուցակ, և ինքս որոշեցի ճիշտ նույն վերաբերմունքը դրա նկատմամբ. ես ուզում եմ ժամանակ առ ժամանակ երեխայիս մուլտֆիլմերով պլանշետ կամ սմարթֆոն նվիրել, բայց ամենևին գոհ չեմ, թե որտեղ է 2-3 կտտոցից հետո ցուցակը։ ստանդարտ հավելվածներում առաջարկություններ՝ YouTube-ի հաճախորդներ, վերցնում է երեխային:

Ցավոք, Channel Whitelist հավելվածը տեղադրելուց հետո հայտնաբերվեց ևս մեկ ավելի պարզ, բայց դեռևս ճակատագրական թերություն՝ NIH I-ը (և, ամենակարևորը, իմ տղան) գտավ դրա միջերեսը ոչ այնքան հարմար, հատկապես YouTube Kids նվագարկիչն օգտագործելու սովորությունից հետո:

Ընդհանրապես, որոշ ժամանակ անց ես պատրաստ էի իմ ներդրումն անել։ Որոշ ժամանակ անց հնարավոր դարձավ առաջին թողարկման վրա պիտակ դնել։

Հիմնական առանձնահատկությունները.

  • Ավելացրեք ձեր սիրած ալիքներն ու երգացանկերը. դրանք կպահվեն և ինդեքսավորվեն տեղական տվյալների բազայում
  • Ավելացված տեսացանկերում անջատեք ավելորդ տեսանյութերը, եթե դրանք ձեզ հարկավոր չեն
  • Առաջարկությունների ցանկը պատահականորեն ստեղծվում է միայն հավելվածում ավելացված ալիքներից և երգացանկերից

Բաց կոդ, GPLv3 լիցենզիա. https://github.com/sadr0b0t/yashlang/

Ստորև բերված է հիմնական գործառույթների ավելի մանրամասն ակնարկ, ինչպես նաև որոշ տեխնիկական մանրամասներ այն մասին, թե ինչպես կարելի է YouTube-ի տեսանյութեր նվագարկել ձեր Android հավելվածում առանց Google API-ի և վեբ փաթաթաների օգտագործման:

Հիմնական էկրանին և նվագարկչի էկրանին՝ պատահական առաջարկներ ոչ պատահական ալիքներից

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Ակնթարթային որոնում տեղական տվյալների բազայում

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): => Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Ավելացնել նոր ալիք կամ երգացանկ

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Որոնեք առցանց անունով կամ տեղադրեք հայտնի հասցե: Ալիքի կամ տեսացանկի տեսանյութերի ցանկը պահվում է տեղական տվյալների բազայում, պատկերակները քեշավորված չեն:

Դինամիկ երգացանկ - նվագարկել որոնման արդյունքները

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): => Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Տեսանյութերի առաջարկություններում կլինեն միայն որոնման հարցումը բավարարող տեսանյութեր։

Նմանապես, եթե տեսացանկի կարգավորումներից տեսահոլովակ բացեք, առաջարկությունների ցանկում կհայտնվեն միայն նույն երգացանկի տեսանյութերը:

Երգացանկերը և ալիքները կարող են ժամանակավորապես անջատվել և նորից միացվել

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Խնդրում ենք նկատի ունենալ. անջատված երգացանկից տեսանյութերը նույնպես կվերանան որոնման արդյունքներից, դիտումների պատմությունից և ընտրյալների ցանկից: Բայց մի անհանգստացեք, նրանք նորից կհայտնվեն այնտեղ երգացանկը նորից միացնելուց անմիջապես հետո:

Ավելացնել տեսանյութ սև ցուցակում

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Արգելափակված տեսանյութը չի ցուցադրվի առաջարկություններում, որոնման արդյունքներում և կվերանա ֆավորիտների ցանկից և դիտումների պատմությունից: Տեսանյութը դեռ տեսանելի կլինի երգացանկի կարգավորումներում:

Դիտեք սև ցուցակը և նորից միացրեք սխալմամբ արգելափակված տարրերը.
Կարգավորումներ > վերնագրի ընտրացանկ > Սև ցուցակ

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Սիրված տեսանյութեր և դիտումների պատմություն

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Նվագարկչի էկրանին սիրված տեսանյութերը նշված են վերին աջ անկյունում աստղանիշով:

Համատեքստային ընտրացանկերը էկրանի վերնագրում և երկար սեղմեք պատկերասրահներում և ցուցակներում

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Պատճենեք տեսահոլովակի կամ տեսացանկի անունը կամ հասցեն դիտման էկրանում կամ ցանկացած ցանկում:

Արագ մեկնարկ. ավելացրեք առաջարկվող ալիքներ և երգացանկեր

Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել): => Կոշչեի մահը առաջարկությունների ցանկում է (հնարավո՞ր է YouTube-ը հարմարավետ և անվտանգ դարձնել):

Հավելվածն անմիջապես նման կլինի վերևի սքրինշոթներին:

Կարիք չկա ալիքներն ու երգացանկերը կարող են անջատվել կամ ջնջվել կարգավորումներում:

Տեղակայում

Նախագծի էջ. https://github.com/sadr0b0t/yashlang/
Անգլերեն: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
թողարկումներ: https://github.com/sadr0b0t/yashlang/releases

Հիշեք, որ միևնույն սարքում տարբեր աղբյուրներից տարբեր տարբերակների միջև անցումը չի աշխատի apk ֆայլի տարբեր ստորագրությունների պատճառով; նախքան տարբերակը նոր աղբյուրից տեղադրելը, նախ պետք է ջնջեք տեղադրված տարբերակը տվյալների հետ միասին. երգացանկի քեշը և զննարկման պատմությունը (կամ պարզել, թե ինչպես փոխանցել տվյալները):

Տեխնիկական մանրամասներ

Չի պահանջում Google/YouTube հաշիվ, ձեզ միայն ինտերնետ է պետք, օգտագործում է հետևյալ գրադարանները.

  • NewPipeExtractor YouTube ծառայությունից տվյալներ ստանալու և
  • ExoPlayer- ը տեսանյութ նվագելու համար:

Բաց կոդով, անվճար 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

Խաղացողը կանի ExoPlayer- ը հենց 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 հաշիվ

օրինակ ` Իլյա Մուրոմեց, «Մոսֆիլմ» կինոկոնցեռն, Ռուսլան և Լյուդմիլա ֆիլմ 1, «Մոսֆիլմ» կինոկոնցեռն

խորհուրդ. ավելացրեք նման տեսանյութեր սև ցուցակում կամ խնդրեք տեսանյութի հեղինակին հեռացնել սխալմամբ սահմանված սահմանափակումը։

  • Որոշ հեռարձակվող տեսանյութեր, որոնց համար ծառայությունը վերադարձնում է զրոյական երկարություն, չեն ցուցադրվի (նման տեսանյութերի համար ցուցակներում և պատկերասրահում տեւողությունը նշված է որպես «[dur undef]»)

օրինակ ` Սպասե՛ք դրան։ Soyuzmultfilm HD-ի բոլոր թողարկումները (Մուլտֆիլմեր երեխաների համար), Մուլտֆիլմեր Սոյուզմուլտֆիլմ ստուդիայից, Լավագույն մուլտֆիլմեր Soyuzmultfilm, Մուլտֆիլմեր Soyuzmultfilm ստուդիայից

խորհուրդ՝ ավելացնել նման տեսանյութերը սև ցուցակում։

  • Տեսանյութերը, որոնք հասանելի են միայն ուղիղ հղումներով, կարող են չընդգրկվել տեղական երգացանկում, նույնիսկ եթե ներբեռնեք օգտատիրոջ բոլոր տեսանյութերը։

օրինակ ` Կրակի ընտելացում Սերիա 1, «Մոսֆիլմ» կինոկոնցեռն

  • Եթե ​​հանդիպեք հանրային տեսանյութի, որը մուտք չի պահանջում, նվագարկում է բրաուզերում, բայց չի խաղում նվագարկիչում, ուղարկեք սխալի մասին զեկույց (միանգամայն հնարավոր է, որ խնդիրն արդեն շտկված է նոր տարբերակում։ NewPipeExtractor և ձեզ հարկավոր կլինի միայն թարմացնել ժողովը այս տարբերակով, օրինակ).

  • Ինտերֆեյսը կարող է դանդաղել, եթե ինտերնետը դանդաղ է (բայց անջատված չէ)

Որպես հետեւանք,

Տղաս պլանշետից տեղափոխվեց Samsung սմարթ հեռուստացույց, որը չի կարողանում Android հավելվածներ գործարկել: Հետեւաբար, լավագույն ծնողական վերահսկողությունը դեռեւս անձնական է:

Բայց հավելվածը բավական հարմար ստացվեց, որ ես ինքս սկսեմ օգտագործել այն։ Վաղ աշխատանքային տարբերակներից առաջին տպավորությունն այն էր, որ ես այլ աշխարհում եմ։ Ամբողջ բովանդակությունը ներբեռնվում է YouTube-ից, բայց սա արդեն YouTube չէ, այլ մի այլ բան՝ անվտանգ և վերահսկվող, ասես քո աչքի միջից մի հարյուրոտանի հանես ու դրեցիր ապակե տարայի մեջ։ Եվ ամեն ինչ վերաբերում է առաջարկություններին:

Source: www.habr.com

Добавить комментарий