Nader Baltaji
Nader Baltaji

Reputation: 56

Android webview cannot play video file error

In one of the screens in my app, I load HTML string into a WebView, but for some reason, the WebView isn't able to load videos in divs, the video container shows error: This video file cannot be played: error code 102003 This is an example of the HTML that is being loaded, and which the video in it fails to laod:

 <html dir="rtl" lang=""><body><meta itemprop="thumbnailUrl" content="https://cdn.jwplayer.com/v2/media/8K9oJcsX/poster.jpg?width=720"/><meta itemprop="contentUrl" content="https://cdn.jwplayer.com/videos/8K9oJcsX-khorc1ya.mp4"/><div style="position:relative; overflow:hidden;"><script src="https://cdn.jwplayer.com/players/8K9oJcsX-4mQgHT7J.js"></script></div></div> <p>تابعي نصائح وأفكار دليل مطبخ سيدتي التي ستساعدك في الحصول على مائدة رمضانية فاخرة ومميزة حتى في أيام الحجر المنزلي.</p></body></html>

I have enabled javascript, added hardwareAcclerated=true added a chrome client and all the other things suggested on other questions.

val settings = webview.settings
            settings.domStorageEnabled = true
            settings.javaScriptEnabled = true
            settings.pluginState = WebSettings.PluginState.ON
            webview.webChromeClient = WebChromeClient()
            webview.webViewClient = WebViewClient()

            settings.setDomStorageEnabled(true);
            settings.setAppCacheEnabled(true);
            settings.setAppCachePath(getApplicationContext().getFilesDir().getAbsolutePath() + "/cache");
            settings.setDatabaseEnabled(true);
            settings.setDatabasePath(getApplicationContext().getFilesDir().getAbsolutePath() + "/databases");

            settings.allowFileAccess = true
            val formattedHtml = "<html dir=\"rtl\" lang=\"\"><body>" + tip.description + "</body></html>"
            webview.loadDataWithBaseURL("", formattedHtml, "text/html", "UTF-8", "")

Upvotes: 2

Views: 2804

Answers (2)

Nader Baltaji
Nader Baltaji

Reputation: 56

The problem was that the base URL was missing, which is making JWPlayer (the video host) throw an error.

The correct way to do it is to add local android_asset base URL

tipInformation.loadDataWithBaseURL("file:///android_asset/", s, "text/html", "UTF-8", null)

Upvotes: 0

nhcodes
nhcodes

Reputation: 2024

Just tried your video url in my webview and it worked. Here are my settings:

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setMediaPlaybackRequiresUserGesture(false);

So I would guess you have to set setMediaPlaybackRequiresUserGesture to false.

Upvotes: 2

Related Questions