我正在开发一个使用VLC Media Player插件通过RTSP流式传输视频/音频的项目.我想提供一个扫描网络RTSP摄像头的选项.我确信这将包括查询所有网络设备的列表,并测试端口554.所有这些我都可以照顾.但是,一旦我做到这一点,我如何通过端口554测试设备,以确保它是一个有效的RTSP相机?

我假设在Winsock中应该有一些能够做到这一点,但我应该如何测试套接字连接并确保它是一个有效的RTSP流,我可以连接到?无论使用何种方法,我都不必尝试使用任何类型的身份验证通过RTSP连接到每个方法,我正在寻找一种确定端口554是否实际提供RTSP流的低级方法.

解决方法

没有可靠的方法来扫描网络以获取可用的RTSP流.考虑到以下因素,您仍然可以进行大量搜索:

>为获得最佳结果(与速度相反),您需要对可用地址进行强力搜索,即检查adapeter地址和掩码,生成地址并在多个线程(或异步套接字)中逐个尝试
>您将需要端口554和/或由用户以交互方式提供;真实设备(数百种型号)可能使用不同的端口,即使使用默认设置
>通过使用UPnP,ZeroConf在网络中搜索实际地址,您可以将更多可能的候选者放在IP地址列表的顶部
>考虑到特定供应商/模型,您还可以实施特定于供应商的搜索,这通常涉及发送广播UDP消息和侦听响应
>选项RTSP命令应该足以进行测试,您可以使用interactive RTSP tool查看它是如何工作的.由于设备可能需要您进行身份验证,因此无法保证任何形式.

OPTIONS最有机会接收任何有意义的东西. DESCRIBE可能已经要求您登录,甚至可能需要对OPTIONS进行身份验证.您仍然有RTSP响应,假设那里存在某些东西.

Connection to 192.168.0.59:554 using TCP

OPTIONS * RTSP/1.0
CSeq: 1

RTSP/1.0 401 Unauthorized
CSeq: 1
Date: Tue,Oct 16 2012 22:22:53 GMT
WWW-Authenticate: Basic realm="RTSP/RTP stream"

要发出成功的DESCRIBE命令并获得有意义的结果,您需要知道设备上的资源URI并不总是很明显.更好的供应商(显然是少数人)灵活地支持传入请求,其他供应商假设客户端知道特定于设备.例如,

Connection to 192.168.0.59:554 using TCP

OPTIONS * RTSP/1.0
CSeq: 1

RTSP/1.0 200 OK
CSeq: 1
Date: Tue,Oct 16 2012 22:26:54 GMT
Public: OPTIONS,DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE

DESCRIBE rtsp://192.168.0.59/ch0_unicast_secondstream RTSP/1.0
CSeq: 2
Accept: application/sdp

RTSP/1.0 200 OK
CSeq: 2
Date: Tue,Oct 16 2012 22:27:22 GMT
Content-Base: rtsp://192.168.0.59/ch0_unicast_secondstream/
Content-Type: application/sdp
Content-Length: 506

v=0
o=- 1350426392586736 1 IN IP4 192.168.0.59
s=Session of second stream
i=Second Codec Stream
t=0 0
a=tool:LIVE555 Streaming Media v2007.08.03
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:Session of second stream
a=x-qt-text-inf:Second Codec Stream
m=video 0 RTP/AVP 26
c=IN IP4 0.0.0.0
a=control:track1
m=audio 0 RTP/AVP 97
c=IN IP4 0.0.0.0
a=rtpmap:97 PCMU/16000
a=control:track2
m=Metadata 0 RTP/AVP 98
c=IN IP4 0.0.0.0
a=rtpmap:98 MetaDATA/64000
a=control:track3

DESCRIBE rtsp://192.168.0.59 RTSP/1.0
CSeq: 3
Accept: application/sdp

RTSP/1.0 404 Stream Not Found
CSeq: 3
Date: Tue,Oct 16 2012 22:27:29 GMT

请注意,在不知道magic ch0_unicast_secondstream的情况下,您无法从设备中获得任何有用的信息.

