QT获取HDMI视频采集数据

Posted hnoe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT获取HDMI视频采集数据相关的知识,希望对你有一定的参考价值。

因为项目需要,从某宝采购了一个pipivision HDMI采集卡,该采集卡为USB3.0接口,支持HDMI输入和环出,还有混音功能,以下分享源码下载地址,我们根据源码学习使用方法。

github源码下载

网盘分享提取码n6sh

查看QT示例源码,在文件DevManager.h中包装了设备的很多操作,使用起来非常方便,我们只需要把源文件DevManager.cpp添加到工程并包含该头文件即可,内部的层次结构如下图所示。


经过查看,视频数据采集有三种方式可以选择,分别为数据回调,拷贝和锁定,每种方式都有各自的使用场景。
数据回调方式比较直接,采集到的每帧数据都会调用对应的回调函数处理,因此不能存在耗时的处理,否则会影响数据采集;
数据拷贝的方式可以把数据拷贝到对应的缓冲,而且支持裁剪、缩放、旋转和Color Space转换(例如YUV转RGB格式);
数据锁定方式可以随时捕获数据,不需要设置回调函数,数据使用完毕需要解锁才能继续采集,因此不能存在耗时的处理;

要操作对应的设备,我们先在自定义的类里面声明一个对象:
CDevSDK dev;

然后在自定义类的构造函数初始化列表中初始化传入索引号打开第0个采集卡:
dev(0)

如果设备打开成功我们就启动该设备
if (dev) dev.DeviceStart();

接下来我们根据需要使用其中的一种方式来捕获数据即可,执行的方式也有区别;
1、数据回调方式,需要注意是在另一个线程中执行的;
2、数据拷贝的方式,同步执行;
3、数据锁定的方式,同步执行。

主要代码如下:

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
    , dev(0) // open device 0

    ui->setupUi(this);

    if (dev)
    
        dev.DeviceStart();
    


void CALLBACK frameCallback(uvsobj_handle obj, const uvs_frame_info_t *frame, void *userData)



// 回调方式(任选一种即可)
void Dialog::on_callback_clicked()

    if (dev)
    
        dev.SetVideoRawFrameCallback(frameCallback);
    


// 拷贝方式(任选一种即可)
void Dialog::on_copy_clicked()

    if (dev)
    
        uvs_frame_info_t frame;
        memset(&frame, 0, sizeof(frame)); // 数据默认存放在内部缓冲,也可以指定缓冲地址
        dev.CopyVideoFrame(frame);
    


// 锁定方式(任选一种即可)
void Dialog::on_lock_clicked()

    if (dev)
    
        uvs_frame_info_t frame;
        if (dev.LockVideoRawFrame(frame) == UVS_OK)
         // 处理frame中的数据,然后释放
            dev.UnlockVideoRawFrame();
        
    


Dialog::~Dialog()

    dev.DeviceClose();
    delete ui;

QT实现HDMI视频预览

HDMI视频采集卡的优势

 随着科技的发展高清视频应用越来越多,人们对于高清视频也越来越依赖。宽带网络视频、实时流媒体通信、大容量文件传输、存储区域网络等带宽和时变业务的出现,以及用户对高质量服务保障的需求对网络带宽的要求越来越高。 

  高清高品质无压缩的音频及视频信号传输对网络带宽的需求日益突出。随着摩尔定律的不断延续用户的网络带宽水平将会越来越高。高清流媒体视频采集卡中有多种具有HDMI接口的高清HDMI视频采集卡。

  由于现在高清高品质无压缩的音频及视频信号传输对网络带宽的需求日益突出,所以采集卡目前也在不断升级中,其中,HDMI采集卡成为主流,那么为什么HDMI采集卡如此受欢迎呢?下面就为大家介绍下HDMI的优势。

  HDMI接口可以提供高达5Gbps的数据传输带宽,可以传送无压缩的音频信号及高分辨率视频信号。HDMI接口除了具有音视频信号同步采集传输和高带宽传输的优势,还有几个特点:

  高速传输带宽:高速的PCI-E 1×高速接口,其带宽传输速度是PCI接口插槽两倍以上

  多种接口输入:HDMI、1080i模拟分量、S-Video及复合视频输入接口 

  支持采集格式:1080 23.98 p/24 p/25 p/30 p/50i/59.94i/60i、720 50p/59.94p/60p,NTSC/PAL、S-Video

  视频输入可使用PAL、NTSC制式

  高品质音视频同步:对每一帧精确采集的严格要求,让您可以享受到真正的数字视频、音频采集,实现完美视、音频同步

  占用主机CPU率低:实时全分辨率高清无压缩音视频录制,让CPU从视频解压缩的工作中解脱出来

  具有运动自适应隔行处理、数字缩放和行场频变化等功能,并拥有多种数字图像和数字降噪技术

  支持一机多卡,在特技展台和专业领域非常合适

  高分辨率质量:HDMI是高清数字接口,由于所有的模拟连接(例如分量视频或S-video)要求在从模拟转换为数字时没有损失,因此它能提供最佳的视频质量。

  音视频信号同步:全数字化影像和声音传送接口,可以传输无压缩的音频及视频信号。

  扩展兼容易用性:HDMI在单线缆中集成视频和多声道音频,从而消除了当前A/V系统中使用的多线缆的成本、复杂性和混乱。这在升级或添加设备时特别有用;支持即插即用,HDMI完全向后兼容DVI兼容设备。

  高智能:HDMI支持视频源(如DVD播放机)和DTV间的双向通信,实现了新功能,例如自动配置和一键播放。通过使用HDMI,设备为连接的显示器自动传输最高效的格式(例如480p vs 720p,16:9 vs 4:3)—免除了消费者需要滚动所有格式选项,以猜测最佳的观看格式的麻烦。

  高清晰内容就绪:支持HDCP的HDMI设备现在和将来将能够访问高级的高清晰度内容,给我我们带来些许安慰。

  中科致远一直以来都是在发展高清采集卡,比如TC-739高清采集卡

    可采集1路高清或1路标清视频信号,1路模拟音频信号

  高清输入视频信号可达1080p/60 Hz

  高清信号可采集HDMI、DVI、分量信号

  可采集HDMI中的LPCM音频信号

  微软AVStream标准驱动,可支持大部分Windows上的多媒体视频软件或流媒体软件

  现如今高清视频对人们的生活越来越重要,比如城市的监控系统、医院的医疗设备、视频直播系统、居民楼的监控、科学研究的显微成像等都需要用到高清视频。我们常可以看到新闻上由于监控视频清晰度的不够而使得警察破案带来了困扰。我相信高清视频是以后的发展趋势,而高清视频采集卡也将越来越受到人们的关注


以上是关于QT获取HDMI视频采集数据的主要内容,如果未能解决你的问题,请参考以下文章

qt Android中使用opencv处理视频

C++/Qt音视频通话开发MetaRTC源码解读,视频推流和拉流

基于qt的多线程视频采集与传输

QT+OPENCV视频采集

在 QT 中以全屏模式播放视频

Ubuntu上Qt+Tcp网络编程+V4L2之视频监控