Кощейдин өлүмү сунуштардын тизмесинде (YouTube'ду жайлуу жана коопсуз кылуу мүмкүнбү?)

Киришүү кыска: мен жергиликтүү ойнотмо тизмелери, каналдары жана сунуштары бар Android үчүн YouTube онлайн ойноткучу жөнүндө айткым келет.

Кощейдин өлүмү сунуштардын тизмесинде (YouTube'ду жайлуу жана коопсуз кылуу мүмкүнбү?)

Кеңейтилген киришүү:
Бир нече убакыт мурун мен сонун тиркеменин автору сыяктуу көйгөйгө туш болдум Каналдын ак тизмеси, жана өзүм үчүн дал ушундай мамилени аныктадым: мен балама маал-маалы менен мультфильмдер менен планшет же смартфон алып бере алгым келет, бирок 2-3 чыкылдатуудан кийин тизменин кайда кеткенине таптакыр ыраазы эмесмин. стандарттык колдонмолордогу сунуштардын - YouTube кардарлары - баланы алат.

Тилекке каршы, Channel Whitelist тиркемесин орноткондон кийин, дагы бир прозалык, бирок дагы эле өлүмгө алып келе турган кемчилик табылды - NIH I (жана эң негизгиси, менин уулум) анын интерфейси анча ыңгайлуу эмес деп тапты, айрыкча YouTube Kids ойноткучту колдонуу адатынан кийин.

Жалпысынан, бир нече убакыт өткөндөн кийин мен өзүмдүн ишке ашырууга даяр болчумун. Бир нече убакыт өткөндөн кийин, биринчи релизге тег коюуга мүмкүн болду.

Негизги өзгөчөлүктөр:

  • Сүйүктүү каналдарыңызды жана ойнотмо тизмелериңизди кошуңуз - алар жергиликтүү маалымат базасында сакталып, индекстелет
  • Кошулган ойнотмо тизмелердин ичинде, эгер сизге кереги жок болсо, керексиз видеолорду өчүрүңүз
  • Сунуштардын тизмеси колдонмого кошулган каналдардан жана ойнотмо тизмелерден гана туш келди түзүлөт

Ачык булак, GPLv3 лицензиясы: https://github.com/sadr0b0t/yashlang/

Төмөндө кененирээк негизги функцияларды карап чыгуу, ошондой эле Android тиркемеңизде YouTube видеолорун кантип 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

  • Бул Google Play'де эмес жана жакынкы келечекте болбойт (Google API'ди айланып өтүп, веб-сайттарын талдоочу колдонмолорго, анын ичинде аталган Channel Whitelist же NewPipe ойноткучуна тыюу салат)
  • Булактан түзүү: https://github.com/sadr0b0t/yashlang/
  • Релиздер бөлүмүнөн apk жүктөп алыңыз: https://github.com/sadr0b0t/yashlang/releases
  • Бир аз убакыт өткөндөн кийин каталогдо пайда болот деп үмүттөнөм F-Droid (толуктоо үчүн арыз жактырылды окшойт, бирок дээрлик бир ай бою андан ары жылган жок), бирок азырынча жок

Бир эле түзмөктөгү ар кандай булактардан алынган ар кандай версиялардын ортосунда которулуу apk файлынын ар кандай кол тамгаларынан улам иштебей турганын эстен чыгарбаңыз; версияны жаңы булактан орнотуудан мурун, алгач орнотулган версияны маалыматтар менен бирге жок кылышыңыз керек болот - ойнотмо тизменин кэши жана серептөө таржымалы (же маалыматтарды кантип өткөрүп берүүнү түшүнүңүз).

Техникалык маалымат

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 каттоо эсебиңизге кирүүнү талап кылган жаш чектөөлөрү бар видеолорду ойнотпойт

Мисалы: Илья Муромец, «Мосфильм» киноконцерни, Руслан жана Людмила 1-фильм, «Мосфильм» киноконцерни

кеңеш: мындай видеолорду кара тизмеге кошуңуз же видеонун авторунан жаңылыштык менен коюлган чектөөнү алып салууну сураныңыз.

  • Кызмат нөл узундугун кайтарган кээ бир берүү видеолору ойнотулбайт (мындай видеолор үчүн тизмелердеги жана галереядагы узактык "[dur undef]" деп белгиленген)

Мисалы: Шашпай тур! «Союзмультфильм» HD (балдар үчүн мультфильмдер), «Союзмультфильм» студиясынын мультфильмдери., Мыкты мультфильмдер «Союзмультфильм», «Союзмультфильм» студиясынан мультфильмдер

кеңеш: мындай видеолорду кара тизмеге кошуңуз.

  • Түз шилтемелер аркылуу гана жеткиликтүү болгон видеолор, колдонуучунун бардык видеолорун жүктөп алсаңыз да, жергиликтүү ойнотмо тизмеге кирбей калышы мүмкүн.

Мисалы: «Отту эзуу» 1-серия, «Мосфильм» киноконцерни

  • Эгер сиз логинди талап кылбаган, браузерде ойноп, бирок ойноткучта ойнобогон жалпыга ачык видеого туш болсоңуз, мүчүлүштүк тууралуу отчет жөнөтүңүз (жаңы версияда көйгөй буга чейин эле чечилген болушу толук мүмкүн. NewPipeExtractor жана сиз бул версия менен ассамблеяны жаңыртышыңыз керек, Мисалы,).

  • Интернет жай болсо (бирок өчүрүлбөсө) интерфейс жайлашы мүмкүн.

Жыйынтыгында

Уулум планшеттен Android тиркемелерин иштете албаган Samsung акылдуу сыналгысына өттү. Ошондуктан, мыкты ата-энелик көзөмөл дагы эле жеке болуп саналат.

Бирок тиркеме мен аны өзүм колдоно башташ үчүн ыңгайлуу болуп чыкты. Алгачкы жумушчу версиялардагы биринчи таасир мен башка дүйнөдө болгонум болду. Бардык мазмун YouTube'дан жүктөлүп алынат, бирок бул эми YouTube эмес, башка нерсе, коопсуз жана башкарылуучу нерсе, сен көзүңдөн кыркаяқты алып, аны айнек идишке салгандай. Жана кептин баары сунуштар жөнүндө.

Source: www.habr.com

Комментарий кошуу