Android ExoPlayer Воспроизведение частного видео Vimeo - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь воспроизвести видео Vimeo, используя ExoPlayer , и вот код:

val dataSourceFactory = DefaultDataSourceFactory(requireContext(),
                getUserAgent(requireContext(), requireContext().getString(R.string.app_name)))
val videoSource = ProgressiveMediaSource.Factory(dataSourceFactory)
                .createMediaSource(Uri.parse(videoLink))
player.prepare(videoSource)

Это выбрасывает следующее исключение:

com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 403
        at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:300)
        at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:177)
        at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:83)
        at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:961)
        at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:391)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)

Также Я попытался извлечь URL-адрес Vimeo, используя AndroidVimeoExtractor , и он завершился неудачей со следующим исключением:

java.io.IOException: Video has restricted playback

Вот код:

VimeoExtractor.getInstance().fetchVideoWithIdentifier(
                "videoIdentifier",
                null,
                object : OnVimeoExtractionListener {
                    override fun onSuccess(video: VimeoVideo) {
                        Logger.i("video: ${video.streams.size}")
                    }

                    override fun onFailure(throwable: Throwable) {
                        Logger.e(throwable)
                    }

                })

И вот пример видео ссылки Vimeo: http://player.vimeo.com/external/videoIdentifier.sd.mp4?s=value&profile_id=value&oauth2_token_id=value

Примечание: я не тот, кто загрузил видео. Кроме того, когда я помещаю ссылку в Google Chrome Browser , она перенаправляет на другую ссылку и воспроизводит видео в обычном режиме. Поэтому мне нужно что-то подобное, чтобы получить окончательную ссылку для передачи ExoPlayer .

1 Ответ

0 голосов
/ 11 февраля 2020

Вы пытаетесь воспроизвести все видео Vimeo или только видео, которые вы загрузили Vimeo?

Я думаю, что проблема в том, что файл mp4, который вы извлекаете, на самом деле недействителен или у вас его нет разрешения на потоковую передачу по вашему токену oauth (если у вас его нет).

Вы можете проверить библиотеку vimeo-network README здесь .

The basic requirements for native playback are:

User must be logged in.
User must be the owner of the video.
User must be PRO or higher (or the app must have the "can access owner's video files" capability).
Token must have the video_files scope.
User must be the owner of the API app making the request.

Если вы удовлетворяете всем этим требованиям, вы можете сделать запрос API к Vimeo, и он вернет вам действительный файл MP4, который вы можете передать как videoLink.

// Obtain a video you own my making a GET request
Video video = ...;
Play play = video.getPlay();
// This will be a list of "progressive" video files (basically just MP4s of different resolutions that you can pass to ExoPlayer
ArrayList<VideoFile> progressiveFiles = play.getProgressiveVideoFiles();
String linkToMp4File = progressiveFiles.get(0).getLink();
val videoSource = ProgressiveMediaSource.Factory(dataSourceFactory)
                .createMediaSource(Uri.parse(linkToMp4File))

Если вы не Не тот, кто загрузил видео, я думаю, что есть способ получить действительную ссылку на видео, но я никогда не делал это лично. Поскольку всем пользователям разрешено вставлять любое видео (если видео опубликовано c и встраиваемо), вы можете получить ссылку для вставки из API здесь и затем извлечь MP4 ссылка на файл из кода встраивания может быть? Просто идея.

...