CN109584891B - 嵌入式环境下的音频解码方法、装置、设备及介质 - Google Patents
嵌入式环境下的音频解码方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN109584891B CN109584891B CN201910087608.5A CN201910087608A CN109584891B CN 109584891 B CN109584891 B CN 109584891B CN 201910087608 A CN201910087608 A CN 201910087608A CN 109584891 B CN109584891 B CN 109584891B
- Authority
- CN
- China
- Prior art keywords
- audio
- audio format
- memory buffer
- target
- target audio
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 58
- 239000000872 buffer Substances 0.000 claims abstract description 185
- 238000001514 detection method Methods 0.000 claims abstract description 66
- 238000005538 encapsulation Methods 0.000 claims description 15
- 230000003139 buffering effect Effects 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 5
- 230000006835 compression Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 101100066776 Caulobacter vibrioides (strain ATCC 19089 / CB15) flgF gene Proteins 0.000 description 3
- 101150060393 flaC gene Proteins 0.000 description 3
- 101150054723 fliI gene Proteins 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000005236 sound signal Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10L—SPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
- G10L19/00—Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
- G10L19/04—Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using predictive techniques
- G10L19/16—Vocoder architecture
- G10L19/18—Vocoders using multiple modes
- G10L19/20—Vocoders using multiple modes using sound class specific coding, hybrid encoders or object based coding
Landscapes
- Engineering & Computer Science (AREA)
- Computational Linguistics (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- Acoustics & Sound (AREA)
- Multimedia (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明公开了一种嵌入式环境下的音频解码方法、装置、设备及介质。该方法包括:根据嵌入式环境下检测到的针对目标音频文件的解码触发指令,获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测;如果确定检测出与所述目标音频文件对应的目标音频格式,则使用与所述目标音频格式匹配的音频解码库对所述目标音频文件进行音频解码。通过上述方法,使嵌入式平台可以兼容更多的音频格式,有效地实现了有限资源下的嵌入式平台对各类音频格式的自动检测,并在检测出音频的格式后对其进行解码播放。
Description
技术领域
本发明实施例涉及音频解码技术领域,尤其涉及一种嵌入式环境下的音频解码方法、装置、设备及介质。
背景技术
音频压缩技术指的是对原始数字音频信号流(PCM编码)运用适当的数字信号处理技术,在不损失有用信息量,或所引入损失可忽略的条件下,降低(压缩)其码率,也称为压缩编码。相应的,音频压缩必须具有相应的逆变换,称为解压缩或解码。
目前,在音频压缩领域存在音频压缩格式有许多,例如MP1/MP2/MP3格式,AAC格式,M4A格式,OPUS格式,FLAC格式,APE格式,WAV格式,AMR-NB格式,AMR-WB格式,AVS格式,等等。对于一个解码器而言,为了兼容更多的音频格式,需要包含许多音频解码库,并根据音频码流格式选择相应的解码库进行解码,具体是根据音频文件的扩展名选择相应的解码库,比如扩展名为MP3,则选择MP3解码库,扩展名为M4A则选择M4A解码库。
但是,在音频文件的扩展名被设置错误,或者某些网络地址音频流不存在扩展名的情况下,就无法通过识别扩展名确定音频格式,进而无法选择正确的解码库进行解码。此时,如果选用PC机上的解码器,可以先将音频文件完整下载下来,再使用各种解码库轮询尝试解码直至能正确解码,但如果是在嵌入式环境下,由于嵌入式系统资源是非常有限的,是无法实现PC环境下的轮询尝试解码方案的。
发明内容
本发明实施例提供了一种嵌入式环境下的音频解码方法、装置、设备及介质,以使嵌入式平台兼容更多的音频格式,实现对各类音频的自动检测并播放。
第一方面,本发明实施例提供了一种嵌入式环境下的音频解码方法,包括:
根据嵌入式环境下检测到的针对目标音频文件的解码触发指令,获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测;
如果确定检测出与所述目标音频文件对应的目标音频格式,则使用与所述目标音频格式匹配的音频解码库对所述目标音频文件进行音频解码。
第二方面,本发明实施例还提供了一种嵌入式环境下的音频解码装置,包括:
音频格式检测模块,用于根据嵌入式环境下检测到的针对目标音频文件的解码触发指令,获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测;
音频解码模块,用于如果确定检测出与所述目标音频文件对应的目标音频格式,则使用与所述目标音频格式匹配的音频解码库对所述目标音频文件进行音频解码。
第三方面,本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明任意实施例所提供的嵌入式环境下的音频解码方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所提供的嵌入式环境下的音频解码方法。
在本发明实施例中,通过对嵌入式系统的内存缓冲区中与目标音频文件对应的至少一段比特流进行检测,检测所述至少一段比特流是否能与各种音频格式比特流特征中的一种匹配成功,如果能够匹配成功,则可确定目标音频文件对应的音频格式,进而可以使用匹配的音频解码库对目标音频文件进行解码播放。由此,本发明实施例使嵌入式平台可以兼容更多的音频格式,有效地实现了有限资源下的嵌入式平台对各类音频格式的自动检测,并在检测出音频格式后对其进行解码播放。
附图说明
图1是本发明实施例一中的一种嵌入式环境下的音频解码方法的流程图;
图2是本发明实施例二中的一种嵌入式环境下的音频解码方法的流程图;
图3是本发明实施例三中的一种嵌入式环境下的音频解码方法的流程图;
图4是本发明实施例四中的一种嵌入式环境下的音频解码方法的流程图;
图5是本发明实施例五中的一种嵌入式环境下的音频解码装置的结构示意图;
图6是为本发明实施例六中的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
实施例一
图1是本发明实施例一提供的一种嵌入式环境下的音频解码方法的流程图,可适用于嵌入式环境下对音频比特流进行解码的情况,尤其是嵌入式环境下对网络直播音频比特流进行解码的情况,该方法可以由本发明实施例提供的嵌入式环境下的音频解码装置来执行,该装置可采用软件和/或硬件的方式实现,并一般可集成在嵌入式系统中。如图1所示,本实施例的方法具体包括:
S110、根据嵌入式环境下检测到的针对目标音频文件的解码触发指令,获取内存缓冲区中缓存的与目标音频文件对应的至少一段比特流进行至少一种音频格式的检测。
目标音频文件指的用户想要浏览的音频文件,例如可以是网络直播中的音频文件,其中,该音频文件是以比特流形式存在的。解码触发指令指的是用户发起的,用于触发对目标音频文件开始格式检测的操作,例如可以是在嵌入式应用场景下,用户点击网直播中某音频链接的操作。
当检测到针对目标音频文件的解码触发指令后,嵌入式系统从内存中划分一部分作为内存缓冲区,用于缓存连续顺序读取的与目标音频文件对应的比特流,其中,内存缓冲区的字节容量要远小于目标音频文件比特流的字节长度,内存缓冲区的字节容量例如可以是三四个音频帧的字节长度。
嵌入式系统首先根据目标音频文件的文件读取地址连续顺序地读取目标音频文件的比特流,并将比特流暂时顺序存储至内存缓冲区中,然后读取内存缓冲区中的至少一段比特流进行音频格式的检测。其中,在获取内存缓冲区中的至少一段比特流进行音频格式检测的过程中,仍然是会有目标音频文件的比特流继续被缓存至内存缓冲区中的,直至缓存的目标音频文件的比特流的字节长度与内存缓冲区的字节容量相等。
获取内存缓冲区中的至少一段比特流进行至少一种音频格式检测,具体可以是,将待检测的至少一段比特流中的内容与预先分析的各种音频格式比特流特征一一去匹配,如果其中一段设定字节比特流中的内容与M4A音频格式比特流特征匹配成功,M4A音频格式比特流特征为文件头中第4~7字节中的内容为“ftyp”,那么目标音频文件的音频格式即为M4A音频格式;如果其中一段设定字节比特流中的内容与FLAC(含OGG封装)音频格式比特流特征匹配成功,FLAC(含OGG封装)音频格式比特流特征为文件头中第0~3字节中的内容为“Oggs”且紧接OGG封装帧头后的4个字节中的内容为“flaC”,那么目标音频文件的音频格式即为FLAC(含OGG封装)音频格式;如果其中一段设定字节比特流中内容与AAC音频格式(以双声道为例)比特流特征匹配成功,AAC音频格式比特流特征为每个音频帧帧头中同步信息均为0xfff且连续三个音频帧的帧长度不超过4608字节,那么目标音频文件的音频格式即为AAC音频格式。
S120、如果确定检测出与目标音频文件对应的目标音频格式,则使用与目标音频格式匹配的音频解码库对目标音频文件进行音频解码。
如果确定目标音频文件的目标音频格式为M4A音频格式,则使用与M4A音频格式匹配的音频解码库对目标音频文件进行音频解码;如果确定目标音频文件的目标音频格式为FLAC(含OGG封装)音频格式,则使用与FLAC(含OGG封装)音频格式匹配的音频解码库对目标音频文件进行音频解码;如果确定目标音频文件的目标音频格式为AAC音频格式,则使用与AAC音频格式匹配的音频解码库对目标音频文件进行音频解码。
典型的,使用与目标音频格式匹配的音频解码库对目标音频文件进行音频解码,包括:将内存缓冲区中的比特流接入匹配的音频解码库的输入缓冲区,以使音频解码库首先对内存缓冲区中的比特流进行解码,再对后续读入的目标音频文件的比特流进行解码。
一旦确认目标音频文件的音频格式后,将内存缓冲区中用于检测音频格式的比特流直接接入匹配的音频解码库的输入缓冲区中,音频解码库会首先处理掉输入缓冲区中的这些比特流,然后再正常读入新的比特流进行解码。
这样设置可以避免误丢掉有效的音频数据,因为内存缓冲区中用于检测音频格式的比特流中是会携带音频数据的,如果不对这些比特流进行解码,将会导致播放目标音频文件时缺少少量开头数据。
具体的,在获取内存缓冲区中缓存的与目标音频文件对应的至少一段比特流进行至少一种音频格式的检测之后,还包括:如果确定未能检测出与目标音频文件对应的目标音频格式,则读取目标音频文件的一个新字节;使用新字节,更新内存缓冲区中缓存的比特流;返回执行获取内存缓冲区中缓存的与目标音频文件对应的至少一段比特流进行至少一种音频格式的检测,直至检测出与目标音频文件对应的目标音频格式,或者当前已读字节数量达到预设的字节读取数量阈值。
在读取的目标音频文件的比特流的字节长度与内存缓冲区的字节容量相等时,如果确定未能检测出与目标音频文件对应的目标音频格式,则可认为是读取的目标音频文件的文件头损坏或者包含冗余比特信息,例如是,MP3网络流随机找到某个位置重新开始的情况,或者是由于网络接收歌曲比特流前面填充冗余比特的情况等。
典型的,根据文件读取位置去读取目标音频文件,文件读取地址根据目标音频文件的已读字节数量更新。其中,可以初始化文件读取位置read_pos为0,读取目标音频文件的一个字节,read_pos加1,进而根据更新后的read_pos再去读取目标音频文件的一个新字节。
在读取的目标音频文件的比特流的字节长度与内存缓冲区的字节容量相等时,如果确定未能检测出与目标音频文件对应的目标音频格式,则根据文件读取位置read_pos读取目标音频文件的一个新字节,使用新字节更新内存缓冲区中缓存的比特流,也即,将当前内存缓冲区中顺序存入的首个字节删除,释放一个字节的缓存以使新字节可以顺序存入内存缓冲区中,然后,返回执行获取内存缓冲区中缓存的与目标音频文件对应的至少一段比特流进行至少一种音频格式的检测,如果仍然不能检测出与目标音频文件对应的目标音频格式,则再次读取目标音频文件的一个新字节,去更新内存缓冲区中缓存的比特流,以此类推,直至能够检测出与目标音频文件对应的目标音频格式或者已读字节数量达到预设的字节读取数量阈值。
判断已读字节数量是否达到预设的字节读取数量阈值,具体可以通过文件读取位置read_pos的数值去判断,当已读字节数量达到预设的字节读取数量阈值时,则可认为已经读取了目标音频文件足够多的字节去检测其音频格式,如果仍未能检测出与目标音频文件对应的目标音频格式,则很有可能无法检测出目标音频文件的音频格式进而对其解码了,此时,可以返回报错信息,用以指示无法成功解码该音频文件。
在上述技术方案中,根据内存缓冲区中的与目标音频文件对应的比特流匹配不到任何音频格式结果时,更新文件读取地址以顺序读取目标音频文件的一个新字节,并使用新字节更新内存缓冲区中缓存的比特流,以此类推,达到了处理文件头错误比特及冗余比特的效果,增强了音频解码的鲁棒性。
本发明实施例中,通过对嵌入式系统的内存缓冲区中与目标音频文件对应的至少一段比特流进行检测,检测所述至少一段比特流是否能与各种音频格式比特流特征中的一种匹配成功,如果能够匹配成功,则可确定目标音频文件对应的音频格式,进而可以使用匹配的音频解码库对目标音频文件进行解码播放。由此,本发明实施例使嵌入式平台可以兼容更多的音频格式,有效地实现了有限资源下的嵌入式平台对各类音频格式的自动检测,并在检测出音频格式后对其进行解码播放。
实施例二
图2是本发明实施例二提供的一种嵌入式环境下的音频解码方法的流程图,本实施例以上述实施例为基础进行具体化。其中,在获取内存缓冲区中缓存的与目标音频文件对应的至少一段比特流进行至少一种音频格式的检测之前,还包括:分配K个字节的内存缓冲区,其中,K为与至少两个连续音频帧对应的字节数相关联的整数;按照文件读取地址,开始执行顺序读取目标音频文件的比特流并缓存于内存缓冲区的操作。
获取内存缓冲区中缓存的与目标音频文件对应的至少一段比特流进行至少一种音频格式的检测,具体包括:获取内存缓冲区中缓存的前N个字节中的至少一段字节段,进行第一类音频格式的检测,其中,N为预设的与包含OGG封装的音频文件头对应的字节数关联的整数;和/或,获取内存缓冲区中缓存的与至少两个连续音频帧对应的比特流,进行第二类音频格式的检测。
进一步的,第一类音频格式包括第一子类音频格式以及第二子类音频格式;
对应的,获取内存缓冲区中缓存的前N个字节中的至少一段字节段,进行第一类音频格式的检测,具体包括:获取内存缓冲区中缓存的包括前M个字节的第一字节段进行第一子类音频格式识别;如果未能识别出与目标音频文件对应的目标音频格式,且根据第一字节段确定目标音频文件包含OGG封装,则获取内存缓冲区中缓存的包括前N个字节的第二字节段,并在第二字节段中去除OGG封装帧头后,得到第三字节段;根据第三字节段,进行第二子类音频格式的检测;其中,M为预设的与不包含OGG封装音频格式的音频文件头对应的字节数关联的整数,M小于N。如图2所示,本实施例的方法具体包括:
S210、根据嵌入式环境下检测到的针对目标音频文件的解码触发指令,分配K个字节的内存缓冲区,其中,K为与至少两个连续音频帧对应的字节数相关联的整数。
在顺序读取目标音频文件的比特流之前,一次性地分配“足够大”的内存缓冲区,将目标音频文件的比特流缓存至内存缓冲区中之后,获取内存缓冲区中的至少一段比特流进行至少一种音频格式的检测。其中,“足够大”的内存缓冲区中的比特流能够检测出目标音频文件的音频格式即可。
对于所有音频格式,大致可以分为两类。第一类音频格式,音频文件头中含有明显的表示音频格式的特征比特标志,例如M4A、OPUS等;第二类音频格式,音频文件头中不含有音频格式比特标志位,而是每帧音频帧都有同步帧头,例如如MP3(不含ID3帧头)和AAC,每帧音频帧中都含有帧头信息,并且帧头中的同步信息为0xfff。
对于第一类音频格式,仅需要几个字节(OGG音频格式需要几百字节)即可确定音频格式,对于第二类音频格式,需要检测几千字节中的若干帧即可确定音频格式。
为了适应不同种类的音频格式的检测,故预先分配的内存缓冲区的字节容量可以按照第二类音频格式中需要检测字节最多的一种音频格式来设置,比如按照第二类音频格式中的AAC音频格式进行设置,由于每帧音频帧的帧长度不一定相同,可以以连续几帧音频帧的最大字节长度来设置,具体在检测双声道ACC音频格式时,通过检测连续三帧音频帧即可确认ACC音频格式,此时至多需要4608个字节,故将K设置为4608即可。
也即,K是与至少两个连续帧对应的字节数相关联的整数,一般来讲,如果连续三帧音频帧同属于一种音频格式,则可将其确认为目标音频格式,由此,可将K设置为连续三帧音频帧的最大字节数。
本发明实施例中选取了12种音频格式进行解释说明,各种音频格式的比特流特征如表1所示,对应的,检测各种音频格式中所需的最大字节数如表2所示。以FLAC(含OGG封装)音频格式为例,根据第0~3字节判断比特流特征“OggS”,然后根据OGG帧头中用于表示OGG帧头中数据长度的字节来计算OGG帧头中的数据长度,进而确定OGG帧头长度,再根据紧接OGG帧头后的第0~3字节判断比特流特征“flaC”,将数据长度按照最大字节数256来计算,最多需要287个字节即可确认FLAC(含OGG封装)音频格式。
S220、按照文件读取地址,开始执行顺序读取目标音频文件的比特流并缓存于内存缓冲区的操作。
表1音频格式的比特流特征示例表
表2音频格式确认所需最大字节数示例表
S230、获取内存缓冲区中缓存的前N个字节中的至少一段字节段,进行第一类音频格式的检测,其中,N为预设的与包含OGG封装的音频文件头对应的字节数关联的整数。
由于进行第一类音频格式的检测时,不包含OGG封装的音频格式仅需要几个字节,包含OGG封装的音频格式需要几百个字节,所以将N设置为与包含OGG封装的音频文件头对应的字节数关联的数值,例如是OGG封装的音频文件的OGG大帧头和音频格式小帧头的字节数总和,为了尽量减少检测的字节数,以本发明实施例中的12种音频格式为例,可以将N设置为第一类音频格式确认所需最大字节数中的最大值291。
进一步的,将第一类音频格式包括第一子类音频格式以及第二子类音频格式,第一子类音频格式即为不包含OGG封装的音频格式,第二子类音频格式即为包含OGG封装的音频格式。
那么,获取内存缓冲区中缓存的前N个字节中的至少一段字节段,进行第一类音频格式的检测,具体为:
1)获取内存缓冲区中缓存的包括前M个字节的第一字节段进行第一子类音频格式识别,M为预设的与不包含OGG封装音频格式的音频文件头对应的字节数关联的整数,M小于N。
进行第一子类音频格式识别仅需几个字节,以本发明实施例中的12种音频格式为例,故可以将M设置为第一子类音频格式确认所需最大字节数中的最大值9。
将内存缓冲区中前M个字节与第一子类音频格式的比特流特征进行匹配,能与哪一种音频格式的比特流特征匹配成功,则可判断目标音频格式为对应的音频格式,例如,如果判断出第4~7字节为“ftyp”,则可确定目标音频格式为M4A音频格式;如果判断出第0~3字节为“flaC”,则可确定目标音频格式为FLAC(不含OGG封装)音频格式。
2)如果未能识别出与目标音频文件对应的目标音频格式,且根据第一字节段确定目标音频文件包含OGG封装,则获取内存缓冲区中缓存的包括前N个字节的第二字节段,并在第二字节段中去除OGG封装帧头后,得到第三字节段。
如果根据前M个字节不能识别出目标音频格式,但第0~3字节为“OggS”,此时可以确认目标音频文件包含OGG封装,故可以获取内存缓冲区中的前N个字节进行第二子类音频格式的识别,先要根据OGG帧头中设定字节中的内容计算OGG帧头中数据长度,进而确定出OGG帧头的字节长度,然后在N个字节中去除OGG帧头,得到第三字节段,用于判断包含OGG封装的音频格式的比特流子特征。
3)根据第三字节段,进行第二子类音频格式的检测。
第三字节段即为紧接OGG帧头的字节段,如果第三字节段中的第0~3字节为“fLaC”,则可确定目标音频格式为FLAC(含OGG封装)音频格式;如果第三字节段中的第1~6字节为“vorbis”,则可确定目标音频格式为OGG vorbis音频格式。
值得指出的是,本实施例中预先分配的内存缓冲区的字节容量比较大,可以缓存至少两帧音频帧的数据,进而在执行顺序读取目标音频文件的比特流并缓存于内存缓冲区的操作的过程中,如果内存缓冲区中缓存了M个字节,即可进行第一子类音频格式的检测,如果内存缓冲区中缓存了N个字节,且未能识别出目标音频格式,即可进行第二子类音频格式的检测,也即顺序读取目标音频文件的操作和音频格式检测的操作是可以并行的,直至缓存的音频数据大小达到内存缓冲区的字节容量。
S240、判断进行第一类音频格式的检测之后是否能识别出与目标音频文件对应的目标音频格式,若否,则执行S250,若是,则执行290。
S250、获取内存缓冲区中缓存的与至少两个连续音频帧对应的比特流,进行第二类音频格式的检测。
如果进行第一类音频格式的检测之后无法识别出目标音频格式,则需根据内存缓冲区中的至少两个连续音频帧来判断是否为第二类音频格式,一般来说,判断连续三个音频帧是否为同一类型即可。
首先获取第一帧音频帧帧头中的同步信息,然后计算第一帧音频帧的帧长,确定第二帧音频帧的位置,进而获取第二帧音频帧帧头中的同步信息,然后再计算第二帧音频帧的帧长,确定第三帧音频帧的位置,进而获取第三帧音频帧帧头中的同步信息。
如果第一帧音频帧的帧头同步信息为0xffe,且根据MP3帧计算帧长的相关字节计算出第一帧音频帧的帧长后,紧接第一帧音频帧的帧尾的刚好是第二帧音频帧的帧头,则可判断出第一帧音频帧为MP3帧,再继续判断第二帧音频帧的帧头同步信息是否也为0xffe,如果是,则根据MP3帧计算帧长的相关字节计算出第二帧音频帧的帧长,如果紧接第二帧音频帧的帧尾刚好是第三帧音频帧的帧头,则可判断出第二帧音频帧也为MP3帧,以此类推,如果连续三帧音频帧均为MP3帧,则确定目标音频格式为MP3(不含ID3帧头);如果紧接第一帧音频帧的帧尾的不是下一帧的帧头,则可判断出第一帧音频帧不是MP3帧,进而基于当前内存缓冲区中的比特流无法确定出目标音频格式。
如果第一帧音频帧的帧头同步信息为0xfff,则首先根据MP3帧计算帧长的相关字节计算出第一帧音频帧的帧长后,判断紧接第一帧音频帧的帧尾的是否刚好是第二帧音频帧的帧头,如果是,则可判断出第一帧音频帧为MP3帧,进而判断连续三帧音频帧是否均为MP3帧,如果不是,则再根据AAC帧计算帧长的相关字节计算出第一帧音频帧的帧长后,判断紧接第一帧音频帧的帧尾的是否刚好是第二帧音频帧的帧头,如果是,则可判断出第一帧音频帧为AAC帧,进而判断连续三帧音频帧是否均为AAC帧。也即,如果连续三帧音频帧的帧头同步信息均为0xfff且连续三帧都是MP3帧,则确定目标音频格式为MP3(不含ID3帧头),如果连续三帧音频帧的帧头同步信息均为0xfff且连续三帧都是AAC帧,则确定目标音频格式为AAC。如果根据MP3帧计算帧长的相关字节计算出第一帧音频帧的帧长后,紧接第一帧音频帧的帧尾的不是下一帧的帧头,根据AAC帧计算帧长的相关字节计算出第一帧音频帧的帧长后,紧接第一帧音频帧的帧尾的也不是下一帧的帧头,则无法判断出第一帧音频帧的音频格式,进而基于当前内存缓冲区中的比特流无法确定出目标音频格式。其中,当第一帧音频帧的帧头同步信息为0xfff时,可以先判断第一帧音频是否为MP3帧,也可以判断第一帧音频是否为AAC帧,对此本实施例不做具体限定。
S260、判断进行第二类音频格式的检测之后是否能识别出与目标音频文件对应的目标音频格式,若否,则执行S270,若是,则执行290。
S270、判断当前已读字节数量是否达到预设的字节读取数量阈值,若否,则执行S280,若是,则执行S2100。
S280、按照更新后的文件读取地址读取目标音频文件的一个新字节,并使用新字节更新所述内存缓冲区中缓存的比特流,执行S230。
S290、使用与目标音频格式匹配的音频解码库对目标音频文件进行音频解码。
S2100、检测目标音频文件的目标音频格式失败。
本实施例未尽详细之处请参见前述实施例,在此不再赘述。
由于涉及的音频格式过多,并且同一种音频格式还可能具有不同的比特流特征,比如含ID3帧头的MP3音频格式或者含其他帧头的MP3音频格式,或者不含帧头的MP3音频格式,因此本发明实施例只针对若干种音频格式特征来介绍相应方法,需要注意的是,本发明实施例提供的方法适应所有音频格式而非仅仅本发明实施例示例性说明的几种,本发明实施例中涉及的比特位数也仅仅是示例性说明,具体可根据实际情况将其设置为其它合理值,根据支持的音频格式数量及特征进行调整。在本实施例中,根据各种音频格式的比特流特点设计音频格式的轮循检测方法,依靠有限的比特流来实现了可靠的音频格式检测。
实施例三
图3是本发明实施例三提供的一种嵌入式环境下的音频解码方法的流程图,本实施例以上述实施例为基础进行具体化。其中,在获取内存缓冲区中缓存的与所述目标音频文件对应的一段目标比特流进行至少一种音频格式的检测之前,还包括:根据当前待检测的目标比特流的字节数,动态分配与所述字节数关联的内存缓冲区,并按照文件读取地址,开始执行顺序读取所述目标音频文件的比特流并缓存于所述内存缓冲区的操作。如图3所示,本实施例的方法具体包括:
S310、根据嵌入式环境下检测到的针对目标音频文件的解码触发指令,根据当前待检测的目标比特流的字节数N,动态分配字节容量为N的内存缓冲区。
其中,N为预设的与包含OGG封装的音频文件头对应的字节数关联的整数。
为了保证以尽可能小的内存缓冲区来检测目标音频文件的目标音频格式,故本实施例中采用分段分配内存缓冲区的技术方案,例如,如果目标音频文件为第一子类音频格式,且目标文件头不包括损坏字节和冗余字节,则分配M个字节的内存缓冲区即可检测出目标音频格式。
具体的,可以为第一类音频格式的检测一次性地分配N个字节的内存缓冲区,也可以先为第一子类音频格式的检测分配M个字节的内存缓冲区,如果进行第一子类音频格式的检测后不能识别出目标音频格式,则将M个字节的内存缓冲区重新分配为N个字节的内存缓冲区,以进行第二子类音频格式的检测。
S320、按照文件读取地址,开始执行顺序读取目标音频文件的字节长度为N的比特流并缓存于内存缓冲区的操作。
其中,文件读取地址根据目标音频文件的已读字节数量更新。
S330、获取内存缓冲区中缓存的前N个字节中的至少一段字节段,进行第一类音频格式的检测。
具体的,如果为第一类音频格式的检测一次性地分配N个字节的内存缓冲区,则可先按照文件读取地址,顺序读取目标音频文件的字节长度为M的比特流并缓存于内存缓冲区,进而可以根据这M个字节进行第一子类音频格式的检测。在检测的过程中,仍然顺序读取目标音频文件的比特流并存储至内存缓冲区中,直至读取目标音频文件的比特流达到N个字节。如果进行第一子类音频格式的检测后不能识别出目标音频格式,当内存缓冲区中的比特流达到N个字节时,根据这N个字节进行第二子类音频格式的检测。
如果先为第一子类音频格式的检测分配M个字节的内存缓冲区,则顺序读取目标音频文件的字节长度为M的比特流并缓存于内存缓冲区,根据这M个字节进行第一子类音频格式的检测。如果进行第一子类音频格式的检测后不能识别出目标音频格式,则重新分配内存缓冲区,将M个字节的内存缓冲区重新分配为N个字节的内存缓冲区,根据更新后的文件读取位置再读取N-M个字节的比特流缓存至内存缓冲区中,再根据这N个字节进行第二子类音频格式的检测。
S340、判断进行第一类音频格式的检测之后是否能识别出与目标音频文件对应的目标音频格式,若否,则执行S350,若是,则执行3110。
S350、获取内存缓冲区中缓存的与至少两个连续音频帧对应的比特流,进行第二类音频格式的检测。
其中,在首次执行S350之前,还需先根据当前待检测的目标比特流的字节数K,K是与至少两个连续帧对应的字节数相关联的整数,将字节容量为N的内存缓冲区动态分配为字节容量为K的内存缓冲区,然后按照更新后的文件读取地址,执行顺序读取目标音频文件的字节长度为K-N的比特流并缓存于内存缓冲区的操作。
如果进行第一类音频格式的检测后不能识别出目标音频格式,则重新分配内存缓冲区,将N个字节的内存缓冲区重新分配为K个字节的内存缓冲区。一般来讲,如果连续三帧音频帧同属于一种音频格式,则可将其确认为目标音频格式,由此,可将K设置为连续三帧音频帧的最大字节数。
将K-N个字节的比特流缓存至内存缓冲区中,内存缓冲区中就存在了K个字节,进而根据这K个字节进行第二类音频格式的检测。
S360、判断进行第二类音频格式的检测之后是否能识别出与目标音频文件对应的目标音频格式,若否,则执行S370,若是,则执行S390。
S370、判断当前已读字节数量是否达到预设的字节读取数量阈值,若否,则执行S380,若是,则执行S3100。
S380、按照更新后的文件读取地址读取目标音频文件的一个新字节,并使用新字节更新所述内存缓冲区中缓存的比特流,执行S330。
S390、使用与目标音频格式匹配的音频解码库对目标音频文件进行音频解码。
S3100、检测目标音频文件的目标音频格式失败。
本实施例未尽详细之处请参见前述实施例,在此不再赘述。
本发明实施例中,音频格式的检测过程是分段的,也即,在首次进行第一类音频格式检测之前,先分配字节容量为N的内存缓冲区,在首次进行第二类音频格式检测之前,将字节容量为N的内存缓冲区动态分配为字节容量为K的内存缓冲区;或者是,在首次进行第一子类音频格式检测之前,先分配字节容量为M的内存缓冲区,在首次进行第二子类音频格式检测之前,将字节容量为M的内存缓冲区动态分配为字节容量为N的内存缓冲区,在首次进行第二类音频格式检测之前,将字节容量为N的内存缓冲区动态分配为字节容量为K的内存缓冲区,上述分段分配内存缓冲区的技术方案为了保证通过读取尽可能小的比特流来检测音频格式。在嵌入式系统中,由于内存资源非常有限,各个音频解码库的输入缓冲区都是尽可能小的,通过动态分段分配内存缓冲区来检测其中缓存的比特流,可以达到以尽可能小的比特流来检测音频格式的效果,还可以使内存缓冲区方便地适配对接各个音频解码库的输入缓冲区。
实施例四
图4是本发明实施例四提供的一种嵌入式环境下的音频解码方法的流程图,本实施例针对前述实施例中涉及的12种音频格式,提供了一种具体的实施方式,如图4所示,本实施例的方法具体包括:
S410、根据嵌入式环境下检测到的针对目标音频文件的解码触发指令,分配字节容量为9的内存缓冲区。
S420、按照文件读取地址顺序读取目标音频文件的字节长度为9的比特流并缓存于内存缓冲区。
S430、获取内存缓冲区中缓存的前9个字节的比特流,进行第一子类音频格式的检测。
S440、判断进行第一子类音频格式的检测之后是否能识别出与目标音频文件对应的目标音频格式,若否,则执行S450,若是,则执行S4180。
S450、判断是否包含OGG封装,若是,则执行S460,若否,则执行S480。
S460、获取内存缓冲区中缓存的前291个字节的比特流,根据OGG封装中的设定字节确定OGG封装帧头长度,跳过此OGG封装帧头,进行第二子类音频格式的检测。
在首次执行S460之前,还需先将字节容量为9的内存缓冲区重新分配为字节容量为291的内存缓冲区,然后根据更新后的文件读取地址顺序读取目标音频文件的字节长度为282的比特流并缓存于内存缓冲区。也即,在首次进行第一子类音频格式检测之后不能识别出目标音频格式,则需重新分配内存缓冲区,以使能够进行第二类音频格式检测。
S470、判断进行第二子类音频格式的检测之后是否能识别出与目标音频文件对应的目标音频格式,若否,则执行S480,若是,则执行S4180。
S480、获取内存缓冲区中缓存的4608个字节的比特流,开始进行第二类音频格式的检测。
如果首次执行S450结果是否,则在首次执行S480之前,还需先将字节容量为9的内存缓冲区重新分配为字节容量为4608的内存缓冲区,然后根据更新后的文件读取地址再顺序读取目标音频文件的字节长度为4599的比特流并缓存于内存缓冲区。如果首次执行S470的结果是否,则在首次执行S480之前,还需先将字节容量为291的内存缓冲区重新分配为字节容量为4608的内存缓冲区,然后根据更新后的文件读取地址顺序再读取目标音频文件的字节长度为4317的比特流并缓存于内存缓冲区。也即,在首次进行第二类音频格式检测前,需要重新分配内存缓冲区,具体根据当前内存缓冲区的容量进行调整即可。
S490、判断进行第二类音频格式的检测之后是否能识别出与目标音频文件对应的目标音频格式,若否,则执行S4100,若是,则执行S4120。
如果连续三帧音频帧帧头的同步信息是均为0xffe且连续三帧音频帧均是MP3帧,或者连续三帧音频帧帧头的同步信息均为0xfff且连续三帧音频帧均为MP3帧,则确定为确定目标音频格式为MP3(不含ID3帧头);如果连续三帧音频帧帧头的同步信息均为0xfff且连续三帧音频帧均为AAC帧,则确定目标音频格式为AAC。
S4100、判断当前已读字节数量是否达到预设的字节读取数量阈值,若否,则执行S4110,若是,则执行S4130。
S4110、按照更新后的文件读取地址读取目标音频文件的一个新字节,并使用新字节更新所述内存缓冲区中缓存的比特流,执行S430。
S4120、使用与目标音频格式匹配的音频解码库对目标音频文件进行音频解码。
S4130、检测目标音频文件的目标音频格式失败。
本实施例未尽详细之处请参见前述实施例,在此不再赘述。
实施例五
图5是本发明实施例五中的一种嵌入式环境下的音频解码装置的结构示意图,可适用于嵌入式环境下对音频比特流进行解码的情况,尤其是嵌入式环境下对网络直播音频比特流进行解码的情况,该装置可采用软件和/或硬件的方式实现,并一般可集成在嵌入式系统的处理器中。如图5所示,所述装置包括:音频格式检测模块510和音频解码模块520,其中,
音频格式检测模块510,用于根据嵌入式环境下检测到的针对目标音频文件的解码触发指令,获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测;
音频解码模块520,用于如果确定检测出与所述目标音频文件对应的目标音频格式,则使用与所述目标音频格式匹配的音频解码库对所述目标音频文件进行音频解码。
本发明实施例中,通过对嵌入式系统的内存缓冲区中与目标音频文件对应的至少一段比特流进行检测,检测所述至少一段比特流是否能与各种音频格式比特流特征中的一种匹配成功,如果能够匹配成功,则可确定目标音频文件对应的音频格式,进而可以使用匹配的音频解码库对目标音频文件进行解码播放。由此,本发明实施例使嵌入式平台可以兼容更多的音频格式,有效地实现了有限资源下的嵌入式平台对各类音频格式的自动检测,并在检测出音频格式后对其进行解码播放。
进一步的,音频格式检测模块510包括:第一类音频格式检测单元和/或第二类音频格式检测单元,其中,第一类音频格式检测单元,用于获取内存缓冲区中缓存的前N个字节中的至少一段字节段,进行第一类音频格式的检测,其中,N为预设的与包含OGG封装的音频文件头对应的字节数关联的整数;第二类音频格式检测单元,用于获取内存缓冲区中缓存的与至少两个连续音频帧对应的比特流,进行第二类音频格式的检测。
进一步的,所述第一类音频格式包括第一子类音频格式以及第二子类音频格式;第一类音频格式检测单元包括:第一子类音频格式检测子单元和第二子类音频格式检测子单元,其中,第一子类音频格式检测子单元,用于获取内存缓冲区中缓存的包括前M个字节的第一字节段进行第一子类音频格式识别;第二子类音频格式检测子单元,用于如果未能识别出与所述目标音频文件对应的目标音频格式,且根据所述第一字节段确定所述目标音频文件包含OGG封装,则获取内存缓冲区中缓存的包括前N个字节的第二字节段,并在所述第二字节段中去除OGG封装帧头后,得到第三字节段;根据所述第三字节段,进行第二子类音频格式的检测;其中,M为预设的与非OGG封装音频格式的音频文件头对应的字节数关联的整数,M小于N。
作为一种可选的实施方式,上述装置还包括:缓存分配模块和文件读取模块,其中,缓存分配模块,用于在获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测之前,分配K个字节的内存缓冲区,其中,K为与至少两个连续音频帧对应的字节数相关联的整数;文件读取模块,用于按照文件读取地址,开始执行顺序读取所述目标音频文件的比特流并缓存于所述内存缓冲区的操作。
作为另一种可选的实施方式,上述装置还包括:缓存分配及文件读取模块,用于在获取内存缓冲区中缓存的与所述目标音频文件对应的一段目标比特流进行至少一种音频格式的检测之前,根据当前待检测的目标比特流的字节数,动态分配与所述字节数关联的内存缓冲区,并按照文件读取地址,开始执行顺序读取所述目标音频文件的比特流并缓存于所述内存缓冲区的操作。
进一步的,错误及冗余帧头处理模块,用于在获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测之后,如果确定未能检测出与所述目标音频文件对应的目标音频格式,则读取所述目标音频文件的一个新字节;使用所述新字节,更新所述内存缓冲区中缓存的比特流;返回执行获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测,直至检测出与所述目标音频文件对应的目标音频格式,或者当前已读字节数量达到预设的字节读取数量阈值。
进一步的,音频解码模块520具体用于将所述内存缓冲区中的比特流接入所述匹配的音频解码库的输入缓冲区,以使所述音频解码库首先对所述内存缓冲区中的比特流进行解码,再对后续读入的所述目标音频文件的比特流进行解码。
上述嵌入式环境下的音频解码装置可执行本发明任意实施例所提供的嵌入式环境下的音频解码方法,具备执行的嵌入式环境下的音频解码方法相应的功能模块和有益效果。
实施例六
图6为本发明实施例六提供的一种计算机设备的结构示意图,如图6所示,该计算机设备包括处理器610、存储器620、输入装置630和输出装置640;计算机设备中处理器610的数量可以是一个或多个,图6中以一个处理器610为例;计算机设备中的处理器610、存储器620、输入装置630和输出装置640可以通过总线或其他方式连接,图6中以通过总线连接为例。
存储器620作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明任意实施例中的嵌入式环境下的音频解码方法对应的程序指令/模块(例如,嵌入式环境下的音频解码装置中的音频格式检测模块510和音频解码模块520)。处理器610通过运行存储在存储器620中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述的用于计算机设备的操作。
存储器620可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据设备的使用所创建的数据等。此外,存储器620可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器620可进一步包括相对于处理器610远程设置的存储器,这些远程存储器可以通过网络连接至计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置630可用于接收输入的触摸信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置640可包括显示屏等显示设备。
实施例七
本发明实施例七还提供一种包含计算机可执行指令的存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任意实施例提供的嵌入式环境下的音频解码方法,该方法包括:根据嵌入式环境下检测到的针对目标音频文件的解码触发指令,获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测;如果确定检测出与所述目标音频文件对应的目标音频格式,则使用与所述目标音频格式匹配的音频解码库对所述目标音频文件进行音频解码。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备执行本发明各个实施例所述的方法。
值得注意的是,上述嵌入式环境下的音频解码装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (6)
1.一种嵌入式环境下的音频解码方法,其特征在于,包括:
根据嵌入式环境下检测到的针对目标音频文件的解码触发指令,获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测;其中,嵌入式系统从内存中划分一部分作为所述内存缓冲区,用于缓存连续顺序读取的与所述目标音频文件对应的比特流;
其中,所述音频格式的检测包括:将待检测的至少一段比特流中的内容与预先分析的各种音频格式比特流特征一一匹配;
如果确定检测出与所述目标音频文件对应的目标音频格式,则使用与所述目标音频格式匹配的音频解码库对所述目标音频文件进行音频解码;
获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测,包括:
获取内存缓冲区中缓存的前N个字节中的至少一段字节段,进行第一类音频格式的检测,其中,N为预设的与包含OGG封装的音频文件头对应的字节数关联的整数;
和/或,
获取内存缓冲区中缓存的与至少两个连续音频帧对应的比特流,进行第二类音频格式的检测;
所述第一类音频格式包括第一子类音频格式以及第二子类音频格式;
获取内存缓冲区中缓存的前N个字节中的至少一段字节段,进行第一类音频格式的检测,包括:
获取内存缓冲区中缓存的包括前M个字节的第一字节段进行第一子类音频格式识别;
如果未能识别出与所述目标音频文件对应的目标音频格式,且根据所述第一字节段确定所述目标音频文件包含OGG封装,则获取内存缓冲区中缓存的包括前N个字节的第二字节段,并在所述第二字节段中去除OGG封装帧头后,得到第三字节段;
根据所述第三字节段,进行第二子类音频格式的检测;
其中,M为预设的与非OGG封装音频格式的音频文件头对应的字节数关联的整数,M小于N;
在获取内存缓冲区中缓存的与所述目标音频文件对应的一段目标比特流进行至少一种音频格式的检测之前,还包括:
根据当前待检测的目标比特流的字节数,动态分配与所述字节数关联的内存缓冲区,并按照文件读取地址,开始执行顺序读取所述目标音频文件的比特流并缓存于所述内存缓冲区的操作;
在获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测之后,还包括:
如果确定未能检测出与所述目标音频文件对应的目标音频格式,则读取所述目标音频文件的一个新字节;
使用所述新字节,更新所述内存缓冲区中缓存的比特流;
返回执行获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测,直至检测出与所述目标音频文件对应的目标音频格式,或者当前已读字节数量达到预设的字节读取数量阈值。
2.根据权利要求1所述的方法,其特征在于,在获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测之前,还包括:
分配K个字节的内存缓冲区,其中,K为与至少两个连续音频帧对应的字节数相关联的整数;
按照文件读取地址,开始执行顺序读取所述目标音频文件的比特流并缓存于所述内存缓冲区的操作。
3.根据权利要求1所述的方法,其特征在于,使用与所述目标音频格式匹配的音频解码库对所述目标音频文件进行音频解码,包括:
将所述内存缓冲区中的比特流接入所述匹配的音频解码库的输入缓冲区,以使所述音频解码库首先对所述内存缓冲区中的比特流进行解码,再对后续读入的所述目标音频文件的比特流进行解码。
4.一种嵌入式环境下的音频解码装置,其特征在于,包括:
音频格式检测模块,用于根据嵌入式环境下检测到的针对目标音频文件的解码触发指令,获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测;其中,嵌入式系统从内存中划分一部分作为所述内存缓冲区,用于缓存连续顺序读取的与所述目标音频文件对应的比特流;其中,所述音频格式的检测包括:将待检测的至少一段比特流中的内容与预先分析的各种音频格式比特流特征一一匹配;
音频解码模块,用于如果确定检测出与所述目标音频文件对应的目标音频格式,则使用与所述目标音频格式匹配的音频解码库对所述目标音频文件进行音频解码;
音频格式检测模块包括:第一类音频格式检测单元和/或第二类音频格式检测单元,其中,第一类音频格式检测单元,用于获取内存缓冲区中缓存的前N个字节中的至少一段字节段,进行第一类音频格式的检测,其中,N为预设的与包含OGG封装的音频文件头对应的字节数关联的整数;第二类音频格式检测单元,用于获取内存缓冲区中缓存的与至少两个连续音频帧对应的比特流,进行第二类音频格式的检测;
所述第一类音频格式包括第一子类音频格式以及第二子类音频格式;
第一类音频格式检测单元包括:第一子类音频格式检测子单元和第二子类音频格式检测子单元,其中,第一子类音频格式检测子单元,用于获取内存缓冲区中缓存的包括前M个字节的第一字节段进行第一子类音频格式识别;第二子类音频格式检测子单元,用于如果未能识别出与所述目标音频文件对应的目标音频格式,且根据所述第一字节段确定所述目标音频文件包含OGG封装,则获取内存缓冲区中缓存的包括前N个字节的第二字节段,并在所述第二字节段中去除OGG封装帧头后,得到第三字节段;根据所述第三字节段,进行第二子类音频格式的检测;其中,M为预设的与非OGG封装音频格式的音频文件头对应的字节数关联的整数,M小于N;
上述装置还包括:缓存分配及文件读取模块,用于在获取内存缓冲区中缓存的与所述目标音频文件对应的一段目标比特流进行至少一种音频格式的检测之前,根据当前待检测的目标比特流的字节数,动态分配与所述字节数关联的内存缓冲区,并按照文件读取地址,开始执行顺序读取所述目标音频文件的比特流并缓存于所述内存缓冲区的操作;
错误及冗余帧头处理模块,用于在获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测之后,如果确定未能检测出与所述目标音频文件对应的目标音频格式,则读取所述目标音频文件的一个新字节;使用所述新字节,更新所述内存缓冲区中缓存的比特流;返回执行获取内存缓冲区中缓存的与所述目标音频文件对应的至少一段比特流进行至少一种音频格式的检测,直至检测出与所述目标音频文件对应的目标音频格式,或者当前已读字节数量达到预设的字节读取数量阈值。
5.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-3中任一所述的方法。
6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-3中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910087608.5A CN109584891B (zh) | 2019-01-29 | 2019-01-29 | 嵌入式环境下的音频解码方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910087608.5A CN109584891B (zh) | 2019-01-29 | 2019-01-29 | 嵌入式环境下的音频解码方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109584891A CN109584891A (zh) | 2019-04-05 |
CN109584891B true CN109584891B (zh) | 2023-04-25 |
Family
ID=65918086
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910087608.5A Active CN109584891B (zh) | 2019-01-29 | 2019-01-29 | 嵌入式环境下的音频解码方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109584891B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113921011A (zh) * | 2021-10-14 | 2022-01-11 | 安徽听见科技有限公司 | 音频处理方法、装置及设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104011660A (zh) * | 2011-12-22 | 2014-08-27 | 英特尔公司 | 用于处理比特流的基于处理器的装置和方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7624021B2 (en) * | 2004-07-02 | 2009-11-24 | Apple Inc. | Universal container for audio data |
CN1892820A (zh) * | 2005-07-04 | 2007-01-10 | 乐金电子(惠州)有限公司 | 音频解码系统及音频格式检测方法 |
EP2131590A1 (en) * | 2008-06-02 | 2009-12-09 | Deutsche Thomson OHG | Method and apparatus for generating or cutting or changing a frame based bit stream format file including at least one header section, and a corresponding data structure |
EP2395505A1 (en) * | 2010-06-11 | 2011-12-14 | Thomson Licensing | Method and apparatus for searching in a layered hierarchical bit stream followed by replay, said bit stream including a base layer and at least one enhancement layer |
CN106098081B (zh) * | 2016-06-01 | 2020-11-27 | 腾讯科技(深圳)有限公司 | 声音文件的音质识别方法及装置 |
CN108319443B (zh) * | 2018-01-26 | 2020-01-31 | 维沃移动通信有限公司 | 一种音频输出方法、移动终端及音频播放装置 |
CN108390935A (zh) * | 2018-02-28 | 2018-08-10 | 北京酷我科技有限公司 | 一种基于文件流的音频播放策略 |
-
2019
- 2019-01-29 CN CN201910087608.5A patent/CN109584891B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104011660A (zh) * | 2011-12-22 | 2014-08-27 | 英特尔公司 | 用于处理比特流的基于处理器的装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109584891A (zh) | 2019-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7558806B2 (en) | Method and apparatus for buffering streaming media | |
US9298593B2 (en) | Testing a software interface for a streaming hardware device | |
CN113824986B (zh) | 基于上下文直播音频审核方法、装置、存储介质及设备 | |
US9355250B2 (en) | Method and system for rapidly scanning files | |
JP2022043225A5 (zh) | ||
CN112732650A (zh) | 文件分片方法及装置 | |
EP2919120A1 (en) | Memory monitoring method and related device | |
CN108076377A (zh) | 一种视频的存储、播放方法、装置、电子设备及存储介质 | |
JP6568012B2 (ja) | メモリ管理システム、方法、およびコンピュータ・プログラム | |
CN109584891B (zh) | 嵌入式环境下的音频解码方法、装置、设备及介质 | |
CN111984421B (zh) | 数据处理方法、装置及存储介质 | |
CN111506747B (zh) | 文件解析方法、装置、电子设备及存储介质 | |
US8295308B2 (en) | Systems and methods of configuring a resource pool as a network end point | |
WO2023083213A1 (zh) | 一种数据解码方法、装置、电子设备及可读存储介质 | |
JP4425055B2 (ja) | クライアント・サーバ音声認識方法、これに用いる装置、そのプログラム及び記録媒体 | |
EP2469858B1 (en) | Apparatus and method for sequentially parsing bitstreams based on removal of emulation prevention byte | |
US8234524B1 (en) | Protocol analysis with event present flags | |
CN112737831A (zh) | 一种固件升级包处理方法、装置、电子设备和存储介质 | |
JP2006201969A (ja) | エラー情報圧縮装置、エラー情報圧縮方法およびエラー情報圧縮プログラム | |
CN109947978B (zh) | 一种音频存储、播放方法及装置 | |
CN113157245A (zh) | 电子书呈现信息的播放交互方法、计算设备及存储介质 | |
CN108958802B (zh) | 一种线程预操作方法、装置和存储介质 | |
CN117271440B (zh) | 一种基于freeRTOS文件信息存储方法、读取方法及相关设备 | |
US10515624B2 (en) | Content processing method and system using audio signal of advertisement data | |
KR20100029010A (ko) | 멀티미디어 데이터를 처리하기 위한 다중 프로세서 시스템들 및 그것의 방법들 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |