javascript - 在具有良好浏览器兼容性的网页上播放 Rtsp 流的最有效插件

标签 javascript html ajax rtsp

这是我的代码的概述。 用户按下录制按钮,它会点击服务器以启动监控流,并返回我想在网站上播放的 rtsp url。

我试过 vlc 插件,但它似乎不可靠,下面的代码会产生后面提到的问题。

非常欢迎任何其他实现此功能的想法。

  xmlhttp.onreadystatechange  = function()
    {
     if (xmlhttp.readyState == 4) {
       if(xmlhttp.status == 200) {
         res_array = xmlhttp.responseText.split("#");
         session_id = res_array[0];
        alert(res_array.length);
         if (res_array.length == 4)
         {
             document.getElementById("jsession").innerHTML = xmlhttp.responseText;
             rstp_url = res_array[1];
             jsession_id = res_array[2];
             var vid_tag = '<OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"';
             vid_tag += ' codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab"' ;
             vid_tag += ' width="320" height="240" id="vlc" events="True"> <param name="Src" value=" ' + rstp_url +' " /> ';
             vid_tag += ' <param name="ShowDisplay" value="True" /> <param name="AutoLoop" value="False" /><param name="AutoPlay" value="True" />' ;
             vid_tag += '<EMBED pluginspage="http://www.videolan.org" type="application/x-vlc-plugin" progid="VideoLAN.VLCPlugin.2" width="320" height="240"' ;
             vid_tag +=' autoplay="yes" loop="no" target="'+rstp_url+'" name="vlc"> </EMBED></OBJECT>';
             document.getElementById("StopRecording").disabled = false;
             document.getElementById("StartRecording").disabled = true;
             document.getElementById("StopPlayback").visible = false;
             document.getElementById("Playback").disabled = true;
             alert(vid_tag);
             document.getElementById("video_handler").innerHTML = vid_tag;
             document.getElementById("jsession").innerHTML = xmlhttp.responseText;//Update the HTML Form element
         }
         else
            {
             alert("Make sure usename,password and deviceref is correct");
            }
       }
       else {
          alert("Error during AJAX call. Please try again");
       }
     }
};

这些是我遇到的以下问题。

  • 无法在 IE6 中运行。
  • 流播放不可靠。它有时播放有时不播放。解决这个问题的唯一正确方法似乎是在 res_array 长度之后添加一个警告框 if check
  • 即使尝试播放音频源,也会出现播放视频的黑框。

附言如果我尝试使用 HTML5 并且我了解 jquery 等框架,这会不会变得更容易,但我不可能在这个项目中使用它。

最佳答案

由于您没有提及操作系统: 另一个仅限 Windows 的选项是编写您自己的 RTSP DirectShow 源过滤器。然后可以为 RTSP 协议(protocol)注册这样的过滤器。在网页上,您可以通过以下方式插入:

<div id="mtvPlayer"> 
    <embed 
        type="application/x-mplayer2" 
        pluginspage="http://www.microsoft.com/Windows/MediaPlayer/" 
        name="mediaplayer1" 
        ShowStatusBar="true" 
        EnableContextMenu="false" 
        autostart="true" 
        loop="false" 
        src="rtsp://<<RTSP URI>>" 
        width="352px"
        height="288px"
    /> 
</div> 

如果过滤器注册正确,RTSP 源过滤器会自动加载并构建适当的媒体管道。这是我使用过的方法,它适用于 IE8、chrome 和 firefox。我还没有用 IE6 测试过它。反正谁还在用那个浏览器 :P

这种方法的缺点是工作量很大(而且很复杂),或者至少您需要一些扎实的 DirectShow 经验才能实现过滤器并满足不同的媒体类型。

关于javascript - 在具有良好浏览器兼容性的网页上播放 Rtsp 流的最有效插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6211330/

相关文章:

javascript - 花式盒子 - "The requested content cannot be loaded."

javascript - 平衡性能繁重的程序与实时鼠标输入

javascript - 如果表单内有任何内容被使用且不为空,则发出警报

html - css media 不适用于浏览器大小,但适用于缩放或响应式设计 View

javascript - 如何判断某些内容是否滚动到 View 中?

javascript - JS中多个项目的运行函数

javascript - 数组发生奇怪的事情

javascript - 切换新的 li 并仍然计算最后一个

jQuery 位置

javascript - Ajax 调用 perl 脚本