Webkit中HTML5 Video的实现分析 (四) - 视频加载及播放的时序图

简介: MediaPlayer同MediaPlayerPrivateInterface,再同播放控件的交互过程应当要简单、清晰。MediaPlayer通过自身的状态(Network States 和 Ready States)来控制操作的步骤。

MediaPlayer同MediaPlayerPrivateInterface,再同播放控件的交互过程应当要简单、清晰。MediaPlayer通过自身的状态(Network States 和 Ready States)来控制操作的步骤。MediaPlayerPrivateInterface具体到不同的平台和视频格式,使用的具体的播放控件会不同。


这里仅贴一张时序图,其中没有特别区分HTMLVideoElement,使用的播放控件是Webkit默认的QuickTime组件。在调试时,最好要将UA调成iPad版本,不然服务器端可能提供的是Flash视频,就无从调试H5 Video了。

 


从代码中可以看到,WebKit将视频控件在WebCore中创建,而不是丢到前端实现。另外在加载完成后,readyState是HAVE_FUTURE_DATA后,会自动触发play()操作。

当视频元件是动态创建时,会使用scheduleLoad执行加载操作。而scheduleLoad是一个Timer,不会立即触发load函数,此时如果JS脚本执行了play()其实是无效的,实际执行的会由MediaPlayer调用NullMediaPlayer完成,当然也是无效的。只有当加载数据后,readyState改变,再由回馈到HTMLMediaElement,然后触发后面的play操作。

 

但当新的video元件创建后,不调用play()时为什么没有自动播放呢? 何时才真正进行播放,主要受到HTMLMediaElement的成员变量m_paused来控制的(虽然也涉及其它好几个状态,但m_paused却在这时起着决定性作用)。可以通过研究HTMLMediaElement::updateReadyState()中观察到(potentiallyPlaying函数)。

转载请注明出处:http://blog.csdn.net/horkychen

上一篇:Webkit中HTML5 Video的实现分析 (三) - MediaPlayer & MediaPlayerPrivate的生命周期

 

目录
相关文章
|
11天前
|
Web App开发 数据采集 移动开发
提升Selenium在Chrome上的HTML5视频捕获效果的五个方法
在Selenium中优化Chrome的HTML5视频捕获涉及更新Chrome和ChromeDriver、配置浏览器选项、使用代理IP、调整加载策略及确保安装了正确编解码器。例如,更新驱动程序,添加如`--autoplay-policy`和`--proxy-server`的命令行参数,使用代理以防止被封,设置页面加载策略为'eager',并安装必要的编解码器来确保视频播放。代码示例展示了如何集成这些优化措施。
提升Selenium在Chrome上的HTML5视频捕获效果的五个方法
|
20天前
|
前端开发 搜索推荐 UED
HTML表单提交的几种常用方式及其优缺点分析
HTML表单提交的几种常用方式及其优缺点分析
|
18天前
|
Web App开发 存储 JavaScript
HTML一个简单的视频提速写法构思
HTML一个简单的视频提速写法构思
|
18天前
|
Web App开发 移动开发 HTML5
文本,兼容性-----HTML5新增音频和视频标签
文本,兼容性-----HTML5新增音频和视频标签
|
19天前
|
JavaScript 前端开发 UED
【源码分享】简单的404 HTML页面示例,该页面在加载时会等待2秒钟,然后自动重定向到首页
【源码分享】简单的404 HTML页面示例,该页面在加载时会等待2秒钟,然后自动重定向到首页
45 0
|
2月前
|
移动开发 前端开发 JavaScript
如何实时准确地从HTML5视频中截取当前播放画面
如何实时准确地从HTML5视频中截取当前播放画面
113 4
|
2月前
比较美观的跳转加载页html源码
比较美观的跳转加载页html源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果
34 0
比较美观的跳转加载页html源码
|
2月前
|
移动开发 JavaScript 前端开发
APP的HTML5页面经过运营商网络被植入手机管家问题及分析,解决方案见新文章
APP的HTML5页面经过运营商网络被植入手机管家问题及分析,解决方案见新文章
31 0