12

OpenGL でレンダリングできるように、SurfaceTexture で WebView を描画しようとしています。

これまでのところ、標準的な方法で WebView で YouTube ビデオを正常に再生しました。

  ...
  webView.getSettings().setJavaScriptEnabled(true);

  if (Build.VERSION.SDK_INT < 8) 
  {
     webView.getSettings().setPluginsEnabled(true);
  } 
  else 
  {
     webView.getSettings().setPluginState(WebSettings.PluginState.ON);
  }
  webView.setWebChromeClient(new WebChromeClient() { });
  webView.setWebViewClient(new WebViewClient());
  ...

また、ハードウェア アクセラレーションがオンになっています。

 <application
        android:hardwareAccelerated="true"
 ...

また、このチュートリアルに基づいて、OpenGL で WebView を正常にレンダリングしました (ビデオの再生を除く) 。 matter-any-android-view-directly-to-opengl/

WebView の追加の初期化 (したがって、常に「ポートレート」であり、テクスチャに収まります):

 Point p = new Point();
 activity.getWindow().getWindowManager().getDefaultDisplay().getSize(p);
 webView.setLayoutParams(new ViewGroup.LayoutParams(p.x, p.y));
 surfaceTexture.setDefaultBufferSize(p.x, p.y);

WebView のオーバーライドされた onDraw メソッド:

@Override
public void onDraw(Canvas c)
{
   try
   {
      Point p = new Point();
      activity.getWindow().getWindowManager().getDefaultDisplay().getSize(p);
      Canvas canvas = surfaceTexture.lockCanvas(new Rect(0,0,p.x,p.y));
      canvas.save();
      canvas.translate(-scrollL, -scrollT);
      super.onDraw(canvas);
      canvas.restore();
      surfaceTexture.unlockCanvasAndPost(canvas);
   }
   catch (Surface.OutOfResourcesException e)
   {
      throw new RuntimeException(e);
   }
}

上記のハックを使用してレンダリングされた webview で YouTube ビデオを再生しようとすると、ビデオの四角形が黒くなります (ただし、サウンドは聞こえます)。ハードウェア アクセラレーションがサーフェス テクスチャで機能しないのではないかと思います。

質問は: OpenGL テクスチャで YouTube ビデオを再生する方法はありますか?

4

2 に答える 2

1

API レベル 23 で追加されたlockHardwareCanvasを使用してみてください。

于 2019-06-19T20:27:34.757 に答える