delphi – 如何测试网络设备的有效RTSP流?的更多相关文章

  1. HTML5 播放 RTSP 视频的实例代码

    目前大多数网络摄像头都是通过 RTSP 协议传输视频流的,但是 HTML 并不标准支持 RTSP 流。本文重点给大家介绍HTML5 播放 RTSP 视频的实例代码,需要的朋友参考下吧

  2. 使用Android 2.x实时音频流

    我需要在具有2.x及更高版本的设备上播放实时流.This声明在Android2.x设备上播放实时流是不可能的.我在这里有什么选择?特别是我对流式音频感兴趣–我应该选择哪种格式以及哪种协议?解决方法尝试此示例用于RTSP流,用于视频更改代码以支持音频编辑:使用Android中的MediaPlayer实时音频流媒体Android中的实时音频流,从1.6sdk开始变得如此简单.在setDataSource()API中直接传递url,音频将播放没有任何问题.完整的代码段是,

  3. android – 网络设备发现

    我假设我必须稍微修改我的服务器才能播放它吗?如果我手动将IP输入到我的应用程序的配置页面,它完全按预期工作.此外,这只需要发现Windows计算机,不确定是否重要.提前致谢.解决方法那么,jmDNS是一个完整的Java库,可以用于您的设置.它可用于广播您的服务,其他客户可以搜索.Windows上的Bounjour服务有点棘手,虽然它绝对可行.我想说的更简单的方法是使用jmDNS进行服务器和客户端的广播和发现.

  4. 为什么我收到“不支持的格式”错误,使用Android MediaPlayer阅读H.264编码的rtsp流?

    (stagefright是否只支持H.263流?)>还是以某种方式错误的Pi侧代码?>或者我只是在客户端代码中缺少关键的一两步?

  5. 获取RTSP播放的帧时间戳

    我正在使用gstreamer在qt上制作简单的相机播放视频播放器,可以从OSD中获取帧日期/时间还是仅获取时间?图片上的时间戳的例子,目前与hikvision合作,试图在用wireshark转储的RTP数据包上找到它,但它只与第一帧时间戳相关。

  6. 如何在Windows 8 Metro C#XAML应用程序中播放H.264 RTSP视频?

    更新:我下载了微软的PlayerFramework,但这也没有播放.我在RTSP的例子中找不到任何东西.更新:我使用Wireshark来比较VLCMediaPlayer(有效)与MediaElement和PlayerFramework一起发送的数据包,它们似乎都没有使用RTSP协议.相反,即使我提供了源的IP地址,他们也会将WPAD数据包发送到不同的地址.为什么这有必要?有没有办法扭转这种行为?

  7. centos – libvirt网络错误 – 未找到“默认”网络设备

    我最初的目的是为openstack创建centos图像.虽然我直接用kvm做了,但仍然想知道错误.使用this手册完成我的任务.执行此命令后:我收到一个错误:不用说我正在使用RDO.默认情况下,我没有为libvirt预配置任何网络设备.问题是哪些网络设备可用?也许RDO在libvirt网络上有不同的方法?列出可用网络并指定您需要的网络:您也可以使用virt-managerGUI.

  8. ffmpeg restream rtsp到mjpeg

    我有几台IP摄像机可以通过rtsp传输720X264视频.在Android上查看时,流非常不可靠.如果超过2个连接,它们也会失败.我有一个ubuntu服务器,我可以使用它连接和restream作为mjpeg或其他东西.有很多不同的命令,但它们似乎都涉及转码视频.我怎样才能简单地将实时rtspFeed作为mjpeg重新播放而不对视频本身做任何事情?

  9. windows-server-2008-r2 – 事件ID 10009 DCOM

    有没有办法阻止它?

  10. 在Ubuntu系统基于ROS使用废旧Android手机摄像头搭建监控设备

    在Ubuntu系统基于ROS使用废旧Android手机摄像头搭建监控设备之前的博文介绍了一些使用android手机获取ROS中传感器,图像以及控制机器人小车的案例;这里主要介绍如何让ROS获取手机摄像头数据并使用,这样就不用usb_cam等,并且大部分都有手机;实验成本低,简洁易行。手机端需要安装RTSPServer等IPCamera类型APP;PC配置为Ubuntu16.04+ROSKinetic,。

