到目前为止,我在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(播放视频除外):http://anuraagsridhar.wordpress.com/2013/03/13/rendering-an-android-webview-or-for-that-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方法:
@OverrIDepublic voID onDraw(Canvas c){ try { Point p = new Point(); activity.getwindow().getwindowManager().getDefaultdisplay().getSize(p); Canvas canvas = surfaceTexture.lockCanvas(new Rect(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视频?
任何令人满意的解决方案几乎都需要使用私有API来访问本机代码中的视频窗口.根据您计划使用SurfaceTexture的方式,您可能会想出一种解决方法,包括拦截WebVIEwClIEnt中的URL,在渲染之前剥离任何视频标签,以及将视频放置在您控制下的SurfaceVIEw或TextureVIEw中.然后,您可以将它放在与绘制SurfaceTexture的位置相关的位置,但这会将SurfaceTexture的使用限制为广告牌.不过,那种黑客攻击很快就会变得非常丑陋.
简而言之,我没有看到干净的方法来做到这一点.这是一个不错的主意,但它不适用于公共API.
总结以上是内存溢出为你收集整理的Android – 在SurfaceTexture上绘制YouTube视频全部内容,希望文章能够帮你解决Android – 在SurfaceTexture上绘制YouTube视频所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)