【问题标题】:Video not playing on android webview视频无法在 android webview 上播放
【发布时间】:2012-10-27 10:19:45
【问题描述】:

我正在使用 Android 和 PhoneGap 应用程序,并且正在使用 HTML5 视频标签在我的网页上播放视频。当我播放视频时,视频不可见,视频本身也不会播放。如何在 Android 上播放 HTML5 视频?

下面给出的相同代码

<!DOCTYPE HTML>
<html>
    <head>
    <script type="text/javascript" charset="utf-8" src="cordova-1.8.1.js"></script>
        <meta http-equiv="content-type" content="text/html; charset=">
        <title></title>
    </head>
    <body >


        <video id="video" autobuffer height="240" width="360" onclick="this.play();>
<source src="test.mp4">
<source src="test.mp4" type="video/webm">
<source src="test.mp4" type="video/ogg">
</video>

        <div id="msg"></div>

<script type="text/javascript">

</script>

    </body>
</html>

以及活动类的onCreate方法-->>

public void onCreate(Bundle savedInstanceState) {            
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final WebView webView = (WebView) findViewById(R.id.webview);
        WebSettings webSettings = webView.getSettings();
        webSettings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); 

        webView.getSettings().setJavaScriptEnabled(true);

        webSettings.setBuiltInZoomControls(true);
        webSettings.setPluginState(PluginState.ON);

        webView.getSettings().setPluginsEnabled(true);
        webSettings.setAllowFileAccess(true);

        webView.loadUrl("file:///android_asset/www/html5videoEvents.html");      
}

【问题讨论】:

标签: android html video


【解决方案1】:

在将 HTML 内容加载到 WebView 之前添加这些行。

wv.setWebChromeClient(new WebChromeClient() {
});

来自文档:

为了在您的应用程序中支持内联 HTML5 视频,您需要开启硬件加速,并设置 WebChromeClient。对于全屏支持,需要实现 onShowCustomView(View, WebChromeClient.CustomViewCallback) 和 onHideCustomView(),getVideoLoadingProgressView() 是可选的。

【讨论】:

    【解决方案2】:

    试试这个。

    MainActivity.java

    public class MainActivity extends Activity {
    
        WebView webPage;
        Button next;
        String rootDir = "file://" + Environment.getExternalStorageDirectory()
                + "/iR-unzip/testbook/";
        WebChromeClient webChromeClient = new WebChromeClient();
        WebViewClient webViewClient = new WebViewClient();
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            webPage = (WebView) findViewById(R.id.webview);
            webPage.setWebChromeClient(webChromeClient);
            webPage.setWebViewClient(new MyWebViewClient());
            webPage.getSettings().setJavaScriptEnabled(true);
            webPage.getSettings().setPluginsEnabled(true);
            //webPage.getSettings().setPluginState(PluginState.ON);
            webPage.getSettings().setLoadWithOverviewMode(true);
            webPage.getSettings().setUseWideViewPort(true);
    
            webPage.loadUrl(rootDir + "/" + "chapter_1.html");
            next = (Button) findViewById(R.id.page_changer);
            next.setOnClickListener(new View.OnClickListener() {
    
                public void onClick(View v) {
                    webPage.loadUrl(rootDir + "/" + "chapter_2.html");
                }
            });
    
        }
    
        public class MyWebChromeClient extends WebChromeClient {
    
            @Override
            public void onShowCustomView(View view, CustomViewCallback callback) {
                // TODO Auto-generated method stub
                super.onShowCustomView(view, callback);
                if (view instanceof FrameLayout) {
                    FrameLayout frame = (FrameLayout) view;
                    if (frame.getFocusedChild() instanceof VideoView) {
                        VideoView video = (VideoView) frame.getFocusedChild();
                        frame.removeView(video);
                        video.start();
                    }
                }
    
            }
        }
    
        public class MyWebViewClient extends WebViewClient {
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        }
    }
    

    【讨论】:

    • 谢谢你的代码。你能把你提到视频文件的html文件发给我吗
    • @rand 请查看此链接上的 html 文件。 stackoverflow.com/questions/13085424/…
    • 谢谢你的回应,所以你正在使用 sdcard 但我试图从 assets/www 文件夹加载 html。你知道怎么做吗
    • 写入资产路径而不是 sdcard 路径。
    • @Dipak 在打开跟踪文件时出错:在模拟器 4.1 中运行时没有这样的文件或目录 (2)..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2012-08-18
    • 2012-12-16
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多