音视频数据采集设计.docx
- 文档编号:25600672
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:88
- 大小:5.58MB
音视频数据采集设计.docx
《音视频数据采集设计.docx》由会员分享,可在线阅读,更多相关《音视频数据采集设计.docx(88页珍藏版)》请在冰豆网上搜索。
音视频数据采集设计
创作设计说明书
嵌入式音视频数据采集模块的设计
学院:
专业:
学生姓名:
学号:
指导教师:
年月
摘要
嵌入式音视频数据采集的设计,是以Linux系统为开发环境,cortoexA8开发板作为硬件开发平台,结合linuxC语言开发而成的。
使用麦克风、摄像头、扬声器和电容屏等硬件设备,通过linuxc程序编程对开发板的麦克风进行录音,采集音频数据,存储录音文件,并使用扬声器播放录制的音频,完成对音频数据的采集功能。
把摄像头插到开发板上,通过程序读写音视频设备使摄像头采集实时采集图像数据,存储为图片和视频,显示在电容屏上,并实现拍照,照片浏览、录像、播放录像等视频数据采集功能。
关键字:
linuxC、cortexA8开发板、麦克风、摄像头、扬声器、电容屏
Abstract
ThedesignoftheembeddedaudioandvideodatacollectionisbasedonLinuxsystemasthedevelopmentenvironment,cortoexA8developmentboardashardwaredevelopmentplatform,combinedwithLinuxClanguagedevelopment,Thedesignusesthemicrophone,camera,speakersandcapacitancescreendevicesofhardwaretocollectdata.Thefirst,usingLinuxcprogramsforthemicrophoneofdevelopmentboardtocollectthedataofaudio.thesecondthedesignwillsavetherecordingfile,andusethespeakertoplaytherecordedaudio.Thenitcancompletethefunctionofaudiodataacquisition.Plugingthecameraintodevelopmentboard,itmakesthecameratocollectreal-timeacquisitionwiththeprogramtoreadandwriteavequipment.thedateofImagewillbestoredasimagesandvideo.Itshowsinthecapacitancescreen.Itcanrealizefunctionofthephotoandphotobrowsing,videorecording,videoplayingandvideodataacquisition.
Keywords:
linuxC,cortexA8developmentboard,microphone,camera,speaker,capacitivescreen
第一章序言
1.1课题目的
随着多媒体技术的飞速发展,人们对于生活质量的要求以及安全意识也在日益增长,音视频等多媒体技术在嵌入式开发中的广泛应用既是最直观的体现,日常生活中,人们使用各种嵌入式产品摄像、拍照的现象随处可见,大街小巷也都有安防摄像头。
而这些现象的核心就是音视频信息采集,它是视频处理再加工以及安防监控的基础,而嵌入式音视频数据采集模块的设计,对音频,视频数据进行采集、存储、应用,恰恰能够为视频处理和安防监控提供基础,以及为学生学习音视频处理提高技术支持,既是我这次毕业设计的目的。
1.2资料调研分析
近年来随着嵌入式行业的迅速发展,嵌入式产品日益成为人们生活的必需品,并且随着技术的进步,嵌入式产品正朝着高端低成本的方向发展,其中基于嵌入式的音视频技术就是最好的案例,音视频等多媒体技术在嵌入式开发中应用极为广泛,例如:
摄像头图像采集、LCD显示图片、音频采集与播放等在嵌入式各产品中都会有所涉及。
国内外又没有专门音视频信息采集的基础软件,而嵌入式音视频数据采集模块的设计作为音视频数据采集的基础软件,以Linux系统为开发环境,armA8架构作为硬件平台大大节约了开发成本,提高项目的可移植性,不仅可以做为人们生活的娱乐产品,还可以为视频处理再加工以及安防监控提供基础,符合嵌入式发展的需求。
1.3设计简介
本设计是嵌入式音视频数据采集的,实现录放音、录像、播放录像,拍照、图片浏览等功能,主要分为音频数据和视频数据的采集、应用两个部分。
使用凌阳公司提供的cortexA8开发板,通过linuxc程序编程对开发板的话筒进行录音,并用扬声器播放录制的音频,把摄像头插到开发板上,通过程序读写音视频设备使摄像头采集的图像并显示在液晶屏上,并实现拍照,照片浏览等功能。
音频部分主要是通过采集电路(麦克风)得到的是一种连续变化的音频信号(模拟信号),在经过AD转换电路将音频信号转换为计算机可以处理的数字信号,进行存储,实现音频数据的采集。
录音时,先设置好采样频率、采样位数、声道数,再启动声卡的AD芯片,将音频的模拟信号转化为数字信号,最后将音频对应的数字信号存储到文件中。
放音时需要依据录音时声卡的采样频率、采样位数、声道数去设置声卡,再将音频的数字信号通过声卡的DA芯片转化为音频对应的模拟信号。
视频部分主要是通过C编程从摄像头连续捕捉一帧图像并按照一定的时间间隔显示电容屏上,显示图像时,若图像每秒变化超过24次,根据余晖效应,此时人眼无法辨别单幅的静态图像,一张一张静态的图像看上去是连续的运动的,从而形成了视频。
从摄像头获取的图像是原始yuv格式的数据,需要同编程将捕获的每一帧图像转换为一定格式的图片按照一定规则进行存储,从而实现视频数据的采集。
第二章设计要求及方案的确定
2.1设计要求
(1)能够录音并存储为wav格式的音频文件。
(2)播放已经存在的wav格式的音频文件。
(3)视频采集与显示,能够实时从摄像头中获取图像并将摄像头获的帧数据显示到屏幕上。
(4)拍照,捕捉一帧图像保存为bmp照片。
(5)照片浏览,能够把存储的bmp图片显示在电容屏上。
(6)录像,存储摄像头获得的数据,保存为mpg格式视频。
(7)播放录像,能够将存储mpg格式的视频播放出来。
(8)图片及音频或视频支持自动播放
(9)音频文件、视频文件选择目录显示并播放
2.2方案的确定
2.2.1方案的实现
音视频数据采集基础主要有两部分组成:
硬件部分和软件部分
(1)硬件部分主要采用凌阳提供的coterxA8开发板,以及外设摄像头
(2)软件部分主要分为两个方面:
界面设计和功能实现
界面部分:
界面设计主要由gtk+与glade完成,首先由glade设计界生产xml文件,利用gtk+提供的函数接口读取xml文件就能生产相应的界面。
功能实现:
功能实现主要是以LinuxC编程为主,通过进程,线程,管道,以及信号量的使用来实现音视频数据采集
音频部分:
Linux系统为用户操作音频设备提供了统一的编程接口,oss音频框就是其中一种,由于其比较简单容易操作,并且稳定性比较好在音频编程中被广泛使用。
Linux下一切设备皆文件,因此通过oss音频提供的接口驱动音频设备文件/dev/dsp,/dev/dsp:
录音、放音对应的设备文件。
向/dev/dsp文件中写数据会激活声卡上的D/A转换器进行放音。
从/dev/dsp文件中读数据则会激活声卡上的A/D转换器进行录音。
视频部分:
在Linux中,视频的采集、输入及输出主要采用V4L2框架,在V4L2编程框架中,内核为应用程序提供了访问音、视频设备的统一接口。
通过V4L2接口操作视频设备可以像访问普通文件一样对设备文件进行读写。
dev/videoX(X为数字0、1、2、...)对应着摄像头的设备文件。
对设备文件进行读写完成视频数据的采集与播放。
视频显示:
通过gtk+开源库显示采集到的图像。
并且可以自由指定图像的大小,先将摄像头输出的yuv原始数据转换为rgb数据,再通过函数gtk_draw_rgb_image()接口将数据绘制到绘图区,显示在电容屏之前可以指定绘图区的大小,从而改变显示图像的大小。
2.2.2设计流程
(1)界面切换流程图
图2-1各功能界面之间切换流程图
(2)录音、播放录音流程图
图2-2录音播放录音功能实现流程图
(3)录像、拍照流程图
图2-3录像、拍照功能实现流程图
第三章开发环境的搭建及硬件系统
3.1软件开发环境的搭建
嵌入式音视频数据采集模块的设计是在linux下编程,安装物理机比较繁琐,对硬件要求也比较高,所以我选择安装虚拟机,在虚拟机上安装linux系统,我选择安装的虚拟机是vmwareworkstation10,linux版本是Ubuntu12.04.2。
然而linux下没有好的代码编辑、工程管理工具,windows下的SourceInsight项目管理编写软件,恰恰能满足这方面的要求,但需要在linux下编译,所以就用到了window与linux交互工具samba与xshell。
嵌入式音视频数据采集的界面设计主要由gtk+与glade完成,首先由glade设计界面生产xml文件,利用gtk+提供的函数接口读取xml文件就能生产相应的界面。
GTK+是一套在GIMP的基础上发展而来的高级的、可伸缩的现代化、跨平台图形工具包,它可以很方便地制作图形交互界面(GUI)。
特点:
稳定、跨平台、多种语言绑定、接口丰富、与时俱进、算法丰富、移动嵌入式应用广泛。
Glade是GTK+中跨平台的图形用户界面设计工具,Glade工具允许用户快速和高效地设计图形用户界面。
用Glade设计的图形用户界面是以XML格式的文件保存,它描述了控件的结构、每个控件的属性。
用户可以动态加载这个界面文件。
界面和程序逻辑是完全分离,用户修改了界面,也不需要重新编译程序
最后开发程序要在cortexA8开发板运行,需要为cortexA8开发板制作linux内核以及linux文件系统,这里就不做过多的介绍,要想电脑上开发的程序能在cortexA8开发板上使用,还需要在电脑上搭建arm-linux-gcc跨平台编译环境。
至此嵌入式音视频数据采集设计的软件开发环境搭建好了。
3.2硬件系统
3.2.1凌阳cortexA8开发板简介
凌阳cortexA8开发板是凌阳教育开发的嵌入式标准的开发平台。
处理器采用了业界领先的cortexA8,其内部拥有丰富的模块,另外该芯片主频高达833MHZ,可以轻松上手学习嵌入式操作系统的设计及开发。
凌阳cortexA8开发板基于开发考虑,外设比较齐全,接口标准,扩展功能方便。
整个开发板采用核心板加底板方法设计,核心板采用了八层板的设计,线路可靠稳定,是嵌入式学习和研究的最佳选择,该实验仪适合研究人员和电子爱好者用做性能评估与开发。
1、核心板主要元件:
(1)CPU型号为S5PV210
(2)DDR2内存,一共4片,型号为K4T1G164Q
(3)NANDFLASH,1G版本核心板为K9K8G08,256M版本核心板为K9F2G08
(4)有线网络芯片,10/100Mbps,SMSCLAN9220
(5)AC97音频编解码芯片,WM9713,该芯片包含电阻式触摸屏控制器
(6)电源转换芯片,为核心板器件提供所需要的各种电压转换。
2、底板主要元器件:
(2)电源接口,输入电压为5V。
电源上串联有一个1.1A的自恢复保险丝。
(2)电源开关,选用进口优质电源开关,可反复开关不低于10万次。
(3)USB2.0OTG接口,采用miniUSB插座,支持480Mbps高速模式。
(4)HDMI高清显示输出,标准的TypeA型HDMI插座,机械强度高。
(5)CVBS视频输出端口,用于连接电视机。
(6)100M有线以太网接口。
(7)2路RS232电平串口插座,DB9针式插座,和PC串口标准一致。
(8)TF卡插座,支持从TF卡启动。
(9)板载USBWIFI模块(板载和外接二选一),支持802.11n150Mbps。
(10)3路预留USB2.0HOST端口,可以外接U盘,鼠标,键盘等。
(11)音频输出接口,采用3.5mm耳机插座。
板载麦克风。
(12)启动模式设置开关,可以设置多种启动模式。
(13)4个用户LED,由用户程序控制LED的亮灭。
(14)摄像头输入接口,可以连接定制的摄像头扩展板。
(15)液晶输出接口,可以外接各种液晶屏模块。
(16)RTC时钟电池。
(17)GPIO扩展接口,包含2路串口,1路SPI,一个GPIO。
(18)9个用户按键,支持常用的功能操作。
1个复位按键。
3、实物图
图3-1凌阳教育cortexA8开发板
图3-2CortexA8开发板核心板加底板
3.2.2音频输出接口和麦克风
音频输出端口(J11)为标准3.5mm立体声耳机插座,接到AC97编解码芯片WM9713的音频输出。
麦克风(MIC1)也是接到WM9713。
当耳机插入耳机插座时候,耳机插头的金属部分会把耳机插座的第3脚和第4脚短接。
第3脚是地线,这样相当于把第4脚接地,而第4脚和喇叭的功放使能引脚相连接,第4脚接地时候为低电平,喇叭功放就停止工作。
也就是说,耳机插入插座会自动禁止喇叭的声音。
图
3-3编解码芯WM9713电路图
图3-4扬声器电路图
3.2.3电容屏输出接口
液晶屏输出接口(J9)用于连接各种液晶屏,包含了液晶屏数据信号,背光电源和触摸屏这3个部分。
图3-5液晶屏输出接口
液晶屏接口插座使用的是0.5mm间距40芯FPC插座,下接触。
插入FPC带线时候,要把FPC带线的金属接触面朝下。
FPC插座左边为第1脚(白色三角形)。
LCD的35脚LCDSEL是一个识别5寸和7寸液晶屏的引脚,电路板上有一个下拉电阻。
对于5寸的液晶屏模块,这个引脚是空脚,所以是低电平。
对于7寸液晶屏,35脚是接高电平。
因为5寸液晶屏和7寸液晶屏分辨率是一样的,只是背光电流要求不同,所以LCDSEL用于控制背光电流的大小[12]。
LCDSEL为低电平情况,Q9不导通,背光电流I=0.1/R=0.1/3.3=0.03A=30mA。
LCDSEL为高电平情况,Q9导通,R27和R26并联,R=R27*R26/(R27+R26)=1R,
背光电流I=0.1/R=0.1/1=0.1A=100mA。
图3-6液晶屏电路图
3.2.4USB2.0HOST接口
S5PV210只有1路USB2.0HOST端口,底板上通过USBHUB芯片GL850G扩展出4个USB2.0端口,其中一个用于板载WIFI接口,剩余3个是标准的USBA型接口插座,分别是J23,J24,J25。
支持高速模式,也就是480Mbps。
之前三星的S3C2440A和S3C6410的USBHOST最高只支持USB2.0全速(12Mbps)模式。
S5PV210只有1路USB2.0HOST端口,底板上通过USBHUB芯片GL850G扩展出4个USB2.0端口,其中一个用于板载WIFI接口,剩余3个是标准的USBA型接口插座,分别是J23,J24,J25。
支持高速模式,也就是480Mbps。
之前三星的S3C2440A和S3C6410的USBHOST最高只支持USB2.0全速(12Mbps)模式。
图3-7USB电路图
图3-8USB实物图
1:
VCC(5V),为接入USB端口的设备提供电源
2:
USBD-,也用DM表示,USB差分信号-
3:
USBD+,也用DP表示,USB差分信号+
4:
GND电源地
3.2.5摄像头外设
高品质CMOS感应器。
支持WindowsXPSP2/Vista等操作系统。
支持手动式调焦。
静态图像拍照:
默认分辨率为640x480。
视频录像捕捉:
默认分辨率为640x480,软件增值可达到500万(2560x1920),YUY2输出格式。
USB2.0高速传输,高帧速(30-15fps)视频播放,画面流畅不停顿。
自动白平衡、曝光。
最小灵敏度:
2.0V/Lux.Sec。
闪烁控制:
50Hz或60Hz自动识别。
支持抓取、储存静态照片(JPG格式)功能。
支持QQ、MSN、雅虎通等视频聊天软件,等视频聊天室。
工作温度:
-10~60℃。
功耗:
<0.5W。
图3-9摄像头实物图
3.2.6串口及串口电路
S5PV210一共有四个串口,其中2个通过SP3232电平转换芯片连接到DB9插座。
另外2个直接从CPU连接到开发板J17插座。
图3-10串口电路图
图3-11串口管脚定义
开发板的DB9串口信号定义和PC的串口定义完全一样:
2:
RXD接收信号,对于开发板来说是输入信号
3:
TXD发送信号,对于开发板来说是输出信号
5:
GND公共地
第四章音视频程序的设计与功能实现
4.1主界面的设计及功能实现
4.1.1主界面的设计
主界面的设计模板主要在windows下Glade-3.6.6界面设计软件下设生成xml文件,通过linux下开源gtk+库中函数接口获取解析模板,并通过函数接口获得模板中的控件,使用插入图片接口为窗口插入背景,为控件插入图片。
函数接口:
window->gxml=glade_xml_new(MAIN_WINDOW,NULL,NULL);//解析设计模板window->main_win.main_window=glade_xml_get_widget(window->gxml,"main_window");//获取glade定义的控件
sungtk_background_set_picture(window->main_win.main_window,"../image/back.jpg",W,H);//为窗口设置背景
sungtk_button_inset_image(window->main_win.wav_button,"../image/wav.png",MAIN_BUT_W,MAIN_BUT_H);//为控件插入图片
主界面内容:
音频采集按钮,视频采集按钮,退出程序按钮,时间标签
4.1.2功能实现
主界面的主要功能是功能选择,选择录像还是录音,点击录像,录音按钮会进入相应的功能窗口,点击退出按钮会推出程序。
当点击功能按钮时,会触发点击"clicked"事件,通过接口调用相应按钮触发的回调函数,点击录音,录像按钮时,会调用gtk_widget_hide_all()接口隐藏主界面,gtk_widget_show_all()接口更换已经初始化好的相应的功能界面,点击关闭按钮,调用gtk_main_quit()退出窗口,并退出程序
设计模板及效果图:
图4-1主界面模板
图4-2主界面窗口视图
4.2录放音界面的设计及功能实现
4.2.1录音界面的设计
录音界面主要包括录音按钮,放音界面按钮,返回按钮。
设计模板及效果图如下:
图4-3录音界面设计模板
图4-4录音界面效果图
4.2.2录音界面功能的实现
录音界面功能主要包括,录音功能,进入放音界面功能,返回主界面功能。
录音功能:
当接入录音界面时先初始化/dev/dsp录音设备,设置采样位数,采样通道,采样频率(正常人耳识别频率:
20~20khz),这次设计我采用的采样频率是22050hz(22khz),通道数为2,采样位数为16,一秒采集到的数据大小为88200Byte,点击录音按钮,开启一个线程,按照时间新建并打开一个.wav文件,开始录音,对于.WAV格式的音频文件先设定44字节的头并写入文件头部,然后通过read()接口不断的从/dev/dsp音频设备读取音频数据,并循环不停的将采样数据通过write()接口写入文件,直到点击停止录音按钮,将音频数据的大小写入wav文件头部,存取文件到指定路径,完成录音,连续录音,需要结束并回收上次录音的线程资源。
进入放音界面:
隐藏录音界面,显示播放录音界面窗口即可。
返回主界面:
隐藏录音界面,显示主界面窗口即可,返回主界面会同时关闭录音设备。
4.2.3放音界面的设计
放音界面主要包括,播放录音按钮,删除录音文件按钮,返回按钮,
录音文件列表等控件。
4.2.4放音界面功能的实现
放音界面功能主要包括,显示录音文件功能,删除录音文件功能,自动播放功能,返回录音界面功能。
显示及播放录音文件功能的实现:
进入播放录音界面先通过opendir和readdir读取指定路径的.wav文件并显示在屏幕上,点击屏幕上的.wav文件时,分栏列表会产生一个信号,触发选择文件"select-row"事件,调用事件回调函数,在回调函数中会开启一个线程,在这个线程中先读取wav文件的44个字节的头部,从中解析出录用数据的长度,根据数据长度,不停的读取.wav文件中录音数据,每次读到的数据大小为88200Byte,同录音时每次从音频设备读取的大小相同,并写入音频设备实现放音,直到每次读取的音频数据的累积等于文件音频数据长度,或切换录音为止,连续切换播放录音,需要结束并回收上次录音的线程资源。
删除录音文件:
点击选中的录音文件,通过接口remove(wav格式文件路径)删除即可。
自动播放功能:
点击播放按钮即可实现自动播放录音,播放录音实现如上所述,当一个录音文件播放完后,会自动进入循环播放录音模式,点击该按钮可停止。
返回录音界面:
隐藏当前窗口,显示录音窗口。
录音、播放录音功能实现可参考图2录音播放录音功能实现流程图。
设计模板及效果图:
图4-5放音界面设计模板
图4-6放音界面效果图
4.3录像、拍照界面的设计及功能实现
4.3.1录像、拍照界面的设计
录像、拍照界面包括拍照、录像选择标签,拍照、录像按钮,录像播放窗口按钮,图像刷新显示区域,返回按钮。
4.3.2录像功能的实现
当进行拍照、录像界面时,首先初始化V4L2视频框架,通过接口video_init_device(&window->video,"/dev/video0",640,480打开"/dev/video0"视频设备,通过接口video_start_capturing(&window->video)开启图像捕捉功能,开启线程通过V4L2接口video_get_frame(&window->video,video_frame_rgb,rgb)实时获取摄像头中图像数据并
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 视频 数据 采集 设计