今天来说说C#如何采集和处理HDMI数据,主角依旧还是某宝入手的那块pipivision的USB3.0的HDMI采集卡,USB3.0接口,支持HDMI环出和混音功能,本文的示例源码来自于

https://github.com/messicn/UVSMedia

网盘分享提取码n6sh

示例包括采集预览、OSD、音视频编码、录像等功能,使用VS2015查看对应的源代码,这些功能都是通过类UVS_Media.Dev实现的,因此使用前需要先声明成员

Dev dev;

然后指定索引号打开HDMI设备并启动预览就能看到画面了

private void OnLoad(object sender, EventArgs e)
{int r;dev = new Dev(0, -1, out r); // open device 0, no audioif (dev){dev.DeviceStart(); // device startdev.PreviewStart(video.Handle); // video is Windows.Froms.Panel}
}

当然使用完毕请记得释放

private void OnClosed(object sender, FormClosedEventArgs e)
{dev.Dispose();
}

通过HDMI采集的视频可以叠加OSD,包括时间,文字,图片,矩形,椭圆以及直线等等,并支持位置和透明度动态调整。
例如在视频叠加24小时时间OSD(显示坐标20, 20)

private void OnTimeosd(object sender, EventArgs e)
{if (dev){/* %M month, %D month of day, %H 24 hours, %h 12 hours, %m minute, %s second, %Y year,* %t AM/PM, %N month name, %n month short name, %W week name, %w week short name, %% % */string format = "%Y-%M-%D %H:%m:%s";var info = new Dev.FontInfo();GetFontInfo(ref info);dev.SetTimeOSD(timeindex, 20, 20, format, ref info);}
}

在视频叠加文字OSD(显示坐标20, 100)

private void OnTextosd(object sender, EventArgs e)
{if (dev){string text= "Text Sample";var info = new Dev.FontInfo();GetFontInfo(ref info);dev.SetTextOSD(textindex, 20, 100, 0, 0, text.Text, ref info);}
}

接下来是音视频编码和录像,视频编码支持H.264/265,音频编码支持AAC/MP3,对于视频来说我们要先确定编码器,在有硬件支持的情况下我们当然是期望开启硬件编码加速大大降低CPU的占用,例如Intel集显支持H.264/265编码,或者是Nvidia显卡支持的H.264/265编码,或者是使用CPU的OpenH264软编码器。存在多路编码的情况下,建议高分辨率图像选则硬件加速,低分辨率图像根据情况选择硬件加速或软编码。确定编码器之后我们还需要按照说明指定编码参数

public struct EncodeConfig
{public int targetUsage; // 编码模式,偏重速度还是画质public int encProfile; // profile,0表示默认public int entropyCoding; // AVC(h264) 熵编码算法,0表示默认public int scaleUsage; // 图像缩放模式,偏重速度还是图像质量,图像大小不变就不用管public int scaleWidth; // 图像缩放宽度,0表示不变public int scaleHeight; // 图像缩放高度,0表示不变public int cropLeft; // 图像裁剪X坐标public int cropTop; // 图像裁剪Y坐标public int cropWidth; // 图像裁剪宽度,0表示不裁剪public int cropHeight; // 图像裁剪高度,0表示不裁剪public float frameRate; // 编码帧率,0表示帧率不变public int rcControl; // 编码码率控制,CBR固定码率,VBR可变码率,CQP固定画质,AVBR平均可变码率,一般选CBR或VBR即可public int encBitrate; // 编码码率(kbit/sec),一般选1000到10000之间,数值越大清晰度越高public int maxBitrate; // 编码最大码率(kbit/sec),一般选3000到15000之间,数值越大清晰度越高public int encQuality; // 编码质量,一般选20到30之间,注意数值越小清晰度越高,当然产生的码率也越大,一般可设置27左右public int GOPLength; // 关键帧间隔,0表示默认
}

可以看到,除了编码码率和质量参数以外,其他参数一般使用默认值0就可以了,当然也可以进行缩放和裁剪设置,比如当前图像分辨率是1080P(1920 x 1080),可以按照720P(1280 x 720)的分辨率进行编码。

我们先配置一路编码流0并启动录像,也可以使用不同的索引号配置多路编码流,使用Intel硬件编码加速H.264格式

Dev.EncodeConfig config = new Dev.EncodeConfig();
// set encode parameter...
if (dev.SetVideoEncodeConfig(0, Dev.uvs_video_codec_intel_h264, ref config) != Dev.UVS_OK)
{if (Dev.uvs_query_video_encoder(IntPtr.Zero, Dev.uvs_video_codec_intel_h264) != Dev.UVS_OK){MessageBox.Show("HW not support or codec library not found!");}return;
}// record stream 0
string str = "d:\\%Y%M%D_%H%m%s_%i.mp4";
if (dev.RecordStart(0, str, false, null, true, 0, 300000) != Dev.UVS_OK) return;// encode start
if (dev.EncodeStart(Dev.UVS_STREAM_ALL) != Dev.UVS_OK) return;

编码流启动后,我们还可以实时获取编码的信息,例如编码帧数和帧率

