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

明确主要类的生命周期有助于更好理解Webkit中视频的工作流程。下图展示了类间的引用关系。

如HTMLVideoElement与一个MediaPlayer对应,MediaPlayer与MediaPlayerPrivate一一对应,它们都是一个组合关系,当所有者自身被析构时,会自动释放引用的实例。这个过程都是使用OwnPtr智能指针来实现的。

  OwnPtr赋值操作的代码:

       OwnPtr& operator=(std::nullptr_t) { clear(); return *this; }

 

下面是HTMLMediaElement (HTMLVideoElement)中维护MediaPlayer的主要状态 (只关注于创建与释放过程):

当每次因为src属性变化或新增节点等情况,最终会呼叫createMediaPlayer释放原先的实例,再重新创建一个新的MediaPlayer实例。

 

最后是MediaPlayer维护MediaPlayerPrivate(m_private)的状态图。同上图一相似。

 

上一篇:Webkit中HTML5 Video的实现分析 (二) - MediaPlayerFactory & RenderVideo的绘制操作

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

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

 

时间: 2024-10-25 05:15:55

Webkit中HTML5 Video的实现分析 (三) - MediaPlayer & MediaPlayerPrivate的生命周期的相关文章

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

MediaPlayer同MediaPlayerPrivateInterface,再同播放控件的交互过程应当要简单.清晰.MediaPlayer通过自身的状态(Network States 和 Ready States)来控制操作的步骤.MediaPlayerPrivateInterface具体到不同的平台和视频格式,使用的具体的播放控件会不同. 这里仅贴一张时序图,其中没有特别区分HTMLVideoElement,使用的播放控件是Webkit默认的QuickTime组件.在调试时,最好要将UA调

Webkit中HTML5 Video的实现分析(五) - WebKit中视频事件的传递

HTML的每个元素都可以让JavaScript在某些事件发生时,进行处理.就比如onclick="clickButton()"之类的属性设定. 像下面这篇博客所讲的一样,在WebKit中每个元素都有其对应的JS绑定的实现: [WebKit]为JavaScript Binding添加新DOM对象的三种方式及实作 对于视频元素,可以对应看看JSHTMLMediaElement.cpp和JSHTMLVideoElement.cpp中的实现. 这里只说一下事件的处理机制.就是在WebKit中有

Webkit中HTML5 Video的实现分析 (一) - 基本结构及HTMLMediaElement & MediaPlayer

以下为针对Webkit中HTML5 Video实现原理的分析和学习总结.至于其中的UML图档,可以到下面的github链接中下载. 首先预览一下Webkit中和Video相关的主要的类的层次结构: 其中主要的类为HTMLMediaElement, MediaPlayer以及RenderVideo(左下角). HTMLMediaElement代表了DOM结点,其继承关系可以追溯到Node,也就是DOM的结点.网页中Video/Audio元件的解析就是由它的创建开始.JavaScript的视频操作A

Webkit中HTML5 Video的实现分析(六) - Safari视频机制分析

Safari中的视频相关操作封装在QuickTime Plugin里面,存放于/Library/Internet Plugin目录下.   下图是相关类的class diagram: 其中的QuickTime Plugin是通过已淘汰的Apple之前定义的Webkit Plugin协议来实现的,而不是现在支持的Netscape API的机制. 可以参考以下文档:        Introduction to WebKit Plugin Programming Topic           We

Webkit中HTML5 Video的实现分析 (二) - MediaPlayerFactory & RenderVideo的绘制操作

MediaPlayerFactory MediaPlayerFactory像是一个解码库一样,初始化时,各个可用的播放器(MediaPlayerPrivate)向它注册.当需要解码时,由它给出一个合适的播放器(呼叫MediaPlayerPrivate::constructor,即MediaPlayerPrivate::create)创建一个实例[由MediaPlayer:: loadWithNextMediaEngine执行]).所以MediaPlayer与MediaPlayerPrivate应

AppleWatch开发入门三——代码交互与控制器生命周期

AppleWatch开发入门三--代码交互与控制器生命周期 一.引言         在前两篇博客中,讨论了关于watch开发中框架与界面布局相关,然而主要的逻辑,终究还是要通过代码来实现的,在我们创建了项目之后,就会生成InterfaceController这个文件,它就是我们storyBoard中的入口视图控制器. 二.代码交互与控制器声明周期         storyBoard中的控件我们可以通过拖拽的方式关联到文件中,Action和Outlet两种关联方式基本可以达到我们修改控件和处理

【HTML5 video】video标签的部分属性解析

转自:http://www.cnblogs.com/kiter/archive/2013/02/25/2932157.html   现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera.Mozilla.Chrome),支持H.264的(Safari.IE 9.Chrome),都不支持的(IE6.7.8).好吧,现在让我们从技术层面来认识HTML 5的视频,包括video标签的使用,视频对象可以用到的媒介属性和方法,以及

ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationInstance和ImplementationFactory属性均为Null,那么ServiceProvider最终会利用其ImplementationType属性返回的真实类型选择一个适合的构造函数来创建最终的服务实例.我们知道服务服务的真实类型可以定义了多个构造函数,那么ServiceProvid

网站分析:网站用户的生命周期价值分析

中介交易 SEO诊断 淘宝客 云主机 技术大厅 Avinash Kaushik的博客中最近更新的一篇文章--Calculate Customer Lifetime Value,里面非常详细地论述了什么是网站用户的生命周期价值(Lifetime Value,简称LTV),及为什么要使用LTV这个指标.其中主要阐述的是在SEM及网站推广的过程中不要仅关注于一次访问(Visit)中的转化率(Conversion Rates)和CPA(Cost Per Acquisition)这些指标,计算用户在网站的