一种音视频编解码装置及方法
技术领域
本发明涉及音视频编解码,特别涉及一种可降低对用户***环境依赖性及提高软件质量稳定性的音视频编解码装置及方法。
背景技术
现有技术一般采用DirectShow或FFMPEG进行音视频编解码。DirectShow是微软公司推出的基于COM(Component Object Model,组件对象模型)的流媒体处理的开发包,提供一种Windows平台上的流媒体开发框架,可用于Windows平台上的音视频编解码处理。而FFMPEG是开源爱好者开发的一个项目,集成了各种音频和视频的编解码,以及各种文件格式的转换,一般采用C语言和汇编语言进行开发,可以跨平台。
如果采用上述的DirectShow技术进行音视频编解码,会存在以下问题:
1)对用户***环境的依赖性高。采用DirectShow技术进行音视频编解码,依赖于***中存在的诸多第三方开发者开发的编解码组件,而这些组件通过安装一些播放器或一些专门的软件包获得,因此导致不同的***中存在组件很可能不同。
2)软件质量存在不确定性。由于采用依赖于第三方开发者开发的编解码组件,而这些组件的开发者各异,质量也参差不齐,导致一些文件运行在某些电脑上会报错,运行在某些电脑上没有问题。而且微软也准备逐渐放弃DirectShow这种架构,导致这种技术的前景暗淡。
如果采用上述的FFMPEG技术音视频编解码,会存在以下问题:
因为FFMPE是采用GPL协议,如果使用到该项目,那么软件必须开放源代码。而FFMPEG架构以及代码复杂庞大,而且没有注释,很难看懂。如果要修改存在的BUG或做必要扩展,则难度太高。并且FFMPEG主要是针对LINUX平台的,移植到WINDOWS平台则需要做大量的修改,使用起来不方便。
发明内容
本发明要解决的技术问题在于,如何针对现有技术中采用DirecShow技术对用户***环境的依赖性高和软件质量不确定性,以及采用FFMPEG技术难以维护和扩展的缺点,提供一种可降低对用户***环境依赖性及提高软件质量稳定性音视频编解码装置及方法。
本发明解决其技术问题所采用的技术方案是:一种音视频编解码装置,包括:
解码模块,用于导入媒体文件,调用相应的解码器对该媒体文件进行解码;
播放模块,用于对解码后的音视频数据进行播放;
转换控制模块,用于对解码后的音视频数据进行相关处理,包括:根据编码参数进行视频分辨率的缩放和添加效果处理,依据帧率和时间戳进行重复帧和丢帧处理,对音频数据进行采样率转换处理,按照数据量和时间戳对音频数据进行丢弃或填补静音数据的处理,以及将多个媒体文件连接成一个媒体文件的处理;
编码模块,包括编码器和媒体文件合成器,用于调用相应的编码器和媒体文件合成器,生成指定格式及相关参数的多媒体文件。
本发明中,所述解码模块具体包括多类型解码管理器、图像解码器、DirectShow解码器以及媒体文件解码器,
多类型解码管理器,用于将文件后缀名为图像类型文件后缀的媒体文件送入图像解码器进行解码,将文件后缀名为wmv、wma、rmvb以及rm的媒体文件送入DirectShow解码器进行解码,将除文件后缀名为wmv、wma、rmvb以及rm以外的媒体文件送入媒体文件解码器进行解码;
图像解码器,用于将解码后得到的YUV12(MPEG里都是按12bit一个点来存放的,通常简写为YUV12)类型的视频数据返回给多类型解码管理器;
DirectShow解码器,用于将解码后得到的YUV12类型的视频数据和/或16位PCM(Pulse Code Modulation,脉码调制录音)类型的音频数据返回给多类型解码管理器;
媒体文件解码器,用于将解码后得到的YUV12类型的视频数据和/或16位PCM类型的音频数据返回给多类型解码管理器。
本发明中,所述媒体文件解码器包括解码控制器、文件分离管理器、文件分离器插件、解码插件管理器、音频解码器插件以及视频解码器插件;
解码控制器调用文件分离管理器获取媒体文件信息,文件分离管理器根据后缀名调用相应的文件分离器插件获取文件信息,该文件信息包括音视频流的数目、文件的播放时间、各路流的参数,该参数包括视频的码率、分辨率、音频的采样率以及码率;
当播放模块或转换控制模块调用解码控制器获取下一YUV12类型的视频数据或16位PCM类型的音频数据时,解码控制器通过文件分离管理器调用对应的文件分离器插件从文件中顺序分离若干视频或音频压缩数据并传给解码控制器,并由解码控制器将数据传给解码插件管理器,解码插件管理器根据压缩数据的类型传送给音频解码器插件或视频解码器插件进行解码,并将解码出的YUV12类型的视频数据或16位PCM类型的音频数据返回给解码控制器。
本发明中,所述转换控制模块包括数据处理模块、文件连接模块以及转换模块,
数据处理模块对多类型解码管理器发来的解码后的音视频数据进行视频缩放、图像叠加、添加效果、视频显示区域比例转换、消除隔行扫描处理、平滑视频时间戳、音频采样率变换以及平滑音频时间戳处理;
文件连接模块对界面发来的文件连接处理的请求,进行文件连接处理处理,包括文件头时间戳对齐、文件尾时间戳对齐、文件的连接以及视频和音频时间戳的计算处理;
转换模块从文件连接模块获取需进行文件连接处理的音视频数据或从数据处理模块获取无需进行文件连接处理的音视频数据,对这些音视频数据进行转换逻辑处理,包括当视频时间戳小于或等于音频时间戳时,调用编码模块的视频接口将视频数据写入编码器进行编码,当视频时间戳大于音频时间戳时,调用编码模块中的音频接口将音频数据写入编码器进行编码。
本发明中,所述编码模块还包括编码管理器,所述编码器包括音频编码器插件和视频编码器插件,所述媒体文件合成器包括媒体文件合成器插件,
转换控制模块将音频数据写入编码管理器中,编码管理器通过调用对应的音频编码器插件对音频数据进行编码,转换控制模块将视频数据写入编码管理器中,编码管理器通过调用对应的视频编码器插件对视频数据进行编码,编码完成后,编码管理器调用相应的媒体文件合成器插件,把编码后的数据按照对应的媒体文件格式标准写入媒体文件。
为解决问题的另一方面,本发明还公开了一种音视频编解码方法,包括如下步骤:
A、导入媒体文件,调用相应的解码器对该媒体文件进行解码;
B、对解码后的音视频数据选择播放,或对解码后的音视频数据进行相关处理,包括:根据编码参数进行视频分辨率的缩放和添加效果处理,依据帧率和时间戳进行重复帧和丢帧处理,对音频数据进行采样率转换处理,按照数据量和时间戳对音频数据进行丢弃或填补静音数据的处理,以及将多个媒体文件连接成一个媒体文件的处理;
C、调用相应的编码器和媒体文件合成器进行编码,生成指定格式及相关参数的多媒体文件。
本发明中,所述步骤A中,在进行解码之前还包括判断该媒体文件的类型,具体包括:
A1、如果文件后缀名为图像类型文件后缀,包括但不限于bmp、jpg、png,则调用图像解码器进行解码,得到YUV12类型的视频数据。
A2、如果文件后缀为wmv、wma、rmvb、rm,则调用DirectShow解码器进行解码,视频解码后得到YUV12数据,音频解码后得到16位PCM类型的音频数据。
A3、如果文件后缀为除wmv、wma、rmvb、rm之外的其他媒体文件后缀,包括但不限于mpg、mp4、ogg,则调用媒体文件解码器进行解码,视频解码后得到YUV12类型的视频数据,音频解码后得到16位PCM类型的音频数据。如果解码失败则采用DirectShow解码器进行解码。
本发明中,所述步骤A3中,解码的过程具体包括:
A31,获取文件信息的步骤,该步骤中解码控制器调用文件分离管理器获取媒体文件信息,文件分离管理器根据后缀名调用相应的文件分离器插件获取文件信息;
A32,视频解码的步骤,该步骤中当播放模块或转换控制模块调用解码控制器获取的视频数据和/或音频数据时,解码控制器通过文件分离管理器调用对应的文件分离器插件从文件中顺序分离若干视频压缩数据和/或音频压缩数据并传给解码控制器,并由解码控制器将数据传给解码插件管理器,解码插件管理器根据压缩数据的类型传送给视频解码器插件和/或音频解码器插件进行解码,并将解码出的YUV12类型的视频数据和/或16位PCM类型的音频数据返回给解码控制器。
本发明中,所述步骤B中,所述对解码后的音视频数据进行相关处理的步骤包括:
B1,数据处理模块对解码后的音视频数据进行视频缩放、图像叠加、添加效果、视频显示区域比例转换、消除隔行扫描处理、平滑视频时间戳、音频采样率变换以及平滑音频时间戳处理;
B2,文件连接模块对界面发来的文件连接处理的请求,进行文件连接处理处理,包括文件头时间戳对齐、文件尾时间戳对齐、文件的连接以及视频和音频时间戳的计算处理;
B3,转换模块从文件连接模块获取需进行文件连接处理的音视频数据或从数据处理模块获取无需进行文件连接处理的音视频数据,对这些音视频数据进行转换逻辑处理,包括当视频时间戳小于或等于音频时间戳时,调用编码模块的视频接口将视频数据写入编码器进行编码,当视频时间戳大于音频时间戳时,调用编码模块中的音频接口将音频数据写入编码器进行编码。
本发明中,所述步骤C具体包括:
C1,转换控制模块将音频数据写入编码管理器中,并由编码管理器通过调用对应的音频编码器插件对音频数据进行编码,转换控制模块将视频数据写入编码管理器中,并由编码管理器通过调用对应的视频编码器插件对视频数据进行编码;
C2,编码完成后,编码管理器调用相应的媒体文件合成器插件,把编码后的数据按照对应的媒体文件格式标准写入媒体文件。
实施本发明提供一种音视频编解码装置及方法,与现有的技术相比,具有如下优点:
1)降低了对用户***环境的依赖性,提高了软件质量的确定性。
对于WMV,WMA,RM,RMVB格式,微软和Real公司提供的非常可靠和稳定的组件进行编解码,而且每台WINDOWS平台的电脑都拥有这类组件,对于这类格式采用了DirectShow技术进行编解码;而对于其他格式,则根据不同文件格式的标准,开发出各类媒体文件的音视频分离器和媒体文件合成器,再根据各个编码格式的标准,开发出解码器和编码器。另外,对于一些技术难度高的编码器,还可以通过选择购买一些非常成熟和稳定的商业SDK来实现。对音视频流分别采用模式和基于时间戳进行音视频同步的方法,设计和开发出解码平台,因此降低了用户***环境的依赖性,并且软件质量也是可控的。
2)易于维护。
由于本发明的编解码和媒体文件分离、合成部分大都依据公开标准自行开发,而且拥有详细的开发文档,可维护性强,不需要公布相关源代码。而另一部分是通过购买一些成熟和稳定的商业SDK来实现的,可以通过售后服务来解决一些BUG。
附图说明
图1是说明本发明所述音视频编解码方法实施例的流程图;
图2是图1中进入解码过程的数据进行判断处理的数据流图;
图3是图2中进行编解码数据处理的数据流图;
图4是图1中文件连接处理的调用过程的数据流图;
图5是图1中生成多媒体文件的数据流图。
具体实施方式
为使审查员对本发明的结构特征及所具有的功能有更进一步的了解与认识,用以较佳的实施例及附图配合详细的说明,说明如下:
如图1所示,按照本发明的音视频编解码装置主要包括:解码模块、播放模块、转换控制模块以及编码模块四大部分。按照本发明的音视频编解码方法,各个组成部分是这样进行工作的。
步骤S1,解码模块导入媒体文件,调用相应的解码器对该媒体文件进行解码。其中解码模块具体包括多类型解码管理器、图像解码器、DirectShow解码器以及媒体文件解码器,该步骤S1中对于进入解码过程的音视频数据,作如下处理(如图2所示):
A1,如果文件后缀名为图像类型文件后缀,如bmp、jpg、png等,则多类型解码管理器调用图像解码器进行解码,得到YUV12(MPEG里都是按12bit一个点来存放的,通常简写为YUV12)类型的视频数据。
A2,如果文件后缀为wmv、wma、rmvb、rm,则多类型解码管理器调用DirectShow解码器进行解码,视频解码后得到YUV12类型的视频数据,音频解码后得到16位PCM(Pulse Code Modulation,脉码调制录音)类型的音频数据。
A3,如果文件后缀为除wmv、wma、rmvb、rm之外的其它媒体文件后缀,如mpg、mp4、ogg等,但不限于这几种格式,则多类型解码管理器调用媒体文件解码器进行解码,视频解码后得到YUV12数据,音频解码后得到16位PCM类型的音频数据。如果解码失败则采用DirectShow方式进行解码。
具体的,所述媒体文件解码器包括解码控制器、文件分离管理器、文件分离器插件、解码插件管理器、音频解码器插件以及视频解码器插件,对于上述A3进一步包括(如图3所示):
A31,获取文件信息的过程。
解码控制器调用文件分离管理器,获取媒体文件信息,如包含音视频流的数目,文件的播放时间,各路流的参数(如视频的码率、分辨率、音频的采样率、码率等信息)。
文件分离管理器根据后缀名调用相应的文件分离器插件获取文件信息(如文件的类型等,因为每种类型的文件格式对应着一个文件分离器插件,这些插件是统一接口,便于扩展,而文件分离器插件是根据该格式对应的标准,分析文件中的相关数据,获取文件信息。例如MP4系列的文件分离器插件,可根据ISO14496中的内容,读取MP4文件中的特定数据,获得文件信息),如果获取失败,则调用其他类型的文件分离器插件,可解决因文件后缀名错误导致不能播放的问题。
A32,视频解码的过程。
当外界(播放模块或转换控制模块)调用解码控制器的Forward接口获取下一YUV12类型的视频数据的时候,解码控制器从文件分离管理器中调用GetBlock接口获取若干视频压缩数据,文件分离管理器调用对应的文件分离器插件的GetBlock接口,从文件中顺序分离若干视频压缩数据,并传给解码控制器。
解码控制器调用解码插件管理器的PutData接口,把数据传给解码插件管理器,解码插件管理器根据压缩数据的类型,调用对应的解码器插件的PutData接口,把压缩数据传递给解码器插件(各种解码器插件都是根据某种媒体格式的压缩以及解压缩标准编写的,如对H264视频压缩数据的解码,根据ISO/IEC的MPEG-4的第10部分所描述的内容,实现对H264的解码。这些插件是统一接口,便于扩展),然后解码控制器调用解码插件管理器的GetNextFrame接口获取一张视频图像的数据,解码插件管理器通过调用对应解码器插件中的GetNextFrame接口,对输入的压缩数据进行解码,获取一张视频图像的数据。如果输入的视频压缩数据不足以获取一张视频数据,那么可以重复上述过程,直到解码出一张YUV12类型的视频数据。
A33,音频解码过程与步骤A32的视频解码过程类似,这里不再重复描述。
步骤S2,对解码后的音视频数据可以选择播放。
步骤S3,对解码后的音视频数据,根据编码参数进行视频分辨率的缩放,添加效果等处理,依据帧率和时间戳,进行重复帧和丢帧等处理。对音频数据进行采样率变换,依据数据量和时间戳对音频数据进行丢弃或填补静音数据的处理,以及把多个文件连接成一个文件的处理。
具体的,所述转换控制模块包括数据处理模块、文件连接模块以及转换模块,图4为上述步骤S3中带文件连接处理的调用过程流程图,文件连接处理就是把多个文件转换成一个文件输出。
该图4中数据处理模块主要从多类型解码管理器中获取音视频数据,包括YUV12数据和16位PCM类型的音频数据,数据处理模块主要处理的步骤包括:
1)视频缩放。
根据双线性插值算法,将解码后的图像的分辨率转换成编码所需的分辨率。
2)图像叠加。
根据图像叠加算法,将其他图像(水印或用户指定的图片)叠加到解码后的图像上。
3)添加效果。
依据现有的各类特效算法,如浮雕效果算法,彩色转黑白算法,反色算法等,对解码出的图像进行效果变换处理。
4)视频显示区域比例转换。
根据双线性插值算法,把图像变化成4:3或16:9的显示方式。
5)消除隔行扫描处理。
用户通过选择消除隔行扫描方式,消除隔行扫描,包括:
a、重复奇数行,对于一个YUV12类型的视频图像,把奇数行的数据复制到偶数行,替换偶数行。
b、重复偶数行,对于一个YUV12类型的视频图像,把偶数行的数据复制到奇数行。
c、把相邻的两行奇数行中的各个数值取平均,替换之间的偶数行。
d、把相邻的两行偶数行中的各个值取平均,替换之间的奇数行。
6)平滑视频时间戳。
依据解码出来图像的时间戳,通过重复图像和丢弃图像使得输出的图像严格按照帧率输出。
7)音频采样率变换。
采用线性插值算法,把解码出来的音频采样率转换成编码所需的音频采样率。
8)平滑音频时间戳。
依据数据量和时间戳的关系,填充静音数据或丢弃数据,使得输出数据时间戳与数据量相对应。
该图4中文件连接模块主要处理的步骤包括:
1)文件头时间戳对齐。
一个媒体文件视频开始时间戳与音频开始时间戳并不一定一致,连接过程中会导致音视频不同步,因此需要将视频时间戳与音频时间戳对齐。对齐的方法就是将各路音视频流中开始时间戳最小的那路流的时间戳作为文件的开始时间戳,其余各路流需要按帧率补黑图像(视频)或者按数据量补静音数据(音频),进行对齐。
2)文件尾时间戳对齐。
一个媒体文件视频结束时间戳与音频结束时间戳并不一定一致,连接过程中也导致音视频不同步,因此需要将视频结束时间戳与音频结束时间戳对齐。对齐的方法就是将各路音视频流中结束时间戳最大那路流的时间戳作为文件的结束时间戳,其余各路流需要按帧率补黑图像(视频)或按数据量补静音数据(音频),进行对齐。
3)文件的连接。
当一个文件转换结束后,创建下一个文件的解码器,从解码器中获得的音频和视频数据的时间戳都要加上前面转换过的所有文件的持续时间之和。
4)视频和音频时间戳的计算方法。
从解码器中取得的时间戳需要减去文件的开始时间戳,加上前面转换过的所有文件的持续时间之和。例如:
a、文件A视频流开始时间戳是0秒,结束时间戳是5秒,帧率是10秒;音频流开始时间戳是1秒,结束时间戳是6秒,采样率是44100,声道数是1声道。
b、文件B视频流开始时间戳是2秒,结束时间戳是7秒,帧率是10秒;音频流开始时间戳是3秒,结束时间戳是7秒,采样率是44100,声道数是1声道。
c、连接两个文件:
第一步,文件头时间戳对齐,根据1)可知需要对音频流补1秒的静音数据。数据量为44100*16/8*1。
第二步,文件尾时间戳对齐,当视频播放完毕,需要按帧率补齐文件尾,依据频率需要补10张的黑图像,与音频对齐。
第三步,创建文件B的解码器,对文件B进行文件头时间戳对齐。文件A的持续时间为6-0=6秒,因此对于视频第一帧图像时间戳修改为2-2+6=6。
因此从文件连接模块中获取到的音视频数据的时间戳永远是连续的。
该图4中转换模块的转换处理包括:
如果需要进行文件连接处理,转换模块需要从文件连接模块中获取视频和音频数据;如果无需进行文件连接处理,那么转换模块则从数据处理模块中获取音视频数据。转换逻辑如下:
当拿到一张视频帧和音频数据后,判断视频时间戳是否小于音频时间戳,如果小于或等于音频时间戳,那么通过调用编码管理器中的FCWriteVideoFrame接口将视频数据写入编码器,进行编码;如果大于音频数据,那么通过调用编码管理器中的FCWriteAudioData接口将音频数据写入编码器,进行编码。转换模块调用文件连接模块的GetFrame接口获得下一帧数据,重复上述过程。
步骤S4,编码模块(包括编码器和媒体文件合成器)调用相应的编码器和媒体文件合成器进行编码生成指定格式及相关参数的多媒体文件。
具体的,所述编码模块还包括编码管理器,所述编码器包括音频编码器插件和视频编码器插件,所述媒体文件合成器包括媒体文件合成器插件,对于上述步骤S4进一步包括(如图5所示):
D1,转换控制器调用编码管理器中的FCWriteAudioData接口分别将16位PCM类型的音频数据写入编码管理器中;
D2,编码管理器通过调用对应的音频编码器插件对音频数据进行编码(大部分编码器插件,都是根据该编码对应的标准文献编码实现的;一部分编码器插件如MPG编码,通过购买例如MainConcept公司提供的SDK实现的);
D3,编码完成后,编码管理器通过调用相应的媒体文件合成器插件,把编码后的数据,按照对应的媒体文件格式标准,写入到媒体文件中;
D4,视频编码方式与音频编码方式类似。
综上所述,通过采用本发明技术方案,降低了用户***环境的依赖性,使得软件质量是可控的,并且由于编解码和媒体文件分离、合成部分大都是依照公开的标准进行,可维护性强。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。