记录VLCweb插件安装使用过程中遇到的问题及解决方法

由于要在web进行rtsp流的直播,在网上找到vlc插件可以实现(目前只有IE支持activex,所以只能用IE浏览器,我用的是IE11,操作系统为英文版win7,64位)。果断下载安装,查找vlc的开发资料。程序写好后发现时延很严重,项目要求时延小于300毫秒,通过修改network-caching参数时延可以接受,是否真的小于300毫秒未测试。在开发过程中还遇到了会自动开新窗口显示视频的问题(排查后发现是因为没有vlc句柄,视频找不到显示的地方,所以自己弹窗显示),通过优化代码得到解决。现将代码粘贴如下:

<html>
<head>
    <META http-equiv="Content-Language" content="zh-cn">
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
    <META http-equiv="Pragma" content="no-cache">
    <META content="MSHTML 6.00.2800.1106" name="GENERATOR">
    <link href="/assets/css/bootstrap.css" rel="stylesheet">
    <link href="/assets/css/theme.css" rel="stylesheet">
    <link href="/assets/css/font-awesome.min.css" rel="stylesheet">
    <script language="javascript" type="text/javascript" src="/js/base64.min.js" ></script>
    <script language="javascript" type="text/javascript" src="/js/Common.js" ></script>
    <script language="javascript" type="text/javascript" src="/js/PublicModule.js" ></script>
<script type="text/javascript" charset="UTF-8">
function init()
{
    if(!initStatus())
        return;
    var vlc=document.getElementById("vlc");
    var options = [":network-caching=300"];
    var rtspSource = "rtsp://"+window.location.hostname+"/main";
    var itemId = vlc.playlist.add(rtspSource,"",options);
    if( itemId != -1 )
    {
        // play MRL
       vlc.playlist.playItem(itemId);
    }
    else
    {
        alert("cannot play at the moment !");
    }
}

function initStatus()
{
    if (!isWindowsPlatform())
        return true;

    var obj;
    var state=false;
    // 判断VLC控件
    try {
            obj = new ActiveXObject("VideoLAN.VlCPlugin.2"); 
            //var xx = typeof(obj);
            if (typeof(obj) != 'undefined')
                state = true;
            delete obj;
            obj = null;
    }
    catch (e) {obj = null;}  
    // end 判断VLC控件
    if(!state)
    {
        document.getElementById("statusctl").style.display = "block";
        document.getElementById("player").style.display = "none";
    }

    return state;
}
function unload(){
    obj = document.getElementById("vlc");
    if(obj != null){
        obj.playlist.stop();
        obj.playlist.clear();
        delete obj;
        obj = null;
    }
}
</script>
</head>
<body onUnload="unload();" style="padding:1px;">
    <div id="player" style="display:block;">
    <object type='application/x-vlc-plugin' id='vlc' classid='clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921' codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab" width="1280" height="800">
            <param name='mrl' value='' />
            <param name='volume' value='50' />
            <param name='autoplay' value='true' />
            <param name='loop' value='false' />
            <param name='fullscreen' value='false' />
            <param name="ShowDisplay" value="True" />
            <param name="toolbar" value="true"/>
    </object>
    </div>
<br><br>
<div id="statusctl" style="text-align:center;display:none;">
    <a href='/download/vlc-2.2.4-win32.exe'>下载插件</a>
</div>
<!--
<input type="button" value="停止" οnclick="stop();" id="control_button">&nbsp;&nbsp;
-->
    <script type="text/javascript" src="/assets/js/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
        init();
        })
    </script>
</body>
</html>

 

下面说下自测过程中遇到的问题:

1、播放10多分钟后vlc和IE会长时间没反应,只能关闭进程结束。

解决方法:当时使用的是vlc3.0.8版本,换成3.0.10问题依然;改成低版本后解决,实测2.2.1和2.2.4都可以,其它版本未测试。

2、在我自己的电脑上程序运行正常,在别人的电脑上安装vlc后发现控件出不来。

详细情况:安装vlc后IE显示已加载并启用了控件(IE对运行activex的相关设置网上有很多,我就不赘述),但程序判断后显示控件未安装。

解决方法:英文版的64位win7应该安装64位的vlc;中文版的64位win7应该安装32位的vlc。

附:vlc各版本下载链接http://free.nchc.org.tw/vlc/vlc/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章