在视频应用中,我们一般都需要基于摄像头或录像机的视频流进行二次开发,那么就涉及到如何将视频流取出来。

在摄像机安装好之后,一般是通过局域网与本地的服务器进行连接,要取录像机的视频流就要在局域网范围内进行操作。

1)获取摄像机的IP地址、配置的用户名和密码,按照格式写出RTSP协议地址码

2)用VLC工具连接,测试是否可以取出视频流

3)python中通过opencv读取视频流

详细说明:

1)摄像机的IP地址、配置的用户名和密码是已知的参数,在安装的时候即已配置好。RTSP协议地址码根据所用摄像机的型号来定,以海康摄像头为例(来自于海康的客服):

目前海康录像机、网络摄像机,网络球机的 RTSP单播取流格式如下(车载录像机不支持 RTSP 取流):

rtsp:// 用户名 : 密码 @IP:554/Streaming/Channels/101

录像机示例:

取第 1个通道的主码流预览

rtsp://admin: hik12345@10.16.4.25 :554/Streaming/Channels/10 1

取第 1个通道的子码流预览

rtsp://admin: hik12345@10.16.4.25 :554/Streaming/Channels/10 2

取第 1个通道的第三码流预览

rtsp://admin: hik12345@10.16.4.25 :554/Streaming/Channels/10 3

取第 12个通道的主码流预览

rtsp://admin: hik12345@10.16.4.25 :554/Streaming/Channels/ 12 01

网络摄像机 / 网络球机示例:

取主码流的 URL:

rtsp://admin: hik123456@192.168.1.64 :554/Streaming/Channels/101

如果是多播取流的话,则使用以下路径

rtsp:// 用户名 : 密码 @IP:554/Streaming/Channels/101?transportmode=unicast

录像机示例:

取第 1个通道的主码流预览

rtsp://admin: hik12345@10.16.4.25 :554/Streaming/Channels/101?transportmode=unicast

2)我一般先用VLC工具测试是否可以取出视频流,当然这一步不是必须的。

点击 媒体-->打开网络串流-->输入RTSP地址码

如果能将实时的视频画面取出来,就表明RTSP协议地址码是正确的。

3)用python代码进行取流

代码如下:

import cv2
cap = cv2.VideoCapture('你的RTSP协议地址码')
print(cap)
ret,frame = cap.read()
while ret:
    ret,frame = cap.read()
    cv2.imshow("current frame",frame)
    cv2.imwrite('frame.jpg', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()
cap.release()

最后在此基础上进行python的二次开发。