Dev.EncodeStatus status;
dev.GetVideoEncodeStatus(0, out status);

运行截图如下

C#实现HDMI音视频采集和处理相关推荐

  1. iOS直播(二)GPUImage音视频采集

    上文中介绍了用AVFoundation实现音视频采集(https://blog.csdn.net/dolacmeng/article/details/81268622) ,开源的基于GPU的第三方图像 ...

  2. webrtc简单案例——音视频采集和播放

    webrtc简单案例--音视频采集和播放 目录 打开摄像头并将画面显示到页面 打开麦克风并在页面播放捕获的声音 同时打开摄像头和麦克风,并在页面显示画面和播放捕获的声音 1. 打开摄像头并将画面显示到 ...

  3. Android 音视频采集与软编码总结

    请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/75807435(本文已在 "任玉刚" 微信公众号发布 ...

  4. Android端WebRTC本地音视频采集流程源码分析

    WebRTC源码版本为:org.webrtc:google-webrtc:1.0.32006 本文仅分析Java层源码,在分析之前,先说明一下一些重要类的基本概念. MediaSource:WebRT ...

  5. WebRTC音视频采集和播放示例及MediaStream媒体流解析

    WebRTC音视频采集和播放示例及MediaStream媒体流解析 目录 示例代码--同时打开摄像头和麦克风,并在页面显示画面和播放捕获的声音 API解析 mediaDevices MediaStre ...

  6. 台湾安格推出的用于TYPEC转VGA HDMI音视频多功能扩展坞方案选型和方案设计|USB-C转VGA HDMI类扩展器方案选型和方案讲解

    台湾安格推出的专业用于USB TYPEC转VGA HDMI音视频扩展坞方案AG9300 /AG9310 /AG9311/ AG9320 /AG9321. 目前针对安格这几款产品的芯片使用方面和使用范围 ...

  7. AG9310MEQ AG9310MFQ 安格两款USB TYPEC转HDMI音视频数据转换功能芯片参数差异与设计电路参考

    AG9310MEQ AG9310MFQ 安格两款USB  TYPEC转HDMI音视频数据转换功能芯片参数差异与设计电路参考 AG9310系列都是用于设计全功能USB TYPEC转HDMI音视频数据转换 ...

  8. 联阳IT6561|IT6561FN方案电路|替代IT6561方案设计DP转HDMI音视频转换器资料

    台湾联阳IT6561|IT6561方案电路|替代IT6561方案设计DP转HDMI音视频转换器 IT6561是一款高性能单片机显示端口到HDMI转换器.IT6561结合DisplayPort接收机.H ...

  9. HDMI音视频接口原理(VR设备接口)

    HDMI接口技术标准报告 名 称 : HDMI音视频接口原理 姓 名 : 殷松 时 间 : 2017年6月7日 目 录 一. HDMI接口性能 二.工作原理 三.HDMI标准发展之路 HDMI音视频接 ...

最新文章

  1. 【学习笔记】node.js基础介绍
  2. 以下计算机网络的功能正确的,西工大18春《计算机网络》在线作业【参考答案】...
  3. 深度学习(一)——MP神经元模型, BP算法, 神经元激活函数, Dropout
  4. RE validation in Java EE
  5. ajax方式表单拦截
  6. 3年开发经验,挂在了MyBatis十八连环问上!精通MyBatis源码,有多吃香?
  7. 电商垄断的形式不是对某一行业的具体垄断
  8. autojs之提取text中的红色文字(图片二值化+百度智能云-文字识别OCR-接口调用)
  9. c 中空格的asc码表_ascii码表由小到大空格字符
  10. 游戏外挂篇:如何Dump内存获得游戏的辅助
  11. win10计算机切换用户,win10系统账户切换的三种方法
  12. 计算机维修5级,电脑芯片级维修教程
  13. 中国最小黑客:为不做作业 黑掉学校系统
  14. 【C/C++基础进阶系列】实战记录 -- Dump 文件生成与分析
  15. Linux挂盘出现的问题
  16. 在matlab中使用dsolve函数解范德波尔二阶微分方程
  17. 数据结构严蔚敏代码合集 严书数据结构代码实现 可直接运行 持续更新by myself
  18. 2016年第8本:不可思议的心理控制实验
  19. [论文翻译]基于图像自适应GAN重建
  20. 报错:Error querying database. Cause: java.sql.SQLException: Access denied for user ‘root‘@‘localhost‘

热门文章

  1. python编写科学计算器_Python实现计算器
  2. 如何做一个基于微信校园跑腿小程序系统毕业设计毕设作品
  3. Python列表/元组/字典/集合详解
  4. 路由器局域网IP(内网IP)和外网IP的关系
  5. 6-4 猫和老鼠有多重
  6. 大赛征集令|首届“万应杯”低代码应用开发大赛报名开启啦!
  7. VBA -[知识点]: 字典
  8. kettle json input组件 Unable to access your JSON data
  9. Facebook中国程序员之死:年仅38岁跳楼轻生,浙大EE毕业生,去年刚入职
  10. OLAP实践 —— OLAP基本概念理解总计小记