当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];  }
}  /* 何问起 hovertree.com */

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

推荐:http://www.cnblogs.com/roucheng/p/3528371.html

iOS的QuickTime Plugin相关推荐

  1. iOS 各版本中的新特性(What's New in iOS)- 目录翻译完成

    iOS 各版本中的新特性(What's New in iOS) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致&q ...

  2. Flutter入门:application、module、package、plugin

    我们用AS创建flutter项目时,会看到几个选项:application.module.package.plugin. application 就是一个新flutter app,这个没什么可说的 m ...

  3. web dialog 内嵌 图片_Unity游戏如何在iOS上调用Facebook原生对话框分享图片

    原文发表于Unity中国论坛 ,如果对你有帮助请关注我! Unity游戏如何在iOS上调用Facebook原生对话框分享图片 - Unity​unity.cn 手头上的一个游戏项目需要实现截屏并分享到 ...

  4. 持续集成之jenkins基础

    Jenkins基本概念 - 基于JAVA开源的自动化系统平台 - 在servlet容器中运行,如apache tomcat - 提供CI,CD任务及流水线的服务 - 所有类型的任务:构建.测试.部署等 ...

  5. 揭密微信《跳一跳》小游戏那些外挂

    张小龙:这个游戏发布以后,其实它的效果有点超出我们的预期,我们自己开玩笑说,这个游戏突然变成了有史以来可能用户规模最大的一个游戏,因为它的DAU大概到了1点几亿,但同时出现了很多外挂,我没有想到这么小 ...

  6. 你知道这个C#开发跨平台APP的样例介绍开源项目吗?

    站长英文太差就不翻译了,大家看效果图,都是使用Xamarin.Forms开发的开源移动App介绍,感兴趣的可以访问Github和Gitee仓库看看,下载对应的App项目研究. Github:https ...

  7. Akamai阿卡迈_abck逆向sensor_data(一)

    Akamai阿卡迈:常用于国外网站,2019年初期版本验证cookies中的_abck,后期增加ak_bmsc等其他指纹设备. 常见网站: 韩国大韩航空:https://www.koreanair.c ...

  8. 苹果iPhone手机内文件目录大全

    最全最详细!苹果iPhone手机内文件目录大全! 应该是现今国内最全的iPhone手机目录-众所周之,iPhone采用的是MAC OS系统,所以如果了解了内部文件结构,也就意味着可以很容易更改一些设置 ...

  9. 友盟php接入统计,ionic2 接入友盟统计

    SDK下载 ionic2是基于cordova来实现移动app开发的,因此我们需要先下载友盟的cordova sdk:http://dev.umeng.com/analytic... Android配置 ...

  10. iphone竖屏视频旋转_如何在iPhone上旋转视频

    iphone竖屏视频旋转 We all know that feeling: you record a video on your iPhone in portrait mode, and then ...

最新文章

  1. 最大流 ---- 最大不相交路径数 ---- P2766 最长不下降子序列问题(网络流24题)
  2. linux shell ddos木马,利用Shell 脚本解决DDOS攻击问题
  3. Python爬虫(九)_案例:使用正则表达式的爬虫
  4. leetcode_486. Predict the Winner
  5. python逐行读取excel_python对execl 处理操作代码
  6. Java-线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
  7. 怎么打钩_如何在excel中打钩
  8. new运算符与malloc函数区别
  9. yum 安装、 rpm安装、 源码编译安装
  10. 流氓软件卸载神器geek
  11. Windows10 查看电脑关机时间(提交忘记打卡申请必备)
  12. oracle报错ora-01033解决办法
  13. linux25g网卡设定,工程师笔记|刷新Mellnaox 25G网卡固件的方法,你get了吗
  14. T293037 [传智杯 #5 练习赛] 白色旅人
  15. python随机函数random、画、星轨_如何使用 NVIDIA StyleGAN 生成自己的动漫(老婆)头像...
  16. python爬虫导入自己事先定义好的配置文件,在服务器运行出现ImportError: No module named 'a005_BanGuMi_spider_subject' 错误
  17. JAVA资深架构师成长路线
  18. 1、Basic4android简介
  19. appendChild()方法
  20. 使用Scrapy爬取豆瓣电影排行榜

热门文章

  1. mysql数据库下载和创建
  2. 判断点在多边形内部的方法(Java版)
  3. VS2010中的单元测试【转载】
  4. struts2整合spring3整合成功但是spring无法注入
  5. lax文件的编码问题
  6. Silverlight 与 WPF 的一些差异
  7. the JAR file spring-beans-4.0.0.RELEASE.jar has no source attachment
  8. ubantu中让g++支持c++11的办法
  9. bzoj 5297 [Cqoi2018]社交网络 高斯消元+Matrix-Tree定理
  10. c# 全局钩子实现扫码枪获取信息。