FFmpeg获取摄像头数据并编码为H.264

news/2024/9/18 21:27:57/
ffmpeg的视音频编解码功能非常强大,可以说包括了所有的视音频编码标准。在这里我主要是调用ffmpeg工程里的ffmpeg.exe文件,调用之后,会自动完成编码的操作。内部编码的具体流程,以后再慢慢的看。


1.介绍

       先介绍下ffmpeg里面的三个exe文件。

       我们打开ffmpeg的官网,下载时会发现有三个版本,分别是Dev、Shared、Static。Dev是开发版本,里面包含有库文件(.lib)和头文件(.h),但是没有exe文件。Shared文件夹里面有ffmpeg.exe、ffplay.exe、ffprobe.exe,除此之外还有一些dll文件,比如说avcodec-58.dll、avdevice-58.dll等。它的exe文件比较小,运行时需要调用dll的功能。Static文件夹里面只有三个exe,dll文件被集成在exe里面了,所以它的exe文件比较大。Shared版本和Static版本可以在命令行中打开,我们打开系统命令行界面,切换目录,就可以运行。

       ffmpeg.exe:用于转码的应用程序。举个例子,我们把input.avi转码为output.h264,代码如下:

ffmpeg -i input.avi -b:v 640k output.ts

       内部的具体参数可以参考这里。


       ffplay.exe:用于播放的应用程序。一个简单的播放例子:

ffplay test.avi  

       具体的使用方法和快捷键可以参考雷神的博客这里。


       ffprobe.exe:用于查看文件格式的应用程序。


2.环境配置

        具体的环境配置可以参考这里。


3.调用摄像头

       环境配置好后,我们先尝试用ffmpeg调用自己的摄像头。

       可以打开命令行程序,跳转到ffmpeg.exe的文件夹,输入以下命令调用摄像头。也可以利用C++的winexec()函数打开摄像头,程序如下。

       命令行命令:

ffplay - f dshow - i video = "HD Pro Webcam C920"

       在VS工程里打开摄像头的代码:

#include <stdio.h>
#include <windows.h>
int main(int, char**)
{char* CommandVedio = "ffplay -f dshow -i video=""HD Pro Webcam C920";WinExec(CommandVedio, SW_SHOW);return 0;
}

      "HD Pro Webcam C920"是我的摄像头名称,如果不知道,可以用以下的命令来获取自己的设备称号。

ffmpeg -list_devices true -f dshow -i dummy  

       

      运行后,会出现下面的结果。这里的video devices和audio devices就是自己的视频和音频设备。


       除了上面的方式外,我们也可以利用VFW读取摄像头的数据。

ffplay -f vfwcap -i 0  


4.编码

       调用摄像头后,将其编码为H.264,只需要在原来的基础上添加几个命令即可。

ffmpeg -f dshow -i video="HD Pro Webcam C920" -vcodec libx264 mycamera.h264  

       或者这样

ffmpeg -f vfwcap -i 0 -vcodec libx264 mycamera.h264 

       和上面一样,如果想在VS工程里运行,代码如下

#include <stdio.h>
#include <windows.h>
int main(int, char**)
{char* opencamera = "ffmpeg -f vfwcap -i 0 -vcodec libx264 mycamera.h264";//char* opencamera = "ffmpeg -f dshow -i video=""HD Pro Webcam C920"" -vcodec libx264 mycamera.h264 ";WinExec(opencamera, SW_SHOW);return 0;
}


       编码后的h264文件保存在VS的工程目录下,其实这里不仅仅可以生成h264,也可以改为mycamera.avi/mkv等格式。

      这里只是学会了如何调用ffmpeg.exe文件进行编码,对于内部的编码流程,以及许多重要的函数,并没有做太多了解。 ffmpeg的编码过程其实是调用了libx264库完成的,所以我们可以不需要ffmpeg的源代码,直接调用libx264库,将输入的YUV数据编码为h264,这也是自己接下来的学习任务。




http://www.ppmy.cn/news/164982.html

相关文章

Modifying Logitech C920 for CS lenses

