Я пытаюсь воспроизвести видео с 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 или я совершенно не прав?
Спасибо в совет
Карло Тасси