海康摄像头实时显示与字符叠加详解

本文详细介绍了海康摄像头的实时显示方法,包括SDK解码显示和数据流回调显示,以及在这两种方式下如何进行字符叠加。文中通过代码示例说明了实时流数据处理、图像字符叠加的实现,并在最后对两种方法的性能进行了对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、说明

文章详细叙述了海康摄像头的两种实时显示方法——基于SDK 解码显示和基于数据流回调显示,并且讲述了这在两种显示方法下如何往画面添加字符和图像,最后比较了这两种方法的优劣。文章全程给以详细的程序说明,供各位开发者参考。

2 实时预览

2.1 实时预览模块流程

这里写图片描述
图中虚线框部分的模块不是必须部分,是与预览模块相关,必须在启动预览后才能调用,这些模块之间是并列的关系,各自完成相应的功能。

2.2 SDK 解码显示

在预览接口 NET_DVR_RealPlay_V40 中预览参数的播放窗口句柄赋成有效句柄,则由 SDK 实现解码功能。在初始化 SDK 和注册设备两步骤后,直接调用启动预览和停止预览接口。
SDK 直接解码显示代码:

#include <stdio.h>
#include <iostream>
#include “Windows.h”
#include “HCNetSDK.h”
#include <time.h>
using namespace std;
typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOW GetConsoleWindow;
void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)
{
    char tempbuf[256] = {
  
  0};
    switch(dwType)
    {
        case EXCEPTION_RECONNECT: //预览时重连
        printf(“----------reconnect--------%d\n”, time(NULL));
        break;
        default:
        break;
    }
}
void main() {
//---------------------------------------
    //初始化
    NET_DVR_Init();
    //设置连接时间与重连时间
    NET_DVR_SetConnectTime(2000, 1);
    NET_DVR_SetReconnect(10000, true);
    //---------------------------------------

    //---------------------------------------
    // 注册设备
    LONG lUserID;
    NET_DVR_DEVICEINFO_V30 struDeviceInfo;
    lUserID = NET_DVR_Login_V30(“192.0.0.64”, 8000, “admin”, “12345”, &struDeviceInfo);
    if (lUserID < 0)
    {
        printf(“Login error, %d\n”, NET_DVR_GetLastError());
        NET_DVR_Cleanup();
        return;
    }
    //---------------------------------------
    //设置异常消息回调函数
    NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL);
    //---------------------------------------
    //启动预览并设置回调数据流
    LONG lRealPlayHandle;
    HWND hWnd = GetDlgItem(hWnd, IDC_PIC); //获取MFC的pic控件句柄
    NET_DVR_PREVIEWINFO struPlayInfo = {
  
  0};
    struPlayInfo.hPlayWnd = hWnd; //需要 SDK 解码时句柄设为有效值,仅取流不解码时可设为空
    struPlayInfo.lChannel = 1; //预览通道号
    struPlayInfo.dwStreamType = 0; //0-主码流, 1-子码流, 2-码流 3, 3-码流 4,以此类推
    struPlayInfo.dwLinkMode = 0; //0- TCP 方式, 1- UDP 方式, 2- 多播方式, 3- RTP 方式, 4-RTP/RTSP, 5-RSTP/HTTP
    struPlayInfo.bBlocked = 1; //0- 非阻塞取流, 1- 阻塞取流
    lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, NULL, NULL);
    if (lRealPlayHandle < 0)
    {
        printf(“NET_DVR_RealPlay_V40 error\n”);
        NET_DVR_Logout(lUserID);
        NET_DVR_Cleanup();
        return;
    }
    Sleep(10000);
    
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值