当前位置: 首页 > 知识库问答 >
问题:

Android中的ExoPlayer未加载M3U8 QueryParameter(auth)

隆功
2023-03-14

我正在使用com.google.android。exoplayer2(exoPlayer版本='r2.5.2')和我必须加载/流式播放视频,如

> https://something.com/test/something.m3u8

它工作得很好。

但需求发生了变化,并据此改变了视频的“URL格式”,在URL的查询参数中添加了一些认证相关部分。

> https://something.com/test/something.m3u8?media-auth=exp=1623782763942~acl=/test/7dede44-djnjcndncj/*~hmac=3232434242

现在播放器没有加载此视频。

错误日志显示此错误。

2021-05-06 08:42:12.395 7020-7220/? E/ExoPlayerImplInternal:源错误。com.google.android.exoplayer2.upstream。HttpDataSource$InvalidResponseCodeException:403 at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:211)at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:141)at com.google.android.exoplayer2.upstream.DataSourceInputStream.checkopen(DataSourceInputStream.java:102)atcom.google.android.exoplayer2.upstream.DataSourceInputStream.open(DataSourceInputStream.java:65)位于com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:125)位于com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:315)位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)at java.lang.Thread.run(Thread.java:764)2021 05-06 08:42:12.396 7020-7020/?电子/视频播放视图:onError

HlsSource sourceHLS = new HlsSource(videoQuiz.video.id(),
                    videoQuiz.video.title(),
                    VideoHelper.prepareHlsVideoUriWithQuery("video URL"),
                    HlsSource.TIME_UNSET,
                    0,
                    HlsSource.TIME_UNSET,
                    0L, null);
            videoPlayerView.start(sourceHLS,
                    toUri(thumbnailUrl),
                    autoPlay,
                    getCurrentSegmentStartPosition());
            showQuestionAt(currentQuestionPosition);

下面我提到了我是如何更改“准备HlsVideoUriSusQuery”方法的。

public static Uri prepareHlsVideoUriWithQuery(String thisUrl) {
    URL url = null;
    try {
        url = new URL("video URL");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    Uri.Builder builder = new Uri.Builder()
            .scheme(url.getProtocol())
            .encodedAuthority(url.getAuthority())
            .encodedPath(url.getPath().substring(1))
            .encodedQuery("video-auth=exp=24244~test=/test/232323-3232323/*~test=24242c0232n3223");

    return builder.build();
}

那么,我必须更改哪个位置才能在exo player中加载m3u8 authstring?

和任何关于设置mimetype的想法在这里描述Android HLS视频mime类型

共有2个答案

吕自明
2023-03-14

如ExoPlayer文档中所述,当尝试打开连接导致响应代码不在2xx范围内时,将引发InvalidResponseCodeException。

错误消息告诉您服务器拒绝了请求,响应代码为403,这意味着您被禁止访问资源。

考虑到它在启用身份验证之前就可以工作,很可能您的令牌生成代码工作不正常,正在生成服务器认为无效的令牌。

潘泳
2023-03-14

我可以找到解决办法,

初始化类时,我添加了

private static final CookieManager DEFAULT_COOKIE_MANAGER;
static
{
    DEFAULT_COOKIE_MANAGER = new CookieManager();
    DEFAULT_COOKIE_MANAGER.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
}

在OnViewCreated()中,

    if (CookieHandler.getDefault() != DEFAULT_COOKIE_MANAGER)
    {
        CookieHandler.setDefault(DEFAULT_COOKIE_MANAGER);
    }

当数据源创建加载时,而不是

最终数据源。工厂dataSourceFactory=new DefaultDataSourceFactory(...)

我补充道

    DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory(MediaHelper.USER_AGENT);
    dataSourceFactory.getDefaultRequestProperties().set("Cookie", "cookieValue");

那就行了!

 类似资料:
  • 我试了所有的办法,但似乎都不奏效。据我说,图像的路径是正确的。(虽然我附上了一张图片供参考)。这就是我得到的错误- 这是**pubspec.yaml*- 名称:foodfast描述:一个新的颤振项目。 Publish_To:'none' 版本:1.0.0+1 环境:SDK:“>=2.7.0<3.0.0” 依赖项:flutter:SDK:flutter 弹出屏幕:^1.3.5 cupertino_i

  • 我有这个密码。 我正在加载这个url

  • 在谷歌宣布基于IntelliJ的Android Studio后,我想试一试,但我遇到了一个问题。它安装得很好,并且在安装过程中成功地找到了JDK,但是当我尝试启动它时,什么也没有发生。没有错误,没有闪屏没有什么。 还有其他人有过这个问题吗? 谢谢你能提供的任何帮助。

  • 这是我的m3u8,内置字幕: 我使用加载我的hls视频。我的m3u8文件怎么了?

  • 我的简单Web服务器是Python3 SimpleHTTPRequest estHandler,它工作得很好。它在LAN机器的图片文件夹中运行,我已经使用浏览器对其进行了测试并输入了测试URL,例如:http://192.168.1.111:8000/2020-02-09/test.jpg 但是,毕加索不会加载相同的URL。它将通过“file://”加载本地图片。作为测试,我测试了一个Intern

  • 我正在尝试加载图像使用壁画库,但我有一个奇怪的问题。 png图像正在加载,但我加载的是jpg图像我使用的壁画版本是2.0.0,我尝试了一切无效缓存,改变壁画版本,清除数据,重建项目。但对我来说没有任何意义。 不工作 //初始化壁画 您可以在下面看到所有的日志: