闲暇时间,搞了个海康IP摄像头玩一玩,首先你得知道你的IP地址和密码,这些要是不知道,可以给售后打电话,售后还是可以的。海康的网络摄像头虽然可以直接在web端上面直接显示,但显然是不可能用这种方法的。
1.把电脑的IP与海康的设置到同一网段后,要开始对视频进行解码
2.写了个python和c++的demo,简单暴力的使用opencv直接解码,不得不说opencv是真的强
# -*- coding: utf-8 -*-
'''
demo
#rtsp://[username]:[password]@[ip]:[port]/
1) username 用户名,常用 admin
2) password 密码,nv123
3) ip 摄像头IP,如 192.168.6.66
4) port 端口号,默认为 554
'''
import cv2
url = 'rtsp://admin:nv123@192.168.6.66:554/'#根据摄像头设置IP及rtsp端口
cap = cv2.VideoCapture(url)#读取视频流
while(cap.isOpened()):
# Capture frame-by-frame
ret, frame = cap.read()
# Display the resulting frame
cv2.imshow('CameraDemo',frame)
if cv2.waitKey(1) & 0xFF == ord('q') :
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
//打开RTSP流摄像头
cv::VideoCapture vcap;
const std::string videoStreamAddress = "rtsp://admin:nv123@192.168.1.64:554/";
if (!vcap.open(videoStreamAddress))
{
std::cout << "Error opening video stream or file" << std::endl;
return -1;
}
while(true)
{
Mat frame;
vcap>>frame;
imshow("demo",frame);
waitKey(1);
}
vcap.release();
return 0;
}
上述就能看到摄像头实时传回的图像了。然后又搞了个保存视频的demo
#-*- coding = utf-8 -*-
import time
import cv2
print cv2
RTSP_URL = 'rtsp://admin:nv123@192.168.6.66:554/h264/ch1/sub/av_stream' # your camera's rtsp url
DURATION = 30 # how many time in seconds you want to capture
OUTPUT_FILE = 'capture_video.mp4'
cap = cv2.VideoCapture(RTSP_URL)
#fourcc = cv2.VideoWriter_fourcc('h','2','6','4')
fourcc = 0x21
#fps = cap.get(cv2.CAP_PROP_FPS)
fps = 25
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
saver = cv2.VideoWriter(OUTPUT_FILE, fourcc, fps, size)
print "rtsp_url = %s, fps = %d, size = %s"%(RTSP_URL, fps, size)
got_first_frame = False
frame_count = 0
while True:
ret, frame = cap.read()
if not(ret):
continue
frame_count += 1
print "%s: frame %d received" % (time.time(), frame_count)
if got_first_frame == False:
start_time = time.time()
got_first_frame = True
saver.write(frame)
now = time.time()
if int(now - start_time) > DURATION:
break
这段代码就能把视频保存到本地,但是你只能中断程序后才能看看视频,不然一边传到显示屏上,一边保存,那样会花屏。就直接等保存完了之后再看看拍的视频