ExoPlayer несколько URL-адресов DASH разного разрешения в виде дорожек

Я работаю с приложением, которое должно воспроизводить видео на YouTube с помощью ExoPlayer2. Чтобы получить URL-адрес DASH видео, я использую эту библиотеку. Проблема с этим подходом заключается в том, что библиотека возвращает разные URL-адреса в зависимости от того, какое разрешение (itag) вы хотите. Например, если вам нужен вариант видео 720p, вы сделаете что-то вроде:

String youtubeLink = "http://youtube.com/watch?v=xxxx";

new YouTubeExtractor(this) {
    @Override
    public void onExtractionComplete(SparseArray<YtFile> ytFiles, VideoMeta vMeta) {
        if (ytFiles != null) {
            int itag = 22;    //22 == 720p
        String downloadUrl = ytFiles.get(itag).getUrl();
        }
    }
}.extract(youtubeLink, true, true);

Я могу сделать этот URL-адрес как MediaSource и установить его с помощью setMediaSource, и он работает, но только с одним разрешением (в данном случае 720p). Я хочу сделать что-то вроде фотографии, прикрепленной к ответу на этот вопрос.

Я пытался читать документы, пробовал Google-Fu, но все было напрасно. Любые идеи о том, как я могу создавать разные дорожки с разным разрешением для одного и того же видео? Я пытался поставить MediaItem и настроить их на проигрыватель, но вместо этого он создает список воспроизведения, а не треки. Любая помощь?

Извините за отсутствие кода, предыдущий разработчик натворил полный бардак в организации кода и я не знаю что где. Если бы я мог просто получить грубый код, это было бы безумно полезно.

Спасибо


person Mihir Kandoi    schedule 02.05.2021    source источник


Ответы (1)


YouTube предпочитает, чтобы вы использовали собственный проигрыватель и предоставляли для этого SDK и API:

Если вы создадите решение, которое будет извлекать потоки и воспроизводить их в вашем пользовательском проигрывателе, и для этого есть множество примеров на SO, вы окажетесь во власти чего-то изменяющегося, что может нарушить вашу реализацию без предупреждения - посмотрите на комментарии истории в некоторых примерах.

Вы также рискуете, что алгоритмы проверки Android-приложений проверят это, и ваше приложение внезапно не будет соответствовать рекомендациям и будет отклонено — принятие в прошлом на самом деле не является гарантией того, что оно будет снова в будущем.

Селектор дорожек ExoPlayer ожидает, что ваш исходный манифест будет иметь несколько дорожек, и его задача — выбирать между ними. В вашем случае у вас этого нет, поэтому вам нужно либо создать какой-то прокси-сервер для создания нового манифеста, объединяющего отдельные URL-адреса, которые вы получаете, запрашивая каждое разрешение, как показано выше, либо изменить проигрыватель, чтобы запросить совершенно новый манифест с помощью единственное разрешение, которое вы хотите.

person Mick    schedule 04.05.2021