基于linux下的音视频采集与传输.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

摘要:在LINUX下实现对音频和视频的采集,并编写Socket程序将采集到的音频文件在两台主机的进程之间进行传输。

关键字:LINUX 音频、视频 采集 Socket传输

项目简介

本项目将分成三部分来分别实现,分别为Linux下视频的采集、Linux下音频的采集、Linux下Socket传输的实现。下面将分别介绍各部分具体的实现过程。

Linux下视频采集

1、背景介绍

V4L,其全称是Video4Linux(VideoforLinux),是在linux内核中关于视频设备的API接口,涉及开关视频设备、采集并处理视频图像信息。V4L从2.1.x版本的内核中开始出现。

现在出现Video4Linux2(VideoforLinuxTwo),简称V4L2。很显然,他是V4L的改进版,修复了第一代的部分设计bug。从2.5.x开始,V4L2就被集成到内核里面去了。尽管如此,还是有一部分设备的驱动不支持新版本的V4L2,所以,有时候我们会看到V4L跟V4L2同时出现在代码里面。

Linux系统中,视频设备被当作一个设备文件来看待,设备文件存放在/dev目录下,完整路径的设备文件名为:/dev/video0.

2、视频采集基本步骤

视频采集基本步骤流程:打开设备-检查和设置设备属性-设置帧格式-设置一种输入输出方法(缓冲区管理)-循环获取数据-关闭设备。

其中打开视频设备非常简单,在V4L2中,视频设备被看做一个文件。使用open函数打开这个设备,打开这个设备有两种模式即阻塞模式和非阻塞模式。主要实现代码为:

eq\o\ac(○,1)用非阻塞模式打开摄像头设备代码为

intcameraFd;

cameraFd=open(/dev/video0,O_RDWR|O_NONBLOCK);

eq\o\ac(○,2)用阻塞模式打开摄像头设备,上述代码变为:

cameraFd=open(/dev/video0,O_RDWR);

应用程序能够使用阻塞模式或非阻塞模式打开视频设备,如果使用非阻塞模式调用视频设备,即使尚未捕获到信息,驱动依旧会把缓存(DQBUFF)里的东西返回给应用程序。

3、Linux视频设备驱动常用控制命令使用说明

设置视频设备属性通过ioctl来进行设置,ioctl有三个参数,分别是fd,cmd,和parameter,表示设备描述符,控制命令和控制命令参数。

Linux视频设备驱动接口V4L2支持的常用控制命令如下:

eq\o\ac(○,1)控制命令VIDIOC_ENUM_FMT

功能:获取当前视频设备支持的视频格式。

参数说明:参数类型为V4L2的视频格式描述符类型structv4l2_fmtdesc

返回值说明:执行成功时,函数返回值为0;structv4l2_fmtdesc结构体中的.pixelformat和.description成员返回当前视频设备所支持的视频格式;

使用举例:

structv4l2_fmtdescfmt;

memset(fmt,0,sizeof(fmt));

fmt.index=0;

fmt.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;

while((ret=ioctl(dev,VIDIOC_ENUM_FMT,fmt))==0){

fmt.index++;

printf({pixelformat=%c%c%c%c,description=%s}\n,

fmt.pixelformat0xFF,(fmt.pixelformat8)0xFF,

(fmt.pixelformat16)0xFF,(fmt.pixelformat24)0xFF,

fmt.description);

}

eq\o\ac(○,2)控制命令VIDIOC_QUERYCAP

功能:查询视频设备的功能;

参数说明:参数类型为V4L2的能力描述类型structv4l2_capability;

返回值说明:执行成功时,函数返回值为0;函数执行成功后,structv4l2_capability结构体变量中的返回当前视频设备所支持的功能;例如支持视频捕获功能V4L2_CAP_VIDEO_CAPTURE、V4L2_CAP_STR

文档评论(0)

liuzhouzhong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档