013-07-15 21:12 | Categories: In English, Projektai, Užrašai Logitech C920 is a wonderful webcam. It produces good picture quality and has hardware H.264 encoder. It can do real full HD streaming (19201080 p 30fps). But this webcam lacks one feature –…

C语言标准C99

先简单介绍下C语言的标准. C语言的发展历史大致上分为三个阶段:Old Style C、C89和C99.Ken Thompson和Dennis Ritchie发明C语言时有很多语法和现在并不一样,但为了向后兼容性(Backward Compatibility), 这些语法仍然在C89和C99中保留下来了.C89是最早的C语言规范,于1989年提出,…

C语言标准 —— C89(C90)、C99、C11、C17、C2X

C语言主要的三个标准&#xff1a;C89&#xff08;C90&#xff09;、C99、C11、 K&#xff06;R C 指的是 C 语言的原始版本。1978年&#xff0c;C 语言的发明者丹尼斯里奇&#xff08;Dennis Ritchie&#xff09;和布莱恩柯林&#xff08;Brian Kernighan&#xff09;合写了一…

windowslinux环境下实现ffmpegvlc rtsp本地视频、摄像头推流,VLC推拉流

一、windows环境 ffmpeg RTSP推流本地视频文件、摄像头&#xff0c;VLC拉流 参考博客 windows环境下&#xff0c;搭建RTSP视频推流服务器 1.环境安装 Windows 环境下使用 FFmpeg 推送本地视频文件、USB 摄像头为 rtsp 流&#xff0c;并使用 vlc 拉流播放 1.下载rtsp服务器&…

学编程能参加哪些比赛?

孩子学习编程可以参加这10个竞赛: 下面将会根据孩子所学的编程语言来列举孩子可以参加的竞赛: 一、Scratch编程可参加的比赛 1、全国中小学生电脑制作大赛 电脑制作大赛不能完全说是编程比赛,更多讲究艺术与科技结合。 评选项目要求学生使用计算机设计电子报、网页设计、F…

智慧办公室虚拟现实 VR 可视化

“虚拟现实”是来自英文“Virtual Reality”&#xff0c;简称 VR 技术&#xff0c;其是通过利用计算机仿真系统模拟外界环境&#xff0c;主要模拟对象有环境、技能、传感设备和感知等&#xff0c;为用户提供多信息、三维动态、交互式的仿真体验。 图扑软件基于自研可视化引擎 H…

Power BI 如何高效管理度量值和字段

内容说明 背景需求&#xff1a; 当分析场景涉及大量数据和分析度量值时&#xff0c;为了更好的区分原始数据和用于分析的度量值&#xff0c;需要合理安排和管理数据字段。 本文总结了三种方法&#xff1a; 移动度量值位置创建字段文件夹&#xff1a;子文件夹和多个文件夹创建…

华为认证 | HCIA-Datacom 考试大纲

今天给大家说点基础的&#xff0c;很多人对华为认证考试有了一定了解后&#xff0c;想要进一步了解具体的考试内容。 这篇先说HCIA-Datacom的具体考试大纲~ 01 华为HCIA-Datacom认证考试 02 华为HCIA-Datacom考试内容 HCIA-Datacom V1.0考试覆盖数通基础知识&#xff0c;包括&…

创维 Skyworth 安卓电视机 提示 键盘已锁定! 解决方案

创维 Skyworth 安卓电视机 提示 “键盘已锁定&#xff01;” 解决方案 遥控器连续按 8 次 数字 0 键

创维电视安装第三方app

此方法针对原系统无U盘安装、应用市场中没有小程序情景使用&#xff0c; 1、准备创维电视机、电脑&#xff0c;电视机和电视在同一个局域网&#xff1b; 2、电视机开启adb&#xff1b; 启动电视机机后进入“系统设置”选择“关于本机”&#xff0c;接着进入“本机信息”&…

创维黄宏生、TCL李东生及康佳陈伟荣悲喜人生

