android - 无法在 Web View 中播放视频

标签 android android-layout android-webview

我无法在 Android WebView 中播放视频。

我已将 html 和视频文件保存在我的 Assets 文件夹中。

每当我加载 html 文件时,它都会给我错误

05-01 12:31:16.092: E/MediaResourceGetter(17241): Unable to read file: file:///android_asset/MediaBook2%20(2)/2B952499A0E681.mp4

每当我按下播放按钮时,我都会收到以下错误

05-01 12:31:23.680: E/chromium(17241): [ERROR:webmediaplayer_android.cc(328)] Not implemented reached in virtual void content::WebMediaPlayerAndroid::setRate(double)
05-01 12:31:23.710: E/MediaPlayer(17241): error (1, -2147483648)
05-01 12:31:23.710: E/MediaPlayer(17241): Error (1,-2147483648)

能够加载任何远程视频并运行,但问题是当我从 Assets 文件夹加载本地视频时 加载文件和设置 WebView 的代码

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    // Remove title bar
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.activity_webview);
    mContentView = (LinearLayout) findViewById(R.id.linearlayout);
    // Keep the webview setup ready
    setupWebView();


}

public void setupWebView()
{
    webView = (WebView) findViewById(R.id.webView);
    // progressBar = (ProgressBar) findViewById(R.id.progressBarForWebView);

    WebSettings webViewSettings = webView.getSettings();
    webViewSettings.setJavaScriptEnabled(true);
    webViewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    webViewSettings.setPluginState(PluginState.ON);
    webView.getSettings().setAllowFileAccess(true);
    webView.setSoundEffectsEnabled(true);
    webView.setWebViewClient(new SLCWebViewClient());
    webView.setWebChromeClient(new WebChromeClient());
    loadContentsInWebView();

}
public void loadContentsInWebView()
    {

        String localURL = "file:///android_asset/MediaBook2 (2)/SampleForVideo.html";
        logger.debug("WebView URL: {}", localURL);
        try {
            webView.loadUrl(localURL);
        }
        catch (Exception e) {
            e.printStackTrace();
            logger.error("Error while loading url", e);
        }
    }
    private class SLCWebViewClient extends WebViewClient
{
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        view.setWebChromeClient(new WebChromeClient()
        {

            private View mCustomView;

            @Override
            public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback)
            {
                // if a view already exists then immediately terminate the new one
                if (mCustomView != null) {
                    callback.onCustomViewHidden();
                    return;
                }

                // Add the custom view to its container.
                mCustomViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER);
                mCustomView = view;
                mCustomViewCallback = callback;

                // hide main browser view
                mContentView.setVisibility(View.GONE);

                // Finally show the custom view container.
                mCustomViewContainer.setVisibility(View.VISIBLE);
                mCustomViewContainer.bringToFront();
            }

        });

        webView.loadUrl(url);

        return true;
    }

The Sample For Video.html 代码

    <!DOCTYPE html>
<html>
<title>Testing for Video</title>
<body>

<video width="320" height="240" controls>
  <source src="2B952499A0E681.mp4">
</video>

</body>
</html>

布局文件的代码

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout
      android:id="@+id/fullscreen_custom_content"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="#FF000000"/>

<LinearLayout 
      android:id="@+id/linearlayout"
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

 <WebView
       android:id="@+id/webView"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" />

干杯, 索拉夫

最佳答案

感谢 Marcin 的回答。

我可以通过加载视频来运行 html 文件。 我的问题是我使用的是/MediaBook2 (2)/SampleForVideo.html。但是从 Assets 加载时应该删除“/”。我通过剪掉“/”来拆分字符串并且它起作用了。

但这只是我用来澄清我的理解的示例场景。

我有一个更大的文件夹结构,现在最终加载了 .mp4 文件。

显示了媒体播放器,但播放器没有播放任何文件。

关于android - 无法在 Web View 中播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23403445/

相关文章:

java - ClickableSpan - 类不是抽象的并且不会覆盖抽象方法

android - 可以在 RelativeLayout 内部的表面上使用 setFixedSize 吗?

Android WebView - 在方向后调整大小而不重新加载页面

android - 让 Android 上的 WebView 使用 prefers-color-scheme : dark

javascript - 在Android中使用多个webview来模拟Javascript线程

Android 9 上的 java.lang.IllegalStateException

android - 如何在完成时从最近的应用程序列表中删除 Activity ?

java - RecyclerView 中的 CardView 垂直滚动

android - Proguard 警告 "can' t 写入资源 [META-INF/MANIFEST.MF](重复的 zip 条目)”

android - 回收 View 与 ScrollView 中的线性布局?