iOS的QuickTime Plugin

原创 2013年05月07日 18:13:57
当UIWebView播放视频时,可以看到view hierarchy里有FigPluginView的身影。这个类来自于QuickTime Plugin,plugin的路径为:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Internet Plug-Ins/QuickTime Plugin.webplugin
这是个文件夹,里面还有链接库以及文件和图片资源。
QuickTime Plugin这个名字起得很响亮,其实代码并不多,Objective-C类只有9个,也就只是FigPluginView为主了。与WebKit.framework有耦合,或者说就是为了封装视频播放控件来给WebKit.framework用的。类关系如下图:


UIWebDocumentView会以成员变量struct __CFDictionary *_plugInViews来配对FigPluginView和UIWebPlugInView,其中FigPluginView为key,UIWebPlugInView为value。
UIWebPlugInView有成员变量UIView *_uiView指向FigPluginView,
FigPluginView有成员变量WAKView *_wakView指向UIWebPlugInView。

当然,视频只是PluginView的一种,UIWebPlugInView还会管理别的种类的plugin。

渲染流程中会有这样的关系:

RenderLayerBacking在更新layer树时,从RenderWidget出发通过几层关系得到UIWebPlugInView,调用其函数attachPluginLayer把FigPluginView添加到UIWebDocumentView中。注意这个“添加”是通过好多层CALayer间接实现的,UIWebPlugInView还会创建一个hostLayer作为MediaLayer。调用链的末端实现代码如下:

- (void)_connectPluginLayers
{
    WebThreadLock();
    if (!_hostingLayer)
    {
        _hostingLayer = [[CALayer alloc] init];
    }
    [_webView.layer insertSublayer:_hostingLayer atIndex:0];
    if ([[_webView webView] _setMediaLayer:_hostingLayer forPluginView:self])
    {
        self.parentedInLayer = YES;
        [_uiView retain];
        [_hostingLayer addSublayer:_uiView.layer];
        [_uiView release];
        [_webView _setSubviewCachesNeedUpdate:YES];
        [self _reshapeOnMainThread];
    }
}

这里只列个大概了,类间网状依赖,好难画图和用文字说明。总之可以更确定,WAKView就是替代了NSView,以求和Mac的WebView共用代码,但iOS application是单进程程序,只能用CALayer树来代替NSView树做组合了。

版权声明:转载请注明出处:http://blog.csdn.net/hursing

整合Plugin-X之后的ios项目配置

几个月前写过一篇《整合Plugin-X之后的Android项目配置》,这一篇来说说ios上项目的配置。 官方也只写了android的插件整合,ios的并没有给出官方的文档,其实直接嵌入插件,可能还简...

sublime3 apicloud plugin配置iOS真机调试

sublime3 apicloud plugin配置iOS真机调试,根据官文配置出现了某些问题,自己总结一下。...

Ionic跨平台项目(九) 自定义cordova plugin(iOS)

插件的意义 plugin(全文都叫插件)是一个注入代码的包,它允许app呈现的Cordova webview与其运行的native平台进行通信。插件可以访问基于Web的app通常不可用的设备...

关于Unity中不用安装QuickTime播放视频的方法

前言由于Unity中能够识别的视频格式主要有:.mov, .mpg, .mpeg, .mp4, .avi, .asf,但是其实最后这些格式的时候在导入到Unity中的时候,都会再进行一次Unity内部...

从QuickTime到Beats:回顾苹果历史上的音乐传奇

随着收购的尘埃落定,苹果CEO库克的手终于和Beats的创始人Dr.Dre和Jimmy Iovine的手握在了一起。这也标志着,苹果在耳机设备和流媒体音乐方面又向上迈了一个台阶。   苹果作为掀起数...

MAC上QuickTime截取音乐片段/iphone换铃声

1.--------iPhone支持的铃声格式为.m4r;可以直接把.mp3改成.m4r; 2.-----剪辑歌曲,铃声最长40秒的时间--------打开quicktime,选择要剪辑的歌曲; ...

苹果发布了QuickTime Windows版本的安全升级补丁

苹果发布了QuickTime Windows版本的安全升级补丁   随着苹果发布了一个能修复多重安全漏洞的补丁,苹果要求Windows用户升级他们的QuickTime。   QuickTi...

QuickTime的桌面录制

今天看见好多人竟然不知道Quicktime有桌面录制机能,我就简单的说一下 我么打开QuickTime,进入菜单如图: 点击录制之后我们会看到一个新的桌面,如图: 我们点击那个红...

QuickTime 流媒体编程介绍~~

流媒体的传送包含从服务器经由网络(比如因特网)向客户机传送电影的过程。服务器将电影分解成可以通过网络传送的数据包。而在接收端,这些数据包被客户机重新组合,并且当电影还在传送时,客户机上已经可以播放该电...
  • ligltc
  • ligltc
  • 2011年07月28日 16:21
  • 986
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS的QuickTime Plugin
举报原因:
原因补充:

(最多只允许输入30个字)