ARCore - проигрывание видео на YouTube через поверхность дополненного изображения - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь воспроизвести видео с YouTube через целевую поверхность дополненного изображения в приложении для Android, созданном с помощью библиотеки Google ARCore. С локальным видеофайлом у меня нет проблем, я использую объект MediaPlayer, как показано ниже:

MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.my_vid_local_file);
mediaPlayer.setSurface(texture.getSurface());
mediaPlayer.setLooping(true);
if (!mediaPlayer.isPlaying()) {
  mediaPlayer.start();

  // Wait to set the renderable until the first frame of the  video becomes available.
  // This prevents the renderable from briefly appearing as a black quad before the video
  // plays.
  texture.getSurfaceTexture().setOnFrameAvailableListener(
        (SurfaceTexture surfaceTexture) -> {
          videoPlayerTexture.getNow(null).getMaterial().setExternalTexture("videoTexture", texture);
          videoPlayerTexture.getNow(null).getMaterial().setFloat4("keyColor", CHROMA_KEY_COLOR);
          mediaPlayerNode.setRenderable(videoPlayerTexture.getNow(null));
          texture.getSurfaceTexture().setOnFrameAvailableListener(null);
        });
} else {
  mediaPlayerNode.setRenderable(videoPlayerTexture.getNow(null));
}

Все работает нормально, но я бы хотел получить источник видеоданных с YouTube, чтобы я мог изменить его, не загружая снова мое приложение из магазина.

Я читаю эту ветку: Android Java Youtube API v3.0 получить видео RTSP ссылка о получении ссылки RTSP в YouTube API v3, но когда я помещаю ее в качестве источника данных объекта MediaPlayer, я получаю исключение.

Я изменил код, как показано ниже:

MediaPlayer mediaPlayer = new MediaPlayer();
try {
  mediaPlayer.setDataSource(context, Uri.parse("https://r8---sn-nx5cvox-hpay.googlevideo.com/videoplayback?expire=...and so on"));
  mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
      if (!mediaPlayer.isPlaying()) {
        mediaPlayer.start();

        // Wait to set the renderable until the first frame of the  video becomes available.
        // This prevents the renderable from briefly appearing as a black quad before the video
        // plays.
        texture.getSurfaceTexture().setOnFrameAvailableListener(
                (SurfaceTexture surfaceTexture) -> {
                  videoPlayerTexture.getNow(null).getMaterial().setExternalTexture("videoTexture", texture);
                  videoPlayerTexture.getNow(null).getMaterial().setFloat4("keyColor", CHROMA_KEY_COLOR);
                  mediaPlayerNode.setRenderable(videoPlayerTexture.getNow(null));
                  texture.getSurfaceTexture().setOnFrameAvailableListener(null);
                });
      } else {
        mediaPlayerNode.setRenderable(videoPlayerTexture.getNow(null));
      }
    }
  });
  mediaPlayer.prepare();
}catch(Exception e) {
  e.printStackTrace();
  Log.e(TAG, e.getMessage());
}

И ошибка:

D/MediaHTTPConnectionEx: [response code] STATUS CODE:403
I/native: tracking.cc:3027 no history. confidence : 1.0
D/MediaHTTPConnectionEx: [ResponseMessage]:Forbidden
E/MediaHTTPConnectionEx: MediaHTTPConnectionEx
com.lge.media.MediaHTTPConnectionEx 411 seekTo exception toString: java.io.IOException
D/MediaHTTPConnectionEx: connect
D/MediaHTTPConnectionEx: disconnecting
D/MediaHTTPConnectionEx: disconnected
D/MediaHTTPConnectionEx: [seekToEx] offset:0/mCurrentOffset:-1
D/MediaHTTPConnectionEx: proxy null port 0
I/native: tracking.cc:3027 no history. confidence : 1.0
D/MediaHTTPConnectionEx: [response code] STATUS CODE:403
D/MediaHTTPConnectionEx: [ResponseMessage]:Forbidden
E/MediaHTTPConnectionEx: MediaHTTPConnectionEx com.lge.media.MediaHTTPConnectionEx 411 seekTo exception toString: java.io.IOException
D/MediaHTTPConnectionEx: connect
D/MediaHTTPConnectionEx: disconnecting
D/MediaHTTPConnectionEx: disconnected
...

Был бы способ использовать YouTube API KEY или я совершенно не прав?

Спасибо в совет

Карло Тасси

1 Ответ

0 голосов
/ 11 июня 2019

YouTube предназначен для воспроизведения на собственной веб-странице, на другой веб-странице с использованием встроенного HTML5 или с помощью мобильного API YouTube.

Ключевым общим фактором является то, что все они сохраняют фирменный стиль YouTube и выглядят и чувствуют.

Есть несколько примеров способов получения URL-адреса необработанного видео, чтобы вы могли воспроизвести его напрямую (например, https://stackoverflow.com/a/9740907/334402), но если вы используете URL-адрес необработанного видео и MediaPlayer, вы потеряете внешний вид YouTube ичувствую, и, как правило, это не то, что они поддерживают.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...