海康IP摄像头rtsp解码(ubuntu上使用)

闲暇时间,搞了个海康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

这段代码就能把视频保存到本地,但是你只能中断程序后才能看看视频,不然一边传到显示屏上,一边保存,那样会花屏。就直接等保存完了之后再看看拍的视频

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值