背景
最近在整一个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文件:

播放rtsp:

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
















