Как воспроизвести видео в веб-просмотре по ссылке, которая требует аутентификации? - PullRequest
1 голос
/ 24 марта 2020

У нас есть несколько видео, размещенных на нашей платформе. Скажем, mydomain.com/no_auth_video_1 и mydomain.com/no_auth_video_2, например. Теперь мы добавили третье видео mydomain.com/auth_video_3, но это можно увидеть, только если вы добавите несколько заголовков аутентификации в запрос.

В нашем приложении android мы используем WebView для воспроизведения этих видео. У нас есть шаблон html:

<!-- html stuf -->
<video>
<source src="%videoUrl%"/>
</video>
<!-- html stuf -->

и, заменив URL, мы загружаем html в веб-просмотр:

webView.loadData(html, "text/html", "utf-8")

Это прекрасно работает для no_auth видео, но не для видео, которое требует аутентификации. Ища ответов , я обнаружил, что мы должны переопределить метод shouldInterceptRequest в WebViewClient:

@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
    String url = request.getUrl().toString();

    if (urlShouldBeHandledByWebView(url)) {
          return super.shouldInterceptRequest(view, url);
    }

    return getNewResponse(view, url);
}

private WebResourceResponse getNewResponse(WebView view, String url) {

    try {

        OkHttpClient okHttpClient = getMyAuthenticatedHTTPClient()
        Request request = new Request.Builder()
                .url(url)
                .build();
        final Response response = okHttpClient.newCall(request).execute();

        return new WebResourceResponse(
                response.header("content-type", null),
                response.header("content-encoding", "utf-8"),
                response.body().byteStream()
        );

    } catch (Exception e) {
        return null;
    }

}

Это работает, так как запрос для mydomain.com/auth_video_3 выполняется, и я можно увидеть, что информация извлекается правильно с помощью отладчика. Проблема в том, что в WebView видео все равно не загружается.

...