Самый эффективный плагин для воспроизведения потоков Rtsp на веб-странице с хорошей совместимостью с браузером - PullRequest
5 голосов
/ 02 июня 2011

Вот краткий обзор моего кода.Пользователь нажимает кнопку записи, и он попадает на сервер, чтобы запустить поток наблюдения, и возвращает URL-адрес rtsp, который я хочу воспроизвести на веб-сайте.

Я пробовал подключаемый модуль 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, если поставить отметку
  • Даже если попытаться воспроизвести источник звука, появится черный ящик для воспроизведения видео.

PS Будет ли это легче, если я попытаюсь использовать HTML5 и знаю о таких фреймворках, как jquery, но я не могу использовать его в этом проекте.

Ответы [ 3 ]

2 голосов
/ 10 июня 2011

Поскольку вы не упоминаете ОС: Другой вариант только для окон - написать свой собственный фильтр источников RTSP DirectShow. Такой фильтр затем может быть зарегистрирован для протокола RTSP. На веб-странице вы можете вставить его через:

<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 для реализации фильтра и обслуживания для различных типов носителей.

2 голосов
/ 11 июня 2011

Может быть, это поможет?http://quicktime.tc.columbia.edu/users/iml/movies/mtest.html

2 голосов
/ 10 июня 2011

Если я правильно читаю, звучит так, как будто он всегда отображает поток, но не всегда автоматически воспроизводит, верно? Я предполагаю, что это проблема синхронизации, когда объект пытается автоматически воспроизвести объект до того, как он полностью записан на странице. Если это так, установит ли autoplay = false и затем вызов controlname.play после создания объекта, решить проблему?

...