一种音频数据采集的方法和装置与流程

文档序号:15019695发布日期:2018-07-25 00:24阅读:173来源:国知局

本发明涉及视联网技术领域,特别是涉及一种音频数据采集的方法和装置。



背景技术:

视联网是一种基于以太网硬件实时大带宽传输网络,用于高速传输高清视频及专用协议的专用网络。

在视联网终端中,在进行音频采集时主要采用阻塞式音频采集方式,具体流程为:

首先,初始化ALSA(Advanced Linux Sound Architecture,高级Linux声音架构)音频采集的参数;其次,在一个循环中不断调用阻塞的音频采集接口读取音频数据,无数据时候,就阻塞在音频采集接口;最后,退出采集时候,关闭描述符,清理所占用的资源。

阻塞式音频采集当无数据时,会阻塞在音频采集接口,会导致视联网终端无法及时退出、或不正常中断重启的问题。此外,阻塞式音频采集由于中断,需要周期性的重新初始化ALSA接口,而初始化ALSA接口会带来噪音,影响用户的使用体验。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题的音频数据采集方法和装置。

为了解决上述问题,本发明公开了一种音频数据采集的方法,应用于视联网系统,其中,所述方法包括:初始化高级Linux声音架构ALSA,确定待监测描述符;初始化多路复用接口,其中,所述多路复用接口为操作系统与所述视联网系统的交互接口;将所述待监测描述符添加至所述多路复用接口中;当操作系统监测到某一待监测描述符可读时,将所述多路复用接口中所述描述符的状态修改为可读状态;所述视联网系统循环监测、所述多路复用接口中可读状态的描述符,从可读状态的描述符下采集音频数据。

优选地,所述待监测描述符包括循环结束描述符,在所述从可读状态的描述符下采集音频数据的步骤之后,所述方法还包括:当欲退出音频数据采集时,接收对所述循环结束描述符进行的写操作,其中,所述写操作可使所述循环结束符呈可读状态;操作系统监测到循环结束描述符可读时,将所述多路复用接口中的所述循环结束符状态修改为可读状态;所述视联网系统监测到所述循环结束符为可读状态后,从所述循环结束符中读取结束指令,退出循环检测音频采集描述符和循环结束描述符的操作。

优选地,所述初始化高级Linux声音架构ALSA,确定待监测描述符的步骤,包括:初始化ALSA,通过ALSA采集音频采集参数,对采集的所述音频采集参数进行转化生成待监测描述符。

优选地,在所述从所述循环结束符中读取结束指令,退出循环监测、所述多路复用接口中可读状态的描述符,从可读状态的描述符下采集音频数据的操作的步骤之后,所述方法还包括:将所述待监测描述符从所述多路复用接口中删除。

优选地,所述视联网系统循环监测、所述多路复用接口中可读状态的描述符,从可读状态的描述符下采集音频数据步骤,包括:所述视联网系统调用轮询函数查找所述多路复用接口中可读状态的描述符;当未轮询到可读状态的描述符时,重复执行轮询操作,直至轮询到可读状态的描述符;当轮询到可读状态的描述符时,从所述可读状态的描述符下采集音频数据,音频数据采集完成后,继续返回执行所述查找所述多路复用接口中可读状态的描述符的操作。

为了解决上述问题,本发明还公开了一种音频数据采集的装置,其中,所述装置包括:第一初始化模块,用于初始化高级Linux声音架构ALSA,确定待监测描述符;第二初始化模块,用于初始化多路复用接口,其中,所述多路复用接口为操作系统与所述视联网系统的交互接口;添加模块,用于将所述待监测描述符添加至所述多路复用接口中;状态修改模块,用于当操作系统监测到某一待监测描述符可读时,将所述多路复用接口中所述描述符的状态修改为可读状态;循环监测模块,用于循环监测、所述多路复用接口中可读状态的描述符,从可读状态的描述符下采集音频数据。

优选地,所述装置还包括:写操作接收模块,用于在所述循环监测模块从可读状态的描述符下采集音频数据之后,当欲退出音频数据采集时,接收对所述循环结束描述符进行的写操作,其中,所述写操作可使所述循环结束符呈可读状态,所述待监测描述符包括循环结束描述符,循环结束符状态修改模块,用于操作系统监测到循环结束描述符可读时,将所述多路复用接口中的所述循环结束符状态修改为可读状态;退出模块,用于监测到所述循环结束符为可读状态后,从所述循环结束符中读取结束指令,退出循环检测音频采集描述符和循环结束描述符的操作。