随机推荐

  1. delphi – 主窗口按进程名称处理

    DelphiXe,Win7x64如何从进程名称(exe文件的完整路径)获取主窗口句柄,或至少一个类或窗口名称(如果该进程只有一个窗口).例:解决方法我同意Petesh的说法,你需要枚举顶级窗口并检查创建它的进程的模块文件名.为了帮助您开始枚举顶级窗口,这是一个delphi实现.首先,当你回调给你时,你需要一些与EnumWindows方法通信的方式.为此声明一条记录,该记录将保存您要查找的模块的文件

  2. 如何在Delphi中纯粹通过RTTI信息(即不使用任何实际对象实例)获取TObjectList的子项类型?

    我正在使用RTTI实现用于流式传输任意Delphi对象的通用代码,并且为了使其工作(更具体地说,为了使加载部分工作),我需要以某种方式获得TObjectList的子项类型<T>不使用任何实际对象实例的字段.要求不使用任何实际对象实例的明显原因是,在从流加载对象的情况下(仅基于要加载的对象的类类型的知识),我将不会有任何实例在加载完成之前完全可用–我宁愿只能访问相关类的纯RTTI数据.我希望能

  3. inno-setup – Inno Setup – 安装程序背景图片

    图像作为安装程序背景如何用inno5.5.9做到这一点?

  4. inno-setup – Inno Setup – 如何添加多个arc文件进行解压缩?

    使用InnoSetup解压缩弧文件.我希望有可能解压缩多个arc文件以从组件选择中安装文件(例如).但仍然显示所有提取的整体进度条.这可能吗?的回答的修改预备是相同的,参考其他答案.在ExtractArc中,为要提取的每个存档调用AddArchive.

  5. delphi – 如何在DataSet的帮助下在TAdvStringGrid中显示数据库中的BLOB图像

    解决方法CreateBlobStream正在创建一个TStream对象,而不是TMemoryStream.由于您不想将JPG写入数据库,因此应使用bmRead而不是bmReadWrite.我不习惯sqlite,但你必须确保使用合适的二进制日期类型.为了确保存储的图像真的是JPG,您应该编写JPG以进行测试,例如:

  6. inno-setup – 在Inno Setup的Code部分下载程序后运行程序

    如何运行我通过Internet下载的应用程序,在代码部分中使用,并等待该应用程序完成运行.我有,使用InnoTools下载程序,下载这两个文件,我想,在第二个完成下载后运行该下载,或jdk-8u111-windows-x64.exe,然后继续安装.解决方法使用其他下载插件,而不是ITD(请参阅下面的原因).例如,InnoDownloadPlugin.当您包含idp.iss时,它定义了一个全局IDP

  7. progress-bar – Inno Setup Run部分的简单进度页面

    我的安装程序非常简单,它基本上是:>欢迎页面>进展页面>最终页面欢迎页面和最终页面是标准页面.在Progress页面,我正在静默安装一堆其他程序.实际的脚本是在[Run]部分中安装每个程序.问题是酒吧达到100%然后停留在那里.我只能更改消息文本.我想要实现的是使用Pascal脚本显示进度,例如:这样我就可以显示更准确的进度条.这就是我所拥有的:问题是,当我构建安装程序时,它不显示欢迎页面.我做错了什么?

  8. delphi – 如何使“显示/隐藏桌面图标”设置生效?

    下面的代码调用SHGetSetSettings函数来隐藏桌面图标但它只是从视图菜单中取消选中“显示桌面图标”.我打电话给SHChangeNotify;更新桌面,但这不起作用?解决方法isa,要刷新桌面,您可以将F5键发送到progman窗口隐藏桌面图标的另一种方法是再次显示

  9. inno-setup – Inno Setup – 避免显示子安装程序的文件名

    我试图使用InnoSetup–Howtohidecertainfilenameswhileinstalling?(FilenameLabel)的想法Theonlysuresolutionistoavoidinstallingthefiles,youdonotwanttoshow,usingthe[Files]section.Installthemusingacodeinstead.UsetheEx

  10. inno-setup – Inno Setup磁力链接下载实施

    我目前正在使用InnoDownloadPlugin为我的安装程序下载文件,这个问题最大的问题是faila正确下载文件.因为连接不良等诸多原因.我想添加一种替代方法来下载文件,因此用户可以选择是否需要常规方式或torrent方式.我知道我可以使用aria2c.exe应用程序(https://aria2.github.io/),有人可以帮我实现它的inno设置代码吗?我需要的是使用torrent(ar

返回
顶部