gpt4 book ai didi

Android ExoPlayer 播放私有(private) Vimeo 视频

转载 作者:行者123 更新时间:2023-12-04 04:17:56 36 4
gpt4 key购买 nike

我正在尝试使用 ExoPlayer 播放 Vimeo 视频这是代码:

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)

我还尝试使用 AndroidVimeoExtractor 提取 Vimeo url它失败了,但有以下异常(exception):
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 .

最佳答案

有两种方法可以处理此问题
第一种解决方案

  • 使用 Vimeo 网络 API a link获取视频 URI 并使用它
  • 为 on vimeo 开发者创建应用程序 a link
  • 使用您的应用访问 token 和视频 ID,您可以获得视频 URL,然后将其传递给 Exo 播放器

  • 第二种解决方案 (这是解决方法和快速解决方案)
  • 使用 web View 重定向到 .mp4 url​​,然后使用重定向的 url 以 .mp4 结尾,用 Exo 播放器
  • 打开它

    webView = WebView(context).apply {
    settings.javaScriptEnabled = false
    webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
    val requestUrl = request?.url.toString()
    val uri = requestUrl.toUri()
    if (isVideoLink(requestUrl)) {
    preparePlayer(uri)
    webView?.release()
    webView = null
    return true
    }
    return false
    }
    }
    loadUrl(url)
    }

    fun isVideoLink(url: String): Boolean {
    return getMimeType(url)?.contains("video", true) ?: false
    }

    关于Android ExoPlayer 播放私有(private) Vimeo 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60171827/

    36 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com