优选地,所述第一初始化模块具体用于:初始化ALSA,通过ALSA采集音频采集参数,对采集的所述音频采集参数进行转化生成待监测描述符。

优选地,所述装置还包括:删除模块,用于在所述退出模块从所述循环结束符中读取结束指令,退出循环监测、所述多路复用接口中可读状态的描述符,从可读状态的描述符下采集音频数据的操作之后,将所述待监测描述符从所述多路复用接口中删除。

优选地,所述循环监测模块具体用于:调用轮询函数查找所述多路复用接口中可读状态的描述符;当未轮询到可读状态的描述符时,重复执行轮询操作,直至轮询到可读状态的描述符;当轮询到可读状态的描述符时,从所述可读状态的描述符下采集音频数据,音频数据采集完成后,继续返回执行所述查找所述多路复用接口中可读状态的描述符的操作。

与现有技术相比,本发明具有以下优点:

本发明实施例提供的音频数据采集方案,在进行音频数据采集时引入多路复用接口,由操作系统监测描述符状态,当描述符可读时在多路复用接口中将该描述符的状态修改为可读,视联网系统监测到多路复用接口中的某描述状态为可读时,从该描述符下采集音频数据。本发明实施例提供的音频数据采集方案,视联网系统是在确定描述符下对应有可采集到音频数据后,才进行音频数据采集,节省CPU,由于采集描述符设置为非阻塞描述符,不会出现因无法采集到音频数据,而阻塞在音频采集接口的问题,由于不会在音频采集接口阻塞,因此,视联网终端不会不正常中断、重启。由于不会不正常中断、重启,故无需周期性的重新初始化ALSA接口,避免初始化ALSA接口带来的噪音,能够提升用户的使用体验。

附图说明

图1是根据本发明实施例一的一种音频数据采集方法的步骤流程图;

图2是根据本发明实施例二的一种音频数据采集方法的步骤流程图;

图3是根据本发明实施例三的一种音频数据采集装置的结构框图;

图4是根据本发明实施例四的一种音频数据采集装置的结构框图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

实施例一

参照图1,示出了本发明实施例一的一种音频数据采集方法包括以下步骤:

步骤101:初始化ALSA,确定待监测描述符。

本发明实施例提供的音频数据采集的方法适用于视联网系统,其中,待监测描述符可以由ALSA确定。

ALSA是Advanced Linux Sound Architecture,高级Linux声音架构的简称,它在Linux操作系统上提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。

步骤102:初始化多路复用接口。

其中,多路复用接口为操作系统与视联网系统的交互接口。多路复用接口为操作系统中现有的交互接口,本发明实施例中创造性的引入该接口进行音频数据采集。

操作系统有一个重要功能,当某个描述符可读或者可写的时候,它发出一个通知消息。本发明实施例中,通过操作系统的该重要功能实现非阻塞音频数据采集,具体地,当配合非阻塞的描述符使用时,当操作系统通过多路复用接口通知视联网系统哪个描述符可读后,视联网系统才去执行读操作,可以保证视联网系统的每次读操作都能读到有效数据而不做纯返回-1和EAGAIN的无用操作。操作系统的这个功能通过select/poll/epoll/kqueue之类的系统调用函数来使用,这些函数可以同时监视多个描述符的读写就绪状况,这样,多个描述符的I/O操作都能在视联网系统中并发交替地顺序完成,因此可以称为I/O多路复用,这里的“复用”指的是复用于同一个线程。

步骤103:将待监测描述符添加至多路复用接口中。

若待监测描述符为两个,则将这两个描述符均添加至多路复用接口中。

待监测描述符包括:音频采集描述符和循环结束描述符。音频采集描述符为可读状态时,则可从该描述符下读取音频数据。当循环结束描述符为可读状态时,则可从该描述符下读取结束指令,退出循环检测音频采集描述符和循环结束描述符的操作。

步骤104:当操作系统监测到某一待监测描述符可读时,将多路复用接口中的该描述符的状态修改为可读状态。

操作系统可以同时监测多个描述符的读写就绪状态,当监测到某一个待监测描述符为可读状态时,则将多路复用接口中该描述符的状态修改为可读状态。

当然,若操作系统监测到多个待监测描述符均为可读状态时,则一一对多路复用接口中的各描述符进行状态修改。

步骤105:视联网系统循环监测、多路复用接口中可读状态的描述符,从可读状态的描述符下采集音频数据。

