背景

最近在整一个VLC网页插件,遇到的一些问题,在此记录下。

问题描述

从网上获取了一个VLC的SDK包,打开ActiveX文件夹下的test.html,网页加载出来后,播放不了文件,折腾了很久,才知道是ActiveX控件并未安装,所以无论怎么弄都是没办法播放文件的。

问题解决

如果检测到插件没有安装,怎样让IE自动从指定位置下载插件并自动安装呢?
很简单,在VLC的sdk\activex\test.html下的object标签中使用codebase属性即可:

<object classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"
			        codebase="D:\axvlc.cab#version=1,0,0,1"
                    width="640"
                    height="480"
                    id="vlc">
</object>

codebase的值格式为“xxxxx.cab#version=1,0,0,1”。
'#'前面部分为cab文件的位置,可以是在服务器上的绝对位置,也可以是相对位置。
'#‘后面部分表示当前引用的cab包的版本号。
axvlc.cab是我们指定的CAB包。

当IE检测到系统没有注册指定插件,便从codebase指定的位置下载该cab到本地,并按照其中.inf文件的描述将各文件复制到指定位置并注册指定的控件。(:在实际应用中涉及签名问题,设置下载未签名的Active X控件,参考https://jingyan.baidu.com/article/4853e1e516d3091908f7265a.html

即使本地已经注册了该插件,IE还将拿已注册的控件版本号与codebase中指定的版本号相比较,如果codebase中指定的版本号大于已注册插件的版本号,IE仍然会从codebase指定位置下载cab包并重新注册该插件.

为方便管理,一般将cab包中需注册的ocx文件的版本号视同cab版本号。

当插件或插件依赖的文件需要升级时,只需更新相应的文件,并对.inf中的相应文件版本升级(为方便管理,无论是否更新了ocx文件,该ocx文件的版本号也跟着升级,因为其版本号代表了整个cab),然后重新打包成cab发布到服务器上,并更新html中object标签中codebase属性值的version部分版本号。当用户下次访问该页面时,IE将自动下载升级后的cab并重新注册插件。实际上,经过我的测试,即使服务器上的cab包不做任何变化,只要增加codebase中version的值,对应插件均会重新下载和注册。

vlc网页插件播放视频

VLC插件播放视频,用IE11打开test.html,然后把文件路径如file:///C:\Users\PC\Desktop\1.mp4或者RTSP的地址放进MRL地址框并单击go即可播放。

播放MP4文件:

ie11哪些插件可以兼容es6 ie11安装插件_控件

播放rtsp:

ie11哪些插件可以兼容es6 ie11安装插件_ie11哪些插件可以兼容es6_02

下载

根据此问题提供了VLC的SDK开发包(vlc-3.0.7)和VLC的cab开发包(vlc-3.0.4)