1. ホーム
  2. android

[解決済み] WebViewとHTML5 <video>

2022-08-05 10:47:39

質問

私は、他のものの間で "frames" 私たちのウェブサイトのいくつかの安物のアプリをつなぎ合わせています... 非常に単純な WebViewClient


ビデオにぶつかるまでは。

ビデオは、次のように行われます。 HTML5 要素で構成され、これらは Chrome や iPhone で問題なく動作し、エンコーディングの問題を修正した後は Android で素晴らしく機能します。

さて、揉め事です。 WebView はそれが好きではありません。 まったくです。 ポスター画像をクリックしても、何も起こりません。

ググってみると この は近いですが、video 要素ではなく 'link' (href のような...) に基づいているようです。 (onDownloadListener は video 要素で呼び出されないようです...)

onShowCustomView をオーバーライドするための参照も見ますが、video 要素では呼び出されないようです... shouldOverrideUrlLoading も...。

サーバーから xml を取得し、アプリで再フォーマットすることは避けたいと思います。ストーリー レイアウトをサーバー上に維持することで、アプリを更新し続けることを強制せずに、コンテンツをもう少しうまく制御できます。 ですから、ネイティブブラウザのようにタグを処理するようにWebViewを説得できれば、それがベストでしょう。

私は明らかに何かを見逃しています...しかし、何の手がかりもありません。

どのように解決するのですか?

私は誰かがそれを読んで、結果に興味がある場合に備えて、このトピックに答える。 WebView内でvideo要素(video html5タグ)を表示することは可能ですが、私は数日間それに対処しなければならなかったと言わざるを得ません。以下は、私がこれまでにたどった手順です。

-適切にエンコードされた動画を探す

-WebViewの初期化時に、JavaScript、プラグイン、WebViewClient、WebChromeClientを設定する。

url = new String("http://broken-links.com/tests/video/"); 
mWebView = (WebView) findViewById(R.id.webview);
mWebView.setWebChromeClient(chromeClient)。
mWebView.setWebViewClient(wvClient); mWebView.setWebViewClient(wvClient);
mWebView.getSettings().setJavaScriptEnabled(true)を実行します。
mWebView.getSettings().setPluginState(PluginState.ON)を実行します。
mWebView.loadUrl(url)を実行します。

-WebChromeClientオブジェクトでonShowCustomViewを処理します。

@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
    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);
            a.setContentView(video);
            video.setOnCompletionListener(this);
            video.setOnErrorListener(this);
            video.start();
        }
    }
}

-ウェブビューに戻るために、動画の onCompletion と onError イベントを処理します。

public void onCompletion(MediaPlayer mp) {
    Log.d(TAG, "Video completo");
    a.setContentView(R.layout.main);
    WebView wb = (WebView) a.findViewById(R.id.webview);
    a.initWebView();
}

しかし、ここでまだ重要な問題があると言わなければなりません。私は一度だけそれを再生することができます。私はビデオディスパッチャ(ポスターまたはいくつかの再生ボタンのいずれか)をクリックする二度目、それは何もしません。

私はまた、メディアプレーヤーウィンドウを開くのではなく、WebViewフレーム内でビデオを再生したいのですが、これは私にとっては二次的な問題です。

これが誰かの助けになることを願っています。また、コメントや提案に感謝します。

こんにちは、テリコーラ。