一种移动数字电视录像中的音频处理方法
技术领域
本发明涉及一种音频处理方法,具体来说涉及一种移动数字电视录像中的音频处理方法。
背景技术
近些年来,随着移动数字电视飞速发展,各种各样的移动数字电视标准应运而生,如日本的ISDB-T(地面综合业务数字广播)、中国的CMMB(中国移动多媒体广播)等。很多便携手持设备,如手机、数码相机、导航仪等都增加了移动数字电视的功能,人们无论在高速移动还是固定的状态下均能保持画面的清晰,实现了边走边看、随时随地收看,极大地满足了快节奏社会中人们对于信息的需求。但移动数字电视节目作为一种广播节目,如果错过,或者遇到喜爱的节目需要收藏时,就会发现,录像是一项非常重要的功能。录像,可直接从接收信号中将码流存成TS(Transport Stream:传输流)文件来进行回放。但这种录像方法获得的录像文件,并不是主流的视频格式,不能被主流的视频播放软件(如暴风影音、Realplayer等)支持,一般只能用专用的播放软件进行播放。所以,录像时将移动数字电视的节目录制成一种通用的视频格式更有意义,例如AVI(音频视频交错格式)就是一种非常流行的音视频容器,它可将各种算法编码的视频格式和音频格式封装到以avi为后缀的视频文件中,被各种的主流视频播放器所支持。
目前,各种移动数字电视标准,例如ISDB-T、CMMB等,其音视频分别采用AAC+(先进音频编码)和H264标准进行压缩编码。从空中接收到的移动数字电视AAC+码流和H264码流经分离后直接封装到某种音视频容器中(如AVI),理论上可用各种主流的视频播放器进行播放,前提是录制时信号非常稳定,数字电视终端接收到的是完完整整的没有任何误码的音频AAC+码流。只要AAC+码流中有误码,即因信号质量、稳定性等原因导致接收到的音频AAC+码流与电视台发送的信号原始码流不一致,此时录制的视频文件用各种视频播放软件进行回放,都会出现不同程度的异常,例如伴随噪音出现,或变无声,甚至导致整个播放器崩溃。原因是这些主流的视频播放软件兼容性差,未能对内容遭破坏即含误码音视频文件实现完美支持。
移动数字电视(如ISDB-T、CMMB)中的音频部分,通常使用MPEG2/MPEG4的AAC+进行编码,AAC+指的是AAC(通常指AAC-LC,先进音频编码-低复杂度)加上频谱扩展技术(SBR),AAC只对声源的低频部分进行编码,以节省码率,SBR技术则对低频部分进行频谱扩展,补充和完善高频成分。对AAC+解码时,先对AAC部分(即AAC LC)进行核心解码,再对AAC解码的输出进行频谱扩展处理,即SBR处理。
移动数字电视因天气情况、离发射源远近等原因,信号极其不稳定,终端用户接收到的数字电视信号中音视频码流有误码是不可避免的。为了使录制下来的视频文件能在任意一台装了任何一种主流视频播放器的电脑上都能正常播放,就必须在录制时对音频码流进行特别处理,将误码进行识别并一定程度纠错,再保存到主流视频容器中(如AVI文件)。
发明内容
本发明的目的在于提供一种移动数字电视录像中的音频处理方法,该方法基于解码播放过程中同时实现录制功能,是一种针对移动数字电视录制时音频误码处理的方法,该方法在即使信号不好的前提下,也能够进行移动数字电视录制,且录制出来视频文件能在计算机上用主流的视频播放软件进行正常播放,避免产生尖锐杂音、无声、播放器崩溃甚至系统死机等严重的异常现象。
本发明的目的可通过以下的技术措施来实现:
一种移动数字电视录像中的音频处理方法,其特征在于包括以下步骤:
(1)、将接收到的每个AAC+码流裸数据帧封装成音频数据传输流格式的帧;
(2)、AAC+解码器对步骤(1)中的音频数据传输流格式封装后的每一帧进行解析,找到该帧原始的AAC+码流裸数据;
(3)、对AAC+码流裸数据进行解码,如果解码出现异常,则说明当前帧为误码帧,则将无声样本用于播放,并进入步骤(6);如果解码正常,进入步骤(4);
(4)、剔除AAC+码流裸数据中的SBR信息,将AAC+码流裸数据变成AAC裸数据;
(5)、AAC+解码器进行后续解码过程,如果后续解码中的任一环节解码失败,进入步骤(6);如果成功,则最终会解码输出声音样本,用于播放;同时,将AAC裸数据传给录制模块,由录制模块将该AAC裸数据封装到音视频文件中,并进入步骤(7);
(6)、将一帧静音AAC码流裸数据传给录制模块,由录制模块负责将AAC码流裸数据封装到视频文件中;
(7)、判断解码录制过程是否结束,没有结束则返回步骤(1)进行下一帧的解码录制,否则退出解码器,结束解码录制过程。
所述步骤(1)中音频数据传输流格式为:在每一帧AAC+码流的前面增加一个7至9个字节音频数据传输流格式帧头和4个字节的时间戳;所述音频数据传输流格式帧头用于解码时定位AAC+码流帧的开始以便后续解码;所述时间戳为时间信息,用于音视频同步的控制。
所述步骤(2)中找到该帧原始的AAC+码流裸数据的过程为:根据AAC+音频解码器对每个音频数据传输流格式帧头进行解析,可获取对应帧的帧长,则音频数据传输流格式帧头和时间戳后面的长度为帧长的数据即为一帧原始的AAC+码流裸数据。
所述步骤(2)中的音频解码录制缓冲区,既是解码时用到的源数据缓冲区,也是录制时用于传给录制模块的音频源数据缓冲区。
所述步骤(3)中采用哈夫曼解码算法对AAC+码流裸数据进行解码。
所述步骤(3)中用于播放的无声样本或者所述步骤(5)中的声音样本的个数为4096个。
所述步骤(4)中AAC+裸数据中的SBR信息是存在于每帧码流后面的填充区的附加填充数据,由附加填充数据类型字段进行标识。
所述步骤(6)中静音AAC码流裸数据为不含SBR信息的无声码流。
本发明方法相对于现有技术来说,具有以下有益效果:
1.现有技术直接将接收到的音视频码流存成传输流文件(TS流),只能用专用的播放器进行,不能用通用的视频播放器播放,而本发明方法的录制过程中,对AAC+音频码流进行解码;利用解码过程来对码流进行误码判断,如果没有误码,则将没有误码的AAC+码流提供给录制模块,由录制模块负责封装到某种视频容器中,如AVI文件,录制得到的音视频文件可以用通用的视频播放器进行播放,应用领域更灵活;
2.现有技术直接将接收到的TS流封装到某种音视频容器中形成某种视频格式,由于误码的广泛存在,通用的视频播放器会因误码而停止解码、持续噪音或系统崩溃,而本发明方法的音频处理过程中对误码录制采用AAC码流解码处理,如果解码过程中发现有误码,就将误码所在AAC+码流帧丢弃,用一个静音帧代替,并将静音帧对应的码流数据提供给录制模块,由录制模块封装到某种音视频容器中,使得录制的音频文件没有误码,视频播放器播放时流畅;
3.现有技术将从空中接收到误码帧处理成AAC+静音帧,整个AAC+码流在解码过程中,会因为AAC+中前后帧的相关性而将AAC+静音帧解码输出尖锐、刺耳的噪音,而本发明方法的音频处理过程中对误码录制采用AAC静音帧解码处理,在解码过程中,剔除码流中的SBR信息,将AAC+码流变成AAC码流,解决因插入的静音帧与SBR信息严重不匹配引入的尖锐噪音。使得录制得到的音频文件没有杂音。
附图说明
图1是本发明移动数字电视录像中的音频处理方法的流程图;
图2是音频处理过程中对误码处理成AAC+静音帧解码后的频谱图;
图3是本发明音频处理方法中对误码处理成AAC静音帧解码后的频谱图。
具体实施方式
图1示出了本发明的一种移动数字电视录像中的音频处理方法的流程示意图,该方法包括以下步骤:
(1)、AAC+音频解码器初始化:应用调用者将从空中接收到的每个AAC+码流裸数据帧封装成音频数据传输流(ADTS)格式的帧,用于AAC+解码器进行解码和音视频同步;音频数据传输流(ADTS)格式为:在每一帧AAC+码流的前面增加一个7至9个字节ADTS帧头和4个字节的时间戳;ADTS帧头用于解码时定位AAC+码流帧的开始以便后续解码;时间戳为时间信息,用于音视频同步的控制;AAC+码流裸数据即没有封装到ADTS中的码流数据。
(2)、AAC+解码器对步骤(1)中的ADTS格式的帧封装后的每一帧的ADTS帧头进行解析,找到该帧原始的AAC+码流裸数据,并将其拷贝到音频解码录制缓冲区中;找到该帧原始的AAC+码流裸数据的过程为:根据AAC+音频解码器对每个ADTS帧头进行解析,可获取对应帧的帧长(Framelen)信息,则ADTS帧头和时间戳后面的长度为帧长的数据即为一帧原始的AAC+码流裸数据。
音频解码录制缓冲区,既是解码时用到的源数据缓冲区,也是录制时用于传给录制模块的音频源数据缓冲区。
(3)、对音频解码录制缓冲区中AAC+码流裸数据进行哈夫曼解码,如果哈夫曼解码出现异常,则说明当前帧为误码帧,则将4096个无声样本用于播放,并进入步骤(6);如果解码正常,进入步骤(4);根据AAC+算法理论每帧AAC+码流两个声道共可解出4096个声音样本。
(4)、剔除音频解码录制缓冲区AAC+码流裸数据中的SBR信息,将音频解码录制缓冲区中的AAC+码流裸数据变成AAC裸数据。AAC+裸数据中的SBR信息是码流中附加填充数据,存在于每帧码流后面的填充区;码流中的附加填充数据,有不同的附加填充数据类型,由码流中填充区的附加填充数据类型字段进行标识,对于SBR信息,该字段标识为0xd或0xe。剔除SBR信息的过程为:将码流后面的填充区中附加填充数据类型字段中SBR信息标识从0xd或0xe改成0x0。AAC裸数据的填充区中仍然存在真实的SBR信息,但由于SBR标识信息被修改,SBR信息已经无效。
之所以要剔除AAC+裸数据中SBR信息的处理方案,是因为:现有的AAC编码算法中,使用修正离散余弦变换(MDCT)将时域信号转换到频域进行处理,即用前后两帧的声音样本拼在一起,组成一段数据进行MDCT变换,所以AAC的任意相邻两帧是相互关联的,后一帧码流的解码需要前一帧的部分解码结果。
录像时如果AAC+码流中出现一帧误码,如果处理成AAC+静音帧,即含SBR信息的AAC+静音裸数据。对录下来的AAC+码流进行解码,遇到AAC+静音帧时,首先对AAC+中的AAC进行核心解码,由于该AAC+静音帧是录像时插入的,与前一帧并无任何关联,二者无法平滑过渡,AAC+静音帧中AAC核心部分的解码输出并不是期望中的静音,而是轻微杂乱噪音,此时这些噪音几乎不为人耳所察觉;但这些噪音再经后续的SBR处理后会被放大,变成尖锐刺耳的噪音。如果录像时将正确的AAC+码流处理成AAC码流(即剔除SBR信息的处理过程),误码帧就得使用AAC静音帧(而非AAC+静音帧)替换原错误码流,这样录制到的是音频部分没有SBR信息的录像视频文件。这种视频文件能被各种播放软件正常播放,只是采样率会降半,缺少部分调频成分,音质稍微受影响,但不会有尖锐刺耳的噪音。
对于上述两种处理方法所得到的频谱图效果如图2和图3所示,图2中,录制时存在误码,采用替换带SBR的静音帧后,解码会引入杂音,该杂音显示为图2中的竖向空白线段;图3中录制时存在误码,采用替换带SBR的静音帧后,解码后无杂音。
(5)、AAC+解码器进行常规后续解码过程:包括反量化、声道处理、滤波器组解码处理、SBR处理。如果后续解码中的任一环节解码失败,进入步骤(6)。如果后续解码过程成功,则最终会解码输出的4096个声音样本,用于播放;同时,将音频解码录制缓冲区的中AAC裸数据传给录制模块,由录制模块将该AAC裸数据封装到音视频文件中,并进入步骤(7)。
(6)、将一帧静音AAC码流裸数据传给录制模块,由录制模块负责将这AAC码流裸数据封装到视频文件中。静音AAC码流裸数据(即AAC静音帧)为不含SBR信息的无声码流。该静音AAC码流裸数据仅含以下几个字节:
“0x21,0x00,0x49,0x90,0x02,0x19,0x00,0x23,0x80”。
(7)、判断解码录制过程是否结束,没有结束则返回步骤(1)进行下一帧的解码录制,否则退出解码器,结束解码录制过程。
下面以ISTD-T或CMMB移动电视信号下,对接收到的移动数字电视节目录制成AVI格式为例,参考图1,说明本发明方法的音频处理过程:
1、准备好一个大小为768×2字节的音频解码录制缓冲区;准备好一个9字节大小不带SBR信息的静音帧(AAC裸数据),该9个字节不含ADTS帧头,为:“0x21,0x00,0x49,0x90,0x02,0x19,0x00,0x23,0x80”;启动AAC+解码器,进行解码器相关的初始化操作;音频解码调用者设置一个回调函数给音频解码器使用,音频解码器通过此回调函数将处理后的AAC码流帧或AAC静音帧传给音频解码调用者处理。该回调函数原型可定义如下,其中buf是录像音频码流首地址,len为码流数据长度:
typedef int(*CB_AUDIORECDATA)(unsigned char*buf,int len)
根据MPEG标准中关于AAC/AAC+的描述,每帧每声道的码流长度不大于768个字节,移动数字电视音频声道数最大为2,所以录像时每帧音频码流不超过768×2字节,音频解码录制缓冲区的大小定义为768×2即可。
2、对从空中接收的音视频码流,提取其中音频AAC+的ADTS码流后,寻找同步字找到ADTS帧头并对其解析后获得采样率、比特率和Framelen(帧长)等信息。接着将从ADTS帧头结束后的第一个字节数据开始,长度为Framelen个字节的码流数据拷贝到音频解码录制缓冲区中。
移动数字电视播放时,AAC+码流封装成音频数据传输流(ADTS)格式,即在每一帧AAC+码流的前面增加一个7-9个字节ADTS帧头和4字节的时间戳,用于提供同步字信息、码流基本信息和音视频同步信息,例如采样率、声道数、帧长(Framelen)信息等。帧同步字是0xfff,有了帧同步字,即使当前音频帧出现了误码无法解码,也能通过寻找帧同步字定位出下一帧继续解码。
3、对音频录制缓冲区中的AAC+码流进行解码,首先是哈夫曼解码,如果哈夫曼解码返回异常,证明码流有误码,本帧解码失败,直接调用回调函数将静音帧(AAC裸数据)传给录制模块。
4、如果哈夫曼解码正常,继续码流中填充数据的解析,剔除音频解码录制缓冲区中SBR信息,即将其中的AAC+裸数据中填充区中填充数据类型字段为0xd或0xe地方修改成0x0,将SBR信息标识成无用的填充数据。
5、经过反量化、声道处理、滤波器组处理、SBR处理等解码操作后,如果解码一切正确,说明当前帧无误码,本帧解码成功,音频解码器调用回调函数将音频解码录制缓冲区中的码流数据传给录制模块;如果反量化、声道处理、滤波器组处理或SBR处理中任何一步骤异常,即可放弃后续解码步骤,直接返回解码失败,同时音频解码器调用回调函数将静音帧(静音AAC裸数据)传给上层音频解码调用者。
6、当前处理帧解码结束,跳到步骤2进行下一帧的解码录制处理,直到所有音视频码流录制完全,结束整个解码录制处理。
本发明的实施方式不限于此,在本发明上述基本技术思想前提下,按照本领域的普通技术知识和惯用手段对本发明内容所做出其它多种形式的修改、替换或变更,均落在本发明权利保护范围之内。