创维集团原董事长黄宏生与TCL的李东生、康佳原掌门陈伟荣都是华南理工大学无线电78级的同学&#xff0c;曾经三星同辉&#xff0c;同为彩电业大佬&#xff0c;如今却悲喜浮沉迥然不同…… 1978年高考时&#xff0c;三个年轻人李东生、陈伟荣、黄宏生分别从惠州、罗定和海南岛考…

创维电视显示连接服务器失败怎么回事,创维电视显示已连接路由器,却无法联网-创维电视连接路由器显示连接失败...

家里创维电视已连接上无线网&#xff0c;可就是在电视上显示... 我家的也是一样&#xff0c;也是创维的55寸无线网络电视(内置机顶盒的&#xff0c;可以把有线电视卡直接插到电视上)&#xff0c;刚开始买来的时候可以连上&#xff0c;后面插了有线之后就连不上无线网了。可以收…

康佳U86V9电视怎么样?康佳U86V9电视参数配置评测

康佳U86V9电视的边框和底座均采用了金属配置&#xff0c;还有底部的支架也是金属配置&#xff0c;因此在外部的质感上还是有不俗表现的&#xff1b;在沉浸式体验方面&#xff0c;康佳U86V9电视屏幕占比在95%-97%之间&#xff0c;全面屏设计&#xff0c;边框贴角和电视边框严格贴…

【企业化架构部署】Apache配置与应用

文章目录 一、构建虚拟web主机1.概述2.httpd服务支持的虚拟主机类型3.构建虚拟Web主机3.1基于域名的虚拟主机3.2基于IP地址的虚拟主机3.3基于端口的虚拟主机 4.Apache连接保持5.Apache访问控制 二、Apache日志管理rotatelogs分隔工具 三、总结1.Web虚拟主机部署步骤2.网页根目录…

创维电视开机停留在Android4.0,“创维酷开”电视打开后就一直停留在开机界面,也关不...-创维电视关不机...

“创维酷开”电视打开后就一直停留在开机界面,也关不... 操作方法如下&#xff1a; 1、电视机的电源故障。 解决方法&#xff1a;让专业的师傅拆机检测并更换电源。 2、电视机没有上电。 解决方法&#xff1a;将电视的电源打开。 3、电视电路出现虚焊现象。 解决方法&#xff1…

【生信】R语言在RNA-seq中的应用

R语言在RNA-seq中的应用 文章目录 R语言在RNA-seq中的应用生成工作流环境读取和处理数据由targets文件提供实验定义对实验数据进行质量过滤和修剪生成FASTQ质量报告 比对建立HISAT2索引并比对 读长量化读段计数样本间的相关性分析 差异表达分析运行edgeR可视化差异表达结果计算…

docker 安装各种基础环境

一、安装 mysql 1 、下载镜像文件 docker pull mysql:5.7 2、创建实例并启动 docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -v /mydata/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORDroot \ …

minio 多级目录 获取目录名 卡死问题【实战】

问题&#xff1a; 生产环境&#xff0c;由于存储文件太快&#xff0c;导致很快一个桶里百万文件&#xff0c;几个T的大小。 多级目录获取目录名是个问题&#xff0c;list_objects如果用recursivetrue递归&#xff0c;当目录很多且级数多时&#xff0c;卡死掉。 通过客户端进…

PolarDB

PolarDB PolarDB 是云数据库产品&#xff0c;由阿里云提供&#xff0c;它基于 MySQL 构建而成&#xff0c;但在某些方面进行了优化和改进&#xff0c;以提供更好的性能和可伸缩性。以下是 PolarDB 和原生 MySQL 在性能方面的一些对比&#xff1a; 扩展性和性能&#xff1a;Pol…

d610网络计算机,尼康D610评测:机身细节

●尼康D610机身细节 其实机身细节这个环节&#xff0c;尼康D610真的没啥能说的&#xff0c;因为几乎全部元素都跟D600一样。改进后的快门和反光板组件&#xff0c;不会再出现尘屑情况了&#xff0c;大家可以放心(同样的招数对圣斗士是不起作用的……)。 尼康D610新增的QC静音连…