好吧,我已经好几天了,如何在android WebView上以全屏模式显示HTML5视频.
我设法在我的网页浏览中播放HTML5视频.在全屏模式下显示视频时出现问题.
正如我所知,android有两种处理<video>标签的方法:
在Android版本<= 2.3.3上,onShowCustomView方法被触发,我可以拥有VideoView实例,并在视频完成时设置监听器,设置控制器等.到目前为止一切顺利.
在ICS(可能是3.0及更高版本)上,看起来<video>以不同的方式处理.播放HTML5视频时,onShowCustomView未在正常模式下调用 - 看起来WebView内部有一个内部业务播放视频,并显示<video>标签中定义的所有控件 - I不能以任何方式访问它.实际上,如果视频是在正常模式下播放的,那么这是正常的,因为控件在那里并且正在工作.
这导致了一个大问题:当以全屏模式显示视频时,正在调用onShowCustomView - 但在ICS上,"view"参数不是VideoView的实例.
我设法发现该实例是VideoSurfaceView,一个HTML5VideoFullScreen类的私有内部类.我们访问这个内部类的唯一方法是通过反射.
在查看了这个类的GrepCode之后,我了解到与VideoView不同,HTML5VideoFullScreen $ VideoSurfaceView不包含我可以监听其事件或访问其控件的MediaPlayer实例.我唯一能做的就是把这个VideoSurfaceView原样放在一个全屏布局中而不用控制它.
底线 - 当以全屏显示视频时,我不知道视频何时结束,其控件未显示 - 这非常令人伤心.我无法获得关闭全屏的触发器.
我尝试了几个不成功的解决方法:
反思:我试图从内部类VideoSurfaceView到达HTML5VideoFullScreen实例,该实例包含一个MediaPlayer成员.我没有设法得到它,我不确定这是否可行(ViewSurfaceView不保存其所有者的实例).
通过Javascript(例如onended)注册视频事件,并通过JavascriptInterface处理我在JAVA中需要的东西:我发现这个解决方案不可靠,因为在这样做时我遇到了另一个问题:<video>标签可以嵌套在一个.iframe源不是我的,我无法获取其内容(getElementById或getElementsByTagName [i]为空) - 这意味着,我无法访问iframe中的<video>元素.
我仍在寻找解决方案,关于这个问题的报道很少.有人设法解决它吗?非常感谢帮助!
VideoView类:这里(有MediaPlayer)
HTML5VideoFullScreen $ VideoSurfaceView类:这里(没有MediaPlayer)
根据:
http://developer.android.com/sdk/android-2.0-highlights.html
Android 2.0应该支持HTML5视频元素.我无法使用摩托罗拉Droid工作,并且无法在任何HTML5视频示例页面上成功查看视频.由于目前不支持QuickTime或Flash,这是我在网页中嵌入mp4视频时唯一能想到的.有人有运气吗?
我正在研究一个星期,找到一个简单且独立于平台的方法来将mp4文件流式传输到任何浏览器.在浏览器不兼容的情况下,将使用渐进流(直接下载)方法.我的情况是这样的:
在研究Apple HLS,Adobe Flash Stream,Microsoft Smooth,RTSP和MPEG-DASH之后,似乎MPEG-DASH是正确的解决方案.但问题是MPEG-DASH迫使我将mp4文件拆分为单独的分段文件,这导致存储mp4文件的重复消耗空间,因为在浏览器不兼容的情况下我必须支持渐进式流.然后存储带有分段mp4文件的单个mp4文件是不可避免的.
问题是:有没有办法在任何浏览器中将单个 mp4文件作为http流和渐进流提供?
MPEG-DASH协议表示它支持多路复用文件,但问题是dash.js不支持它.有没有其他javascript播放器支持带字节范围请求的多路复用和单个mp4文件?
任何其他提交我的场景条件的解决方案都受到欢迎.谢谢.
参考文献: BitCodin.com 1 BitCodin.com 2
android ×2
dash.js ×1
html5 ×1
html5-video ×1
http ×1
javascript ×1
mobile ×1
mpeg-dash ×1
video ×1