100ask_imx6ull视频监控项目-摄像头和声卡编程(五)

news/2024/10/29 0:26:55/

100ask_imx6ull视频监控项目-摄像头和声卡编程(五)

我们如果用程序怎么操作摄像头操作声卡呢

在这里插入图片描述

参考第二节的视频,mjpg-streamer库里面查看v4l2uvc.c就可以快速掌握摄像头

在这里插入图片描述

不是你是cmos还是什么类型的摄像头,我们的应用程序都可以用一套程序访问不同的硬件摄像头!

API接口:

在这里插入图片描述

我们猜想过程如下:

在这里插入图片描述

(1)设置格式

设置分辨率,设置像素的格式,设置帧率

1024*768 如果硬件不支持会返回一个相近的参数返回给你

(2)启动摄像头

(3)获得数据 (循环过程)

(4)停止

1.API具体实现过程:

(1)查询摄像头

ioctl就是控制硬件的,可以发一些命令给他,启动或返回一些信息

在这里插入图片描述

查询能力就是有些摄像头驱动提供读写函数,可以通过read函数读信息,但有些摄像头驱动并不提供read函数

需要mmap来映射摄像头的buffer,通过这个返回的值查看支持那些方式

(2)设置格式

在这里插入图片描述

如果不支持摄像头,返回适合的分辨率

(3)如何处理buffer

关系如何读buffer

在这里插入图片描述

弄清这张图,对于摄像头的读取就可以彻底掌握了

在这里插入图片描述

1.App想要多少个buffer,向内核申请

2.App把他们放入队列

3.驱动把数据放入某个buffer

4.应用程序把该buffer从队列出列,处理数据

5.处理完再把buffer入列

应用程序可以用copy_to_user把数据从内核拷贝到应用程序去,但是这浪费时间,能不能直接访问内核的buffer

可以通过mmap把这个地址映射给应用程序,应用程序可以直接访问内核的buffer,这样就节省了拷贝的时间

对应应用程序,请求buffer

在这里插入图片描述

应用程序映射内核buffer

在这里插入图片描述

buffer放入队列

在这里插入图片描述

启动摄像头,用select或者poll函数等待数据

在这里插入图片描述

这是一个循环过程:

在这里插入图片描述

我们决定不在使用摄像头的时候可以ioctl关闭

在这里插入图片描述

2.代码实现过程:

imput_uvc.c中

在这里插入图片描述

打开设备,xioctl实际就是ioctl,可能为了兼容这么写

在这里插入图片描述

判断那种方法获得数据,是stream还是read

在这里插入图片描述

设置摄像头格式,如果和预期不一样,则把支持的参数写会结构体

在这里插入图片描述

底下就是摄像头支持的格式了:

在这里插入图片描述

设置帧率

在这里插入图片描述

申请buffer

在这里插入图片描述

申请成功后,映射buffer

在这里插入图片描述

buffer放入队列

在这里插入图片描述

在cam_thread.c中对应肯定要读摄像头的数据

在这里插入图片描述

enable启动摄像头

在这里插入图片描述

steamon启动它

在这里插入图片描述

然后就是循环

在这里插入图片描述

用select检测摄像头

在这里插入图片描述

使用uvcGrab获取一帧,到这里就已经有数据了

在这里插入图片描述

把队列里面的数据取出来

在这里插入图片描述

把摄像头的数据拷到临时的buffer里面

在这里插入图片描述

再把内核里面的buffer数据重新放回队列里面

3.声音的采集

通常使用alsa-lib来使用

在这里插入图片描述

linux中声卡驱动成为ALSA

在这里插入图片描述

Linux中声卡的驱动成为ALSA:Advanced Linux Sound Architecture

ALSA意思是先进的linux架构

里面的ioctl太复杂了,通常用alsa-lib编写程序

4.编译alsa-utils

在这里插入图片描述

我们通过alsa-utils录制声音,alsa-utils用的就是alsa-lib

进入buildroot下make menuconfig

在这里插入图片描述

make

可能配置不起作用把ffmpeg删掉。

录制声音:

ffmpeg -f alsa -ac 1 -i hw:0,0 test.wav

播放声音:

alpay test.wav

alsa里面有arecode比ffmpeg要好用的多

arecode --help

当然我们想要把声音推流

(1)只推声音

ffmpeg -f alsa -ac 1 -ar 11025 -i hw:0,0 -acodec aac -f flv rtmp://127.0.0.1/live/wei

ac 通道:1

ar采样频率:11025

把采样到的数据采用aac编码 封包-f 复用进flv格式里面 用rtmp协议推送出去

(2)视频声音一起推

ffmpeg -f alsa -ac 1 -ar 11025 -i hw:0,0 -acodec aac -f v4l2 -framerate 10 -i /dev/video1 -q 10 -f flv rtmp://127.0.0.1/live/wei

我这边插上耳机通过耳机的耳麦说话并且通过摄像头可以正常在播放器下看到图像听到声音啦!


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

相关文章

大华摄像头实现web端实时播放以及录像回放

文章目录 前言一、在乐橙云平台上注册账号并添加设备创建应用二、利用云平台的api获取到前端展示需要的相关信息三、前端页面展示内容总结 前言 前段时间对接了大华摄像头,在此做一次总结,总体思路是:把大华摄像头绑定到乐橙云平台上&#x…

linux系统如何添加硬盘设备

前言: 今天记录一下硬盘方面的知识,主要讲一下分区、挂载方面的知识,心情太郁闷了,假期的最后一天。 1、硬盘的命名规则 现在的硬盘设备一般都会以“/dev/sd”开头,而一台主机上可以有多块硬盘设备,因此系…

word文档解密方法

将加密的文档,另存为,保存类型,选择,Word XML文档;右击xml文档,选择,记事本打开,点击编辑,选择,查找;输入,enforcement,点…

word忘记密码处理

方法一: 用于word各版本。 1、把受保护的文件另存为XML格式,新存的文件用右键以记事本的方式打开,搜索“DocumentProtection”,在前面加上“un”,变为“unDocumentProtection”,保存。 2、用word打开修改后…

word密码忘了怎么解开

Word文件设置了密码,就可以控制自己的文件能够只给指定的人阅读,但是时间久了就忘记了自己设置的密码是什么了。该如何解开呢? 这个可以使用okfone WORD解密大师 解决,可以帮助解决忘记密码问题,也可以解决不能编辑文…

破解docx文档保护密码

破解word 2007文档保护密码 word 2007 设置了文档保护密码后打开文档&#xff0c;只能看&#xff0c;无法修改 解除方法&#xff1a; 1.将扩展名 .docx 改为 .zip 压缩包 2.打开压缩包&#xff0c;名字为“word”的文件夹 3.用记事本等修改里面的 settings.xml,把<w:documen…

如何破解Word“取消文档保护”密码

方法一&#xff1a; 用于word各版本。 把受保护的文件另存为XML格式&#xff0c;新存的文件用右键以记事本的方式打开&#xff0c;搜索“DocumentProtection”&#xff0c;在前面加上“un”&#xff0c;变为“unDocumentProtection”&#xff0c;保存。 用word打开修…

不用暴力破解软件,去除word保护密码(转)

如果您有一定的电脑基础&#xff0c;您可以试一下以下方法&#xff1a; 1、首先用Word 2003打开已设置有密码的“保护文档”(原始DOC文件)&#xff0c;此文档可由Word 2000/XP(2002)/2003创建(保护文档创建方法见上文)&#xff1b; 2、在菜单中选择“文件→另存为Web页”&#…