如何在C#中从支持ONVIF的VMS及录像设备获取RTSP URL
ONVIF获取RTSP URL常见问题解答
问题1:查找并关联不同摄像头对应媒体配置文件的方法
- 先调用
GetDeviceInformation接口获取设备基础信息,和摄像头的物理通道/序列号做匹配:单路摄像头返回的所有配置文件都归属于该设备,多路NVR的配置文件会按通道区分。 - 解析
GetProfiles返回的每个Profile结构体的Name/token字段,大部分厂商会在Name字段内置通道号、摄像头点位名称标识,可直接通过该字段做关联。 - 如果
Name字段无有效标识,可调用GetVideoSourceConfiguration接口,读取对应配置文件关联的视频源信息:视频源的SourceToken和摄像头通道是一一绑定的,你可以提前枚举所有摄像头通道的视频源token,即可和配置文件完成对应绑定。 - 注意:同一个摄像头会存在多个不同配置的Profile,分别对应主码流、子码流、第三码流,可通过
VideoEncoderConfiguration里的分辨率、码率参数区分你需要的码流类型。
问题2:从VMS服务器获取RTSP URL的方法
- 首先确认你对接的VMS是否支持ONVIF标准的媒体服务,部分厂商VMS默认关闭ONVIF媒体服务,需要先在VMS后台开启ONVIF对接权限、添加允许对接的IP白名单。
- VMS的ONVIF服务地址和直连设备的地址不同,一般是
http://<VMS_IP>:<端口>/onvif/device_service,端口号不同厂商有差异,常见为80、8000、8080等,需要先向厂商确认或者通过端口扫描获取。 - 对接VMS时需要先完成鉴权流程,大部分商用VMS的ONVIF接口都启用了摘要认证,你需要在所有请求头携带合规的鉴权信息,否则会返回401错误导致无法获取配置文件和流地址。
- 鉴权通过后按照和直连设备相同的流程调用
GetProfiles获取对应摄像头的配置文件,再调用GetStreamUri即可获取VMS转发的RTSP URL。 - 部分厂商VMS的RTSP URL会做自定义加密或者需要额外的会话校验,按照标准流程获取后如果无法播放,需要联系VMS厂商确认是否有私有扩展要求。
内容的提问来源于stack exchange,提问作者Arul
相关产品推荐
相关产品推荐

