当我们安装监控摄像头时,我们可以选择使用厂家提供的录像机作为监控的工具,但如果动一点编程,我们也可以通过rtsp通过我们的计算机直接连接摄像头,把影像或者图片保存到我们的计算机上。如果你还会一点人工智能的编程技能,那通过摄像头的影响来监控你感兴趣的目标对象,那会更加好玩,但我们这篇文章先不讨论人工智能,我们先确保影响能被计算机保存下来。
RTSP简介
Real Time Streaming Protocol,RTSP,中文叫实时流协议,是一种网络应用协议,专为娱乐和通信系统的使用,以控制流媒体服务器。该协议用于创建和控制终端之间的媒体会话。媒体服务器的客户端发布VCR命令,例如播放,录制和暂停,以便于实时控制从服务器到客户端(视频点播)或从客户端到服务器(语音录音)的媒体流。
监控摄像头的RTSP
现在大部分的网络监控摄像头都支持RTSP的推流,你可以通过查看说明书,或者登录到摄像头的后台管理界面,找到摄像头的推流RTSP URL,用户密码并启用它。当然,如果你启用了摄像头推流,记得修改一个密码,以免黑客通过扫描默认端口,获得了你的摄像头的控制权。
常见大厂的摄像头RTSP地址
海康威视
说明 | RTSP URL | 类型 | 备注 |
---|---|---|---|
第1个通道的主码流 | rtsp://{user}:{pwd}@{host}:{port}/Streaming/Channels/101 | 摄像头 | 新款 |
第1个通道的子码流 | rtsp://{user}:{pwd}@{host}:{port}/Streaming/Channels/102 | 摄像头 | 新款 |
多播取流 | rtsp://{user}:{pwd}@{host}:{port}/Streaming/Channels/101?transportmode=multicast | 摄像头/录像机 | |
第1个通道的主码流 | rtsp://{user}:{pwd@{host}:{port}/{videotype}/ch1/main/av_stream | 摄像头 | 旧型号摄像头(2012年之前的设备) |
第1个通道的子码流 | rtsp://{user}:{pwd@{host}:{port}/videotype}/ch1/sub/av_stream | 摄像头 | 旧型号摄像头(2012年之前的设备) |
说明
user: 用户名。例如: admin。
pwd: 密码。例如: 888888(默认)。
ip: 为设备IP。例如 10.7.8.122。
port: 端口号默认为554,若为默认可不填写。
channel: 通道号,新款格式是N01,N02,N代表通道,例如901;旧款的chN,N代表通道,例如:ch2
subtype: 码流类型,主码流为101(新款)或 main,子码流为102,或者sub
大华
说明 | RTSP URL | 类型 |
---|---|---|
第1个通道的主码流 | rtsp://{user}:{pwd}@{ip}:{port}/cam/realmonitor?channel=1&subtype=0 | 摄像头 |
第1个通道的辅码流 | rtsp://{user}:{pwd}@{ip}:{port}/cam/realmonitor?channel=1&subtype=1 | 摄像头 |
说明
user: 用户名。例如: admin。
pwd: 密码。例如: 888888(默认)。
ip: 为设备IP。例如 10.7.8.122。
port: 端口号默认为554,若为默认可不填写。
channel: 通道号,起始为1。例如通道2,则为channel=2。
subtype: 码流类型,主码流为0(即subtype=0),辅码流为1(即subtype=1)。
使用Python程序来保存图片或视频片段
准备
先安装ffmpeg工具
sudo apt install ffmpeg
保存图片
下面程序可以保存一张图片,文件名为img001.jpg,如果需要保存多张图片,可以把cap_count改成大于1。
import os
user = '<<<user>>>'
pwd = '<<<pwd>>>'
host = '<<<host>>>'
port = 554
img_files = 'img%03d.jpg'
cap_count = 1
url = "rtsp://{user}:{pwd}@{host}:{port}/Streaming/Channels/101".format(user=user, pwd=pwd, host=host, port=port)
cmd = "ffmpeg -rtsp_transport tcp -y -i \"{url}\" -vframes {cap_count} {img_files}".format(url=url, cap_count=cap_count, img_files=img_files)
os.system(cmd)
保存视频
下面程序可以保存一段10秒视频,文件名为video.mp4,如果需要修改视频时长,可以把duration改成其他数字。
import os
user = '<<<user>>>'
pwd = '<<<pwd>>>'
host = '<<<host>>>'
port = 554
duration = 10
video_files = 'video.mp4'
url = "rtsp://{user}:{pwd}@{host}:{port}/Streaming/Channels/101".format(user=user, pwd=pwd, host=host, port=port)
cmd = "ffmpeg -rtsp_transport tcp -y -t {duration} -i \"{url}\" -acodec copy -vcodec copy -hide_banner -loglevel error -an {video_files}".format(url=url, duration=duration, video_files=video_files)
os.system(cmd)