最近做一个前端的项目,项目需要引用VLC浏览器插件,javascript在IE、Firefox等浏览器上都没有问题,唯独在Chrome(谷歌)浏览器中插件不能被会支持。

    不断更换Chrome版本后发现了问题。只有41版本以前才支持VLC插件。后来查阅资料发现,这是NPAPI和PPAPI的问题。

    简单的说,NPAPI(Netscape Plugin API)插件接口最早是专为Netscape浏览器开发的,后来成为其它浏览器共同支持的插件标准、像平时看到的什么阿里旺旺、百度云下载的那种悬浮窗也是根据NPAPI开发的。相对于NPAPI,PPAPI就是Chrome要支持的新的标准。

      为什么要换API?他们是这么说的:(NPAPI)存在性能、挂起、复杂性和安全等方面的问题,另外不支持移动设备也是淘汰它的主要原因。

 

另一个坏消息:

        Mozilla已经计划从今年12月起就停止对NPAPI插件的支持。Mozilla产品管理总监Chad Weiner说,一个强大而开放的Web应该不需要任何特殊用途的插件就能在任何地方运行。那就意味着在2015年12月之后,火狐等浏览器也不能支持NPAPI插件了。当然目前还有什么加入白名单之类的办法可以勉强使用。

 

下面说一下,chrome浏览器支持VLC的过程(其他NPAPI插件类似):

一、查看浏览器版本

  浏览器“帮助和简介”->“关于”中查看。

 

二、根据不同版本按下面步骤操作

    41以前版本的Chrome

      直接在地址栏chrome://plugins/找到相应的插件,勾上“总是允许”重启浏览器即可。

      

zabbix 监控项 不支持 监控插件不受支持_zabbix 监控项 不支持

    42-45版本的Chrome:

      地址栏输入:chrome://flags/,如下图,点击“启用”NPAPI插件。

       

zabbix 监控项 不支持 监控插件不受支持_vlc_02

      然后在地址栏输入:chrome://plugins/找到相应的插件,勾上“总是允许”重启浏览器即可。

       

zabbix 监控项 不支持 监控插件不受支持_zabbix 监控项 不支持_03

       当然重启之后他任然会弹出一个幸灾乐祸的温馨提示:“此插件很快就不支持了”。但并不影响使用。

    46-以后版本的Chrome:

       换浏览器版本吧,在2015年9月之后,他们只支持PPAPI。

        首先卸载Chrome,打开控制面板->卸载,

        然后选中“同时删除您的浏览数据”(低版本的Chrome不能读取高版本的数据格式,所以一定要选中),点击 卸载,再安装低版本的Chrome即可。

         

zabbix 监控项 不支持 监控插件不受支持_chrome_04

 

三、当然也还有一个临时的办法,如果不卸载46版本,可以下载Chrome的绿色版。

    下载地址:http://www.portablesoft.org/google-chrome-legacy-versions/,到文件夹后直接点击可执行文件。重复上述配置即可。

 

参考网址:


http://www.linuxidc.com/Linux/2015-04/116342.htm

http://www.cnbeta.com/articles/253889.htm

http://bbs.kafan.cn/thread-1631975-1-1.html

个人亲测经验

1本人使用的VLC版本 3.0.3-win64   详情可参考

2本人使用的chrome版本4.4地址           链接:https://pan.baidu.com/s/1XOoRBFrZl_Kfe_98RW2ayQ 密码:ql7i

转载地址:

3 chrome各版本下载地址https://www.chromedownloads.net/chrome64win/

设置阻止chrome自动更新https://jingyan.baidu.com/article/76a7e409f2137afc3b6e15be.html

如何将UDP转TCP

转载地址:

web 端播放rtsp 流,一般都是采用vlc插件,默认是用 UDP 协议播放,这就会存在丢包的可能性,导致界面会变花,要想不花,需要使用更可靠的TCP协议。关于这两种协议的区别,大家可以自行查资料。

Web VLC 文档设置

官方文档上面告诉我们设置的方式 ,大家可以查看文档 ,代码如下:

var options = new Array(":aspect-ratio=4:3", "--rtsp-tcp");
var id = vlc.playlist.add("rtsp://servername/item/to/play", "fancy name", options);
vlc.playlist.playItem(id);

但是我按文档的方式设置了,通过抓包的方式查看还是 UPD 协议,这是就有点崩溃了,一顿通过 Google 找解决方法,可是都没有用。

探索结果

最终的解决方法其实很简单 ,把参数 --rtsp-tcp 设置成 rtsp-tcp 

var options = new Array("rtsp-tcp")
var id = vlc.playlist.add("rtsp://servername/item/to/play", "fancy name", options);
vlc.playlist.playItem(id);