RTSP取流之海康威视

预览取流url

从海康威视客服妹子处得到的rtsp取流url见下面的短信:

【海康威视】举例说明:
主码流取流:
rtsp://admin:12345@192.0.0.64:554/h264/ch1/main/av_stream
子码流取流:
rtsp://admin:12345@192.0.0.64:554/h264/ch1/sub/av_stream
如果摄像机密码是a12345678,IP是192.168.1.64,RTSP端口默认554未做改动,是H.264编码,那么
主码流取流:
rtsp://admin:a12345678@192.168.1.64:554/h264/ch1/main/av_stream
子码流取流:
rtsp://admin:a12345678@192.168.1.64:554/h264/ch1/sub/av_stream
【如果是H.265编码的,那么将H.264替换成H.265即可】

拿到短信后就开始了我们的爬坑之旅
环境信息参考《视频监控环境搭建
当我使用ffmpeg取流并每隔3秒截图时,海康威视录像机返回了404:
这里写图片描述
在网上搜索了很久之后找到下面的这篇帖子:ffplay 播放IP摄像头视频是报404错误
大致意思是:海康威视的通道分模拟和网络两种,模拟的通道号从1到32,网络的通道号从33到64,换算一下,如果网络摄像头接到1号网口上,则通道号为33,依此类推
这里忍不住想吐槽一下海康威视,在取流url里没有说明模拟通道和网络通道的事情,如果每个开发人员都花个半天时间在url上,使用的人多了,对人类社会可是一笔不小的时间浪费

回访取流url

海康威视研发联系方式: sdk@hikvision.com, 以下内容来自sdk@hikvision.com的回复

RTSP回放URL规定:

rtsp://username:password@

:/Streaming/tracks/(?parm1=value1&parm2-=value2…)

注:VLC可以支持解析URL里的用户名密码,实际发给设备的RTSP请求不支持带用户名密码。

举例说明:

DS-9016HF-ST的模拟通道01:

rtsp://admin:12345@172.6.22.106:554/Streaming/tracks/101?starttime=20120802t063812z&endtime=20120802t064816z

DS-9016HF-ST的IP通道01:

rtsp://admin:12345@172.6.22.106:554/Streaming/tracks/1701?starttime=20131013t093812z&endtime=20131013t104816z

表示以单播形式回放指定设备的通道中的录像文件,时间范围是starttime到endtime,其中starttime和endtime的格式要符合ISO
8601。具体格式是YYYYMMDD”T”HHmmSS.fraction”Z”
,Y是年,M是月,D是日,T是时间分格符,H是小时,M是分,S是秒,Z是可选的、表示Zulu (GMT) 时间。

32及32路以下 NVR,IP通道号是从33开始的。但是取流地址中做了处理,从1开始即可

另外要特别提醒一点: 海康威视的回放取流url在网上可以查到,恰恰是这误导了我,我的操作流程是:

  1. 首先尝试:rtsp://admin:12345@172.6.22.106:554/Streaming/tracks/1701?starttime=20120802t063812z&endtime=20120802t064816z, 失败
  2. 然后尝试:rtsp://admin:12345@172.6.22.106:554/Streaming/tracks/3301?starttime=20120802t063812z&endtime=20120802t064816z,依然失败
  3. 最后尝试:rtsp://admin:12345@172.6.22.106:554/Streaming/tracks/101?starttime=20120802t063812z&endtime=20120802t064816z,还是失败

同时发现:预览取流也会失败,尝试重启录像机。再次进行测试:

  1. 预览取流OK
  2. 回放取流:rtsp://admin:12345@172.6.22.106:554/Streaming/tracks/101?starttime=20120802t063812z&endtime=20120802t064816z也OK

这是海康威视的保护机制(连续错误后禁止取流)还是系统bug(错误取流导致服务不可用)?不得而知

### 海康威视 RTSP 方法 #### 使用 FFmpeg 验证 RTSP 地址 为了验证海康威视设备的 RTSP 地址是否有效,可以使用 FFmpeg 工具执行以下命令。此工具能够解析并连接到指定的 RTSP 资源[^1]。 ```bash ffmpeg -i rtsp://admin:12345@192.168.1.100:554/Streaming/Channels/101 ``` 上述命令中的 `rtsp://admin:12345@192.168.1.100:554/Streaming/Channels/101` 是典型的海康威视 RTSP 地址格式。其中: - `admin`: 用户名。 - `12345`: 密码。 - `192.168.1.100`: 设备 IP 地址。 - `554`: 默认端口号。 - `/Streaming/Channels/101`: 主码路径。 如果需要测试子码,则可替换为如下 URL 格式[^2]: ```plaintext rtsp://admin:12345@192.0.0.64:554/h264/ch1/sub/av_stream ``` #### 推送 RTSP 视频至 HTTP 服务器 对于更复杂的场景,比如将 RTSP 视频转码并通过 HTTP 协议推送至其他服务端,可以采用以下配置[^3]: ```bash ffmpeg -rtsp_transport tcp \ -re \ -i rtsp://admin:password@183.2.2.2:9204 \ -f mpegts \ -r 20 \ -q 9 \ -an \ -s 800x600 \ -codec:v mpeg1video \ http://127.0.0.1:1936/1234 ``` 在此命令中: - `-rtsp_transport tcp`: 强制使用 TCP 进行传输,适用于不稳定网络环境。 - `-re`: 按照原始文件的时间戳读输入数据。 - `-f mpegts`: 输出封装格式设置为 MPEG-TS。 - `-r 20`: 设置帧率为每秒 20 帧。 - `-q 9`: 控制视频质量等级。 - `-an`: 禁用音频编码。 - `-s 800x600`: 定义输出分辨率。 - `-codec:v mpeg1video`: 制定视频编解码器类型。 #### Python 示例代码 (基于 OpenCV 和 cv2.VideoCapture) 除了 FFmpeg 外,还可以利用 Python 的 OpenCV 库来捕获 RTSP : ```python import cv2 # 替换为实际的 RTSP 地址 rtsp_url = "rtsp://admin:12345@192.168.1.100:554/Streaming/Channels/101" cap = cv2.VideoCapture(rtsp_url) if not cap.isOpened(): print("无法打开 RTSP ") else: while True: ret, frame = cap.read() if not ret: break # 显示每一帧图像 cv2.imshow('RTSP Stream', frame) # 如果按下 'q' 键则退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 该脚本会尝试从给定的 RTSP 地址读视频,并将其显示在一个窗口中。按键盘上的 `q` 键即可停止播放。 ---
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值