Android Youtube API: как воспроизводить видео, когда YoutubeView невидим

Я пытаюсь воспроизвести видео с YouTube с помощью Android Youtube API. Я использую YoutubePlayerFragment и добавляю его в контейнер представления. Это хорошо работает, когда контейнер представления виден. Затем я попытался сделать контейнер представления невидимым. Он перестает работать и выдает ошибку «Воспроизведение видео YouTube остановлено, потому что вид плеера не виден». Мне интересно, могу ли я воспроизвести видео с невидимым видом?


person user2060386    schedule 15.04.2015    source источник


Ответы (3)


Это невозможно, даже если вы попытаетесь проделать некоторые трюки.

Это связано с тем, что SDK отслеживает все дерево просмотра для текущего Window и, следовательно, может видеть, размещено ли что-либо поверх видеоконтейнера YouTube.

person Sebastiano    schedule 15.04.2015
comment
Есть ли способ обмануть монитор? мы обманываем монитор, чтобы он поверил, что вид видеоконтейнера ВИДИМ. - person user2060386; 19.04.2015
comment
Для этого вам потребуется декомпилировать JAR-файл SDK (который запутан), найти код, выполняющий проверку дерева представления, и посмотреть, можно ли изменить код с помощью Reflection (что очень важно). вряд ли). К сожалению, шансов на успех практически нет. - person Sebastiano; 19.04.2015
comment
Я пробовал все возможные сценарии. Иногда вы даже не можете правильно воспроизвести видео (пауза каждые 2 секунды), несмотря на то, что это единственный вид на экране. Вам было бы лучше с другим плеером и API данных YouTube. - person Droidekas; 06.12.2015

Я нашел обходной путь. Мы можем установить Alpha(0.01f) контейнера представления для YoutubePlayerFragment. Таким образом, Youtube API обманывают, полагая, что представление все еще ВИДИМО.

person user2060386    schedule 22.04.2015

Пример моей проблемы, но я решил это с помощью этого кода.

Я инициализировал 2 переменные:

public class VideoPlay extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {
        YouTubePlayerView youTubePlayerView ;
        YouTubePlayer _YouTubePlayer;

Эта функция изменит ваш VIDEO_ID

public void ChangeVIDEO_ID(YouTubePlayer player, String keyID){
    player.cueVideo(keyID);
}

У меня есть ListView в LinearLayout, когда я нажимаю элемент в ListView, что-то вроде этого:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            ChangeVIDEO_ID(_YouTubePlayer, mang.get(position).key);
        }
});

Мой onInitializationSuccess() был изменен ниже:

public void onInitializationSuccess(Provider provider, YouTubePlayer player, boolean wasRestored) {
    _YouTubePlayer = player;
    if (!wasRestored) {
        Bundle bu = getIntent().getExtras();
        if (bu != null) {
            String keyID = bu.getString("key");
            _YouTubePlayer.cueVideo(keyID);
        } else {
            _YouTubePlayer.cueVideo(VIDEO_ID);
        }

    }
} }
person quynt    schedule 06.12.2015