视联网系统通过select/poll系统调用函数,来循环监测多路复用接口中是否存在可读状态的描述符,当监测到存在可读状态的描述符时,则从该描述符下采集音频数据。当未监测到存在可读状态的描述符时,在轮询描述符状态的环节下阻塞在select/poll系统调用函数,直至监测到可读状态的描述符后从select/poll系统调用函数返回,返回可读的描述符,进而读取音频数据。

本发明实施例提供的音频数据采集的方法,在进行音频数据采集时引入多路复用接口,由操作系统监测描述符状态,当描述符可读时在多路复用接口中将该描述符的状态修改为可读,视联网系统监测到多路复用接口中的某描述状态为可读时,从该描述符下采集音频数据。本发明实施例提供的音频数据采集方法,视联网系统是在确定描述符下对应有可采集到音频数据后,才进行音频数据采集,节省CPU资源,由于采集描述符设置为非阻塞描述符,因此不会出现因无法采集到音频数据,而阻塞在音频采集接口的问题,由于不会在音频采集接口阻塞,因此,视联网终端不会不正常中断、重启。由于不会不正常中断、重启,故无需周期性的重新初始化ALSA接口,避免初始化ALSA接口带来的噪音,能够提升用户的使用体验。

实施例二

参照图2,示出了本发明实施例二的一种音频数据采集的方法的步骤流程图。

本发明实施例的音频数据采集方法具体包括以下步骤:

步骤201:初始化ALSA,通过ALSA采集音频采集参数,对采集的音频采集参数进行转化生成待监测描述符。

ALSA采集音频采集参数,对采集的音频采集参数继续宁转化生成待监测描述符的具体实现方式,参照相关技术即可,本发明实施例中对此不作具体限制。

步骤202:初始化多路复用接口。

其中,多路复用接口为操作系统与视联网系统的交互接口。多路复用接口为操作系统中现有的交互接口,本发明实施例中创造性的引入该接口进行音频数据采集。

步骤203:将待监测描述符添加至多路复用接口中。

其中,待监测描述符包括音频采集描述符以及循环结束描述符。

其中,音频采集描述符用于写入音频数据,循环结束描述符则用于写入结束指令。循环结束描述符即为结束总循环的eventfd。

步骤204:当操作系统监测到某一待监测描述符可读时,将多路复用接口中该描述符的状态修改为可读状态。

当欲发布音频数据时,将音频数据写入到对应描述符中即可。此时,操作系统则可监测到该描述符可读,操作系统将多路复用接口中该描述符的状态修改为可读状态。

步骤205:视联网系统调用轮询函数查找多路复用接口中可读状态的描述符;若存在可读状态的描述符,则执行步骤206,若不存在可读状态的描述符,则重复执行步骤205。

若存在可读状态的描述符,则视联网系统从可读状态描述符下读取音频数据,并转发读取的音频数据。当不存在可读状态的描述符时即无音频数据时,阻塞在多路复用接口,直到有音频数据可读阻塞结束。

在该循环中,可以不断调用poll/select,如果没有可读状态的描述符则阻塞在poll/select调用即阻塞在轮询多路复用接口中是否存在处于可读状态的描述符;如果有可读状态的描述符,则读取该描述符下的音频数据并转发。

步骤206:当轮询到可读状态的描述符时,从可读状态的描述符下采集音频数据,音频数据采集完成后,继续返回执行查找多路复用接口中可读状态的描述符的操作。

步骤207:当欲退出音频数据采集时,接收对循环结束描述符进行的写操作。

其中,写操作可使循环结束符呈可读状态,本次写操作可以写入结束指令。

退出采集时,进行一个写操作,poll/select因此收到数据,从阻塞在poll/select调用中返回,退出循环。

步骤208:操作系统监测到循环结束描述符可读时,将多路复用接口中的循环结束符状态修改为可读状态。

循环结束描述符中写入结束指令后,循环结束描述符的状态则为可读状态。操作系统监测到循环结束描述符为可读状态时,将多路复用接口中的循环结束符状态修改为可读状态。

步骤209:视联网系统监测到循环结束符为可读状态后,从循环结束符中读取结束指令,退出循环检测音频采集描述符和循环结束描述符的操作。

步骤210:将待监测描述符从多路复用接口中删除。

将待监测描述符从多路复用接口中删除,清理占用的资源。

