如何在网页上显示RTSPvideostream?
我有一个提供实时RTSPvideostream的networking摄像头。 我可以使用VLC媒体播放器通过提供URL来查看提要:
rtsp://cameraipaddress
但是我需要在网页上显示Feed。 相机供应商提供了一个我正在使用的ActiveX控件,但它确实是越野车,并导致浏览器频繁挂起。
有谁知道我可以使用哪些支持RTSP的替代video插件?
相机可以configuration为以H264或MPEG4格式进行stream式传输。
VLC还带有一个ActiveX插件,可以在网页中显示Feed:
http://wiki.videolan.org/ActiveX/HTML
<OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921" codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab" width="640" height="480" id="vlc" events="True"> <param name="Src" value="rtsp://cameraipaddress" /> <param name="ShowDisplay" value="True" /> <param name="AutoLoop" value="False" /> <param name="AutoPlay" value="True" /> <embed id="vlcEmb" type="application/x-google-vlc-plugin" version="VideoLAN.VLCPlugin.2" autoplay="yes" loop="no" width="640" height="480" target="rtsp://cameraipaddress" ></embed> </OBJECT>
粗略地说,你可以有3个select在网页上显示RTSPvideostream:
- Realplayer的
- Quicktime播放器
- VLC播放器
你可以find代码来通过谷歌searchembedded的ActiveX。
据我所知,每个玩家都有一些限制。
- Realplayer本身不支持H.264video,您必须安装Realplayer的Quicktime插件才能实现H.264解码。
- Quicktime播放器不支持RTP / AVP / TCP传输,而RTP / AVP(UDP)传输不包含NAT穿孔。 因此,唯一可行的传输是WAN部署中的HTTP隧道。
- VLC不支持RTP / AVP传输的NAT穿孔,但RTP / AVP / TCP传输可用。
要在网页上显示来自networking摄像机的实时videostream并不容易,因为您需要宽广的互联网带宽和与主stream浏览器兼容的出色的video播放器。
幸运的是,有一些基于云的服务可以为我们完成这项工作。 其中最好的一个是IPCamLive 。 此服务可以从IP摄像机接收RTSP / H264videostream,并将其广播给观众。 IPCamLive具有Flash / HTML5video播放器组件,可在PC,MAC,平板电脑或手机上显示video。 最棒的是,这个网站生成所需的HTML代码片段来embedded实时video,如下所示:
<iframe src="http://ipcamlive.com/player/player.php?alias=szekesfehervar" width="800px" height="600px"/>
所以我们只需要复制粘贴到我们的HTML文件没有任何修改。
如果您想将RTSP直接传输到网页上,那么恐怕您唯一的select就是使用相机附带的ActiveX控件查看器。 这是一个直接连接IP Cam – > Viewer,应该是最快的。 不知道为什么你有问题; Axis ActiveX对我来说非常好。
但是,这个选项不是真正的带宽效率,并且不能为多个并发观看者提供服务(大多数IP摄像头有10个观众限制)。 更好的select是将单个RTSPstream上传到集中托pipe的stream媒体服务器,该服务器将您的媒体stream转换为RTMP / MPEG-TS并将其发布到Flash播放器/机顶盒。
Wowza,Erlyvideo,Unreal Media Server,Red5是你的select。
试试QuickTime Player! 下面是我的JavaScript,在网页上生成embedded对象并播放stream:
//SET THE RTSP STREAM ADDRESS HERE var address = "rtsp://192.168.0.101/mpeg4/1/media.3gp"; var output = '<object width="640" height="480" id="qt" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab">'; output += '<param name="src" value="'+adsress+'">'; output += '<param name="autoplay" value="true">'; output += '<param name="controller" value="false">'; output += '<embed id="plejer" name="plejer" src="/poster.mov" bgcolor="000000" width="640" height="480" scale="ASPECT" qtsrc="'+address+'" kioskmode="true" showlogo=false" autoplay="true" controller="false" pluginspage="http://www.apple.com/quicktime/download/">'; output += '</embed></object>'; //SET THE DIV'S ID HERE document.getElementById("the_div_that_will_hold_the_player_object").innerHTML = output;
从VLC官方文档为web插件find一个简单而有效的解决scheme
https://wiki.videolan.org/Documentation:WebPlugin/
修改了一下代码,并得到它的工作。 这是我的代码 –
<embed type="application/x-vlc-plugin" pluginspage="http://www.videolan.org" autoplay="yes" loop="no" width="300" height="200" target="rtsp://10.20.50.15:554/0/888888:888888/main" /> <object classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921" codebase="http://download.videolan.org/pub/videolan/vlc/last/win32/axvlc.cab" style="display:none;"></object>
注意:上面的代码片段使用我的IP摄像机支持的rtsp
url格式。 所以你需要为你的相机得到相同的。 您可以通过咨询您的相机供应商支持获取这些信息。 另外请记住,我在Chrome上进行了testing(使用适用于Chrome的activeX插件),而其他浏览器(包括手机浏览器)可能不受支持。
Wowza
- 将RTSP重新stream式传输至RTMP(Flash Player)无法使用Android Chrome或FF(不支持Flash)
- 将RTSP重新传输到HLS
networking电话服务器 (Flashphoner)
-
将RTSP重新stream式传输到WebRTC(Android或桌面上的Chrome和FF本机浏览器function)
-
将RTSP重新stream式传输到Websockets(iOS Safari和Chrome / FF桌面)
看看这篇文章 。
你也可以尝试开源Webrtc媒体服务器Kurento
谁可以播放rtspvideostream,并将其发送到Webrtc或转码为rtmp或保存在服务器上。
我们在生产案例中使用它:
- WebRTC到Webrtc(多对多) - WebRTC到RTMP - RTSP到WebRTC
微软Mediaplayer可以做所有,你需要。 我使用2003/2008 Server的MS Mediaservices将video作为广播和单播stream传送。 这项服务可以从摄像机获取stream,并播放它。 比你在所有的OS系统上“全部显示”所有的图片都有问题
我的提示:首先检查操作系统,比加载你的插件。 在Windows上很容易 – 采取WMP,其他采取MS Silverligt …
对于这样的目的,我使用VLC作为重新分配服务器。 你说你用VLC来看video吗? 右键单击VLC中的媒体,select“stream”并select您的选项。 你也可以通过命令行来实现,这为你提供了各种选项(代码转换,缩放,压缩,去隔行)的潜在好处。 这是一个从源码开始到自己555端口的VLC分发的批处理(所以你必须在网页的src选项中inputrstp:// myvlcserveripaddress:555才能获得stream)
cd \ cd C:\Program Files (x86)\VideoLAN\VLC\ vlc --logo-file C:\logo.png --logo-position 5 --logo-opacity 200 --logo-x 900 --logo-y -2 "mmsh://typeyoursourceIPhere:554" :sout=#transcode{vcodec=div3,vb=800,scale=0,acodec=mpga,ab=128,channels=2,samplerate=44100}:duplicate{dst=rtp{mux=ts,sdp=rtsp://:555/stream}} :sout-all :sout-keep
在这里 ,你有一个embedded播放器的网页示例(基于VLC插件)。
在网站上分享实时video的最stream行和可靠的方式是通过RTMP(使用Flash播放器)或HLS(HTTP实时stream式传输),也可以在HTML5上使用移动设备,但涉及很长的延迟时间。
要将RTSPstream转换为RTMP / HLS,需要一个中继服务器(连接到RTSPstream,然后向Web客户端提供RTMP / HLS)。 Wowza Streaming Engine 4.2+提供这样的function,并且可以免费使用有限使用的开发者许可证。 http://www.wowza.com/streaming/ip-camera-streaming
可以在http://www.videowhisper.com/?p=PHP-IP-Camera-Stream上find一个脚本来pipe理这个文件并通过networking发布,同时也提供免费的有限许可证。; 此外,该脚本的在线演示允许将您自己的RTSPstream发布到networking上一段时间(24小时)。
所有上述解决scheme不再工作或太耗费时间来弄清楚。
这是最终的答案。 您可以在您的网站中embeddedrtsp链接。
在你的html编辑器中复制下面的代码:
<!--- BEGIN PLAYER ---> <!-- webbot bot="HTMLMarkup" startspan ----> <object ID="MediaPlayer" WIDTH="320" HEIGHT="270" CLASSID="CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95" STANDBY="Loading Windows Media Player components..." TYPE="application/x-oleobject" CODEBASE="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,7,1112"> <param name="autoStart" value="True"> <param name="filename" value="rtsp://xxx.xxx.xxx:xxxx"> <param NAME="ShowControls" VALUE="False"> <param NAME="ShowStatusBar" VALUE="False"> <embed TYPE="application/x-mplayer2" SRC="rtsp://xxx.xxx.xxx:xxxx" NAME="MediaPlayer" WIDTH="320" HEIGHT="270" autostart="1" showcontrols="0"></embed></object> <!-- webbot bot="HTMLMarkup" endspan ----> <!--- end PLAYER --->
如果这一切都太复杂,仍然无法解决,让我来帮助你。
我已经为我的客户做了这个。