通过本发明实施例提供的音频数据采集方法,在进行音频数据采集时引入多路复用接口,由操作系统监测描述符状态,当描述符可读时在多路复用接口中将该描述符的状态修改为可读,视联网系统监测到多路复用接口中的某描述状态为可读时,从该描述符下采集音频数据。本发明实施例提供的音频数据采集方法,视联网系统是在确定描述符下对应有可采集到音频数据后,才进行音频数据采集,节省CPU资源,由于采集描述符设置为非阻塞描述符,因此不会出现因无法采集到音频数据,而阻塞在音频采集接口的问题,由于不会在音频采集接口阻塞,因此,视联网终端不会不正常中断、重启。由于不会不正常中断、重启,故无需周期性的重新初始化ALSA接口,避免初始化ALSA接口带来的噪音,能够提升用户的使用体验。

实施例三

参照图3,示出了本发明实施例三的一种音频数据采集的装置的结构框图。

本实施例的音频数据采集的装置包括:第一初始化模块301,用于初始化高级Linux声音架构ALSA,确定待监测描述符;第二初始化模块302,用于初始化多路复用接口,其中,所述多路复用接口为操作系统与所述视联网系统的交互接口;添加模块303,用于将所述待监测描述符添加至所述多路复用接口中;状态修改模块304,用于当操作系统监测到某一待监测描述符可读时,将所述多路复用接口中所述描述符的状态修改为可读状态;循环监测模块305,用于循环监测、所述多路复用接口中可读状态的描述符,从可读状态的描述符下采集音频数据。

本发明实施例提供的音频数据采集的装置,在进行音频数据采集时引入多路复用接口,由操作系统监测描述符状态,当描述符可读时在多路复用接口中将该描述符的状态修改为可读,视联网系统监测到多路复用接口中的某描述状态为可读时,从该描述符下采集音频数据。本发明实施例提供的音频数据采集的装置,是在确定描述符下对应有可采集到音频数据后,才进行音频数据采集节省CPU资源,由于采集描述符设置为非阻塞描述符,因此不会出现因无法采集到音频数据,而阻塞在音频采集接口的问题,由于不会在音频采集接口阻塞,因此,视联网终端不会不正常中断、重启。由于不会不正常中断、重启,故无需周期性的重新初始化ALSA接口,避免初始化ALSA接口带来的噪音,能够提升用户的使用体验。

实施例四

参照图4,示出了本发明实施例四的一种音频数据采集的装置的结构框图。

本发明实施例的音频数据采集的装置是对实施例三中音频数据采集的装置的进一步优化,优化后装置包括:第一初始化模块401,用于初始化高级Linux声音架构ALSA,确定待监测描述符;第二初始化模块402,用于初始化多路复用接口,其中,所述多路复用接口为操作系统与所述视联网系统的交互接口;添加模块403,用于将所述待监测描述符添加至所述多路复用接口中;状态修改模块404,用于当操作系统监测到某一待监测描述符可读时,将所述多路复用接口中所述描述符的状态修改为可读状态;循环监测模块405,用于循环监测、所述多路复用接口中可读状态的描述符,从可读状态的描述符下采集音频数据。

优选地,所述装置还包括:写操作接收模块406,用于在所述循环监测模块405从可读状态的描述符下采集音频数据之后,当欲退出音频数据采集时,接收对所述循环结束描述符进行的写操作,其中,所述写操作可使所述循环结束符呈可读状态,所述待监测描述符包括循环结束描述符,循环结束符状态修改模块407,用于操作系统监测到循环结束描述符可读时,将所述多路复用接口中的所述循环结束符状态修改为可读状态;退出模块408,用于监测到所述循环结束符为可读状态后,从所述循环结束符中读取结束指令,退出循环检测音频采集描述符和循环结束描述符的操作。

优选地,所述第一初始化模块401具体用于:初始化ALSA,通过ALSA采集音频采集参数,对采集的所述音频采集参数进行转化生成待监测文件描述符。

优选地,所述装置还包括:删除模块409,用于在所述退出模块408从所述循环结束符中读取结束指令,退出循环监测、所述多路复用接口中可读状态的描述符,从可读状态的描述符下采集音频数据的操作之后,将所述待监测描述符从所述多路复用接口中删除。

优选地,所述循环监测模块405具体用于:调用轮询函数查找所述多路复用接口中可读状态的描述符;当未轮询到可读状态的描述符时,重复执行轮询操作,直至轮询到可读状态的描述符;当轮询到可读状态的描述符时,从所述可读状态的描述符下采集音频数据,音频数据采集完成后,继续返回执行所述查找所述多路复用接口中可读状态的描述符的操作。

本实施例的音频数据采集的装置用于实现前述实施例一以及实施例二中相应的音频数据采集的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上对本发明所提供的一种音频数据采集的方法和装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1