1.一种AVI文件播放时切换多路音频流的AV同步方法,应用于包括切换控制单元、数据传输单元、数据处理单元和数据解码单元的系统,在播放含有多路音频流的AVI文件时,先保存AVI文件头信息,当用户切换音频流后,其特征在于,执行以下步骤:
(a)切换控制单元收到切换请求后,向数据处理单元和数据解码单元发送切换指令;
(b)数据解码单元向切换控制单元回传当前解码的视频帧数;
(c)切换控制单元根据当前解码的视频帧数和保存的索引信息、文件头信息计算得到重传位置和同步播放参数,将重传位置发送到数据传输单元,将同步播放参数发送到数据解码单元,所述同步播放参数为计算出的音频跳过数目Skip_audio和视频跳过数目Skip_Frame;
(d)数据传输单元按指定重传位置重新传输AVI文件的音视频数据,数据处理单元接收到音视频数据后分离出视频流和应切换到的那路音频流;数据解码单元完成视频解码的重新初始化,并按要切换到的那路音频流的参数重新进行音频解码的初始化;
(e)数据解码单元接收到重新传输的音视频数据后,所述数据解码单元对重新传输的音视频流开始部分的Skip_audio个字节数或帧数以及Skip_Frame个视频帧,解码后不传输到数据显示单元,之后解码的音视频数据再传输到数据显示单元进行同步播放,其中对固定码流采用字节数,对可变码流采用帧数。
2.如权利要求1所述的AV同步方法,其特征在于:
所述数据解码单元在收到切换指令后,继续对缓存的视频数据进行解码,在收到参数Skip_audio和Skip_Frame后,再清空缓存的视频数据,进行视频解码的重新初始化。
3.如权利要求1所述的AV同步方法,其特征在于:
所述系统为嵌入式系统,所述数据解码单元用硬件实现,切换控制单元、数据传输单元和数据处理单元则由CPU执行相应软件来实现。
4.如权利要求1所述的AV同步方法,其特征在于:所述步骤(c)切换控制单元进一步通过以下步骤完成计算:
(c1)根据切换音频数据流时正在解码的帧数A加上设定的帧数B,得到本次切换的视频同步点VC的帧序号,且根据解析的音视频数据开始位置和其总大小,确定索引信息起始位置,读取索引信息并保存;
(c2)从音视频数据索引开始位置累计视频帧的数目,以累计的视频帧数最接近且小于VC帧序号的I帧为VC之前最近的I帧VI;
(c3)从索引信息中找到VI对应的音频数据块AI,读取AI在AVI文件中的偏移位置,以该位置为重传位置;
(c4)计算VC与VI之间的帧数差即视频跳过数目Skip_Frame,以及播放VC时要切换到的那路音频流应播过的音频字节数或帧数Audio_accum_size与AI之前累加得到的音频字节数或帧数Audio_TotalN_AI的差值,即音频跳过数目Skip_audio。
5.如权利要求4所述的AV同步方法,其特征在于:所述步骤(c3)中VI对应的音频数据块AI按以下方式来查找:
(c31)计算播放VI之前要切换到的那路音频流应播过的音频字节数或帧数Audio_TotalN_I,公式为:
对固定码流:Audio_TotalN_I=VI的帧序号*(视频流时间尺度/视频流速率指标)*CBR音频字节率
对可变码流:Audio_TotalN_I=VI的帧序号*(视频流时间尺度/视频流速率指标)*VBR音频采样率/1152
(c32)从音视频数据的起始位置,逐一累加要切换到的那路音频流数据块的字节数或帧数,将累加值与上面得到的Audio_TotalN_I进行比较,如果小于Audio_TotalN_I,再进行下一次累加,如果大于等于Audio_TotalN_I,执行下一步;
(c33)如累加值等于Audio_TotalN_I,则该路音频流的下一音频数据块即为VI对应的音频数据块AI,如累加值大于Audio_TotalN_I,则该音频数据块即为VI对应的音频数据块AI,同时记录AI之前累加得到的音频字节数或帧数Audio_TotalN_AI;
(c34)从音频数据块AI对应的索引信息块中找到偏移位置dwOffset,该位置即为重传位置,
所述步骤(c4)中计算播放VC时要切换到的那路音频流应播过的音频字节数或帧数Audio_accum_size时,只需将步骤(c31)公式中的VI的帧序号改成VC的帧序号即可。
6.如权利要求3所述的AV同步方法,其特征在于:
所述帧数B取值范围为:6~12个帧。
7.如权利要求1所述的AV同步方法,其特征在于:
步骤(a)中,切换控制单元收到切换请求后,还向所述数据传输单元发送切换指令,所述数据传输单元收到切换指令后,立即停止对原音视频流的传输;同时,如AVI文件中包含三路及以上的音频流数据,则切换控制单元发送到数据处理单元和数据解码单元的指令中,需要指示要切换到的是哪一路音频流。
8.一种AVI文件播放时切换多路音频流的AV同步装置,其特征在于,包括:
数据传输单元,用于读取AVI文件的音视频数据传输到数据处理单元,并在收到重传指令后按指定重传位置重新传输AVI文件的音视频数据;
数据处理单元,用于对AVI文件头信息和索引信息进行解析后保存,完成音频流和视频流的分离并传输给数据解码单元,在收到切换指令后,从音视频数据中分离出视频流和应切换到的那路音频流;
切换控制单元,用于在收到切换请求后,向数据处理单元和数据解码单元发送切换指令,然后根据当前解码的视频帧数和保存的索引信息、文件头信息计算得到重传位置和同步播放参数,将重传位置发送到数据传输单元,将同步播放参数发送到数据解码单元,所述同步播放参数为计算出的音频跳过数目Skip_audio和视频跳过数目Skip_Frame;
数据解码单元,包括音频解码子单元和视频解码子单元;在收到切换指令后,向切换控制单元回传当前解码的视频帧数,并完成视频解码的重新初始化以及按要切换到的那路音频流的参数重新进行音频解码的初始化;根据接收的同步播放参数,所述数据解码单元对重新传输的音视频流开始部分的Skip_audio个字节数或帧数以及Skip_Frame个视频帧,解码后不传输到数据显示单元,之后解码的音视频数据再传输到数据显示单元进行同步播放,其中对固定码流采用字节数,对可变码流采用帧数。
9.如权利要求8所述的AV同步装置,其特征在于:所述切换控制单元进一步包括:
接口子单元,用于完成切换控制单元与其它单元之间的通信;
信息提取子单元,用于从数据处理单元获取AVI文件头信息和索引信息,供运算子单元使用
控制子单元,用于在收到用户接口单元的切换请求后,向数据解码单元、数据处理单元和数据解码单元发送切换指令,发送到数据处理单元和解码单元的指令应携带要切换到的音频流标识,从数据解码单元获取当前解码的视频帧序号传送到运算子单元;并在收到运算子单元的重传位置、音频跳过数目和视频跳过数目参数后,向数据传输单元发送重传指令,携带重传位置参数,以及将音频跳过数目和视频跳过数目参数传输到数据解码单元;
运算子单元,用于根据当前解码的视频帧序号和AVI文件头信息和索引信息,计算出重传位置、音频跳过数目Skip_audio和视频跳过数目Skip_Frame,传送到控制子单元。
10.如权利要求8所述的AV同步装置,其特征在于:
所述数据解码单元在收到切换指令后,继续对缓存的视频数据进行解码,在收到参数Skip_audio和Skip_Frame后,再清空缓存的视频数据,进行视频解码的重新初始化。
11.如权利要求9所述的AV同步装置,其特征在于:所述运算子单元进一步包括以下部分:
同步点计算及索引信息提取部分,根据切换音频数据流时正在解码的帧数A加上设定的帧数B,得到本次切换的视频同步点VC的帧序号,且根据解析的音视频数据开始位置和其总大小,确定索引信息起始位置,读取索引信息并保存;
I帧确定部分,从音视频数据索引开始位置累计视频帧的数目,以累计的视频帧数最接近且小于VC帧序号的I帧为VC之前最近的I帧VI;
重传位置计算部分,从索引信息中找到VI对应的音频数据块AI,读取AI在AVI文件中的偏移位置,以该位置为重传位置;
跳过数目计算部分,计算VC与VI之间的帧数差即视频跳过数目Skip_Frame,以及播放VC时要切换到的那路音频流应播过的音频字节数或帧数Audio_accum_size与AI之前累加得到的音频字节数或帧数Audio_TotalN_AI的差值,即音频跳过数目Skip_audio。
12.如权利要求11所述的AV同步装置,其特征在于:
所述重传位置计算部分查找VI对应的音频数据块AI时,先计算播放VI之前要切换到的那路音频流应播过的音频字节数或帧数Audio_TotalN_I,公式为:
对固定码流:Audio_TotalN_I=VI的帧序号*(视频流时间尺度/视频流速率指标)*CBR音频字节率
对可变码流:Audio_TotalN_I=VI的帧序号*(视频流时间尺度/视频流速率指标)*VBR音频采样率/1152
再从音视频数据的起始位置,逐一累加要切换到的那路音频流数据块的字节数或帧数,将累加值与上面得到的Audio_TotalN_I进行比较,如果小于Audio_TotalN_I,再进行下一次累加,如累加值等于Audio_TotalN_I,则该路音频流的下一音频数据块即为VI对应的音频数据块AI,如累加值大于Audio_TotalN_I,则该音频数据块即为VI对应的音频数据块AI,同时记录AI之前累加得到的音频字节数或帧数Audio_TotalN_AI;
最后,从音频数据块AI对应的索引信息块中找到偏移位置dwOffset,该位置即为重传位置,
所述跳过数目计算部分计算播放VC时要切换到的那路音频流应播过的音频字节数或帧数Audio_accum_size时,只需将上述计算Audio_TotalN_I公式中的VI的帧序号改成VC的帧序号即可。
13.如权利要求8所述的AV同步装置,其特征在于:
所述切换控制单元还用于在收到切换请求后,向所述数据传输单元发送切换指令;所述数据传输单元收到切换指令后,立即停止对原音视频流的传输;所述切换控制单元在播放的AVI文件中包含三路及以上的音频流数据时,发送到数据处理单元和数据解码单元的指令中,需要指示要切换到的是哪一路音频流。
14.如权利要求8所述的AV同步装置,其特征在于:
所述装置应用于嵌入式系统,所述数据解码单元用硬件实现,切换控制单元、数据传输单元和数据处理单元由CPU执行相应软件来实现。
技术领域\n本发明主要涉及音视频播放领域,尤其涉及一种应用于嵌入式系统中保持含一路Divx视频编码数据、多路音频数据的AVI文件在切换播放的音频数据时音视频(AV)同步的方法和装置。\n背景技术\n先对文中出现的相关技术术语进行解释:\nI帧:关键视频帧,无损压缩的视频图片,此文件中所有引用I帧的地方,指的都是视频帧;\nDivx:一种视频编码格式;\nAV:Audio and Video,音频和视频;\nCBR:固定码流;\nVBR:可变码流;\nSPHE1001N:Sunplus Home Entertainment 1001N;\nSTB:全称为Set-Top-Box即机顶盒;\nAVI:Audio Video Interleaved,音视频数据交叉存取。\nAVI(Audio Video Interleaved(交叉存取))是最常用的一种媒体文件格式,多用于音视频捕捉、编辑、回放等应用程序中。通常情况下,一个AVI文件可以包含多个不同类型的媒体流。通常AVI文件包含的媒体流为含有一个视频流和一个音频流,但含有一个视频流和几个音频流的AVI文件也是合法的。\n如图1所示,AVI文件结构主要包括三部分:AVI文件头、音视频数据、索引信息。\n其中从AVI文件头,可获得的信息包括:AVIMAINHEADER(AVI主文件头)信息、格式信息、音频流数、视频流时间尺度和速率指标、音视频数据开始位置Movie_Offset、音视频数据整体大小Movie_Size、VBR音频流的采样率或者CBR音频流的字节率等信息。其中,AVI文件中音频流通常为两种编码格式VBR音频或者CBR音频,故根据情况解析相应参数。\n其中音视频数据部分为以数据块为单位依次交叉存放各路音视频实际数据。如图2所示。\n其中INDEX由索引信息块列表组成,每个索引信息块对应AVI文件中每个音频或视频数据块,该索引信息块依照AVI文件中音、视频数据块交错排列形式依次排列形成列表,每个索引信息块包含:数据块标志(是视频数据块、音频数据块还是填充的空白数据块,对于音频数据块还包括属于哪一路音频流的标志)、是否是关键帧标志(即I帧的标志)、是组合数据块标志(即多个数据块组合为一个数据组合)或是单数据块(一个数据块,它可以是一个帧,或者多个帧)、偏移量dwOffset(索引每路中每音/视频数据块对应在文件中距离文件头或音视频数据头的偏移),以及对应音/视频数据块的字节数。\n对于视频数据一般情况下一个数据块对应一帧;对于VBR的音频数据来说,一个数据块对应一个音频帧,对于CBR的音频数据,数据块和音频帧之间没有绝对的对应关系。在AVI文件中会有少数的如下情况:几个音频数据块组合为一个组合数据块。\n由于AVI视频文件不含有精确的、均匀分布的时间戳信息。对于非切换过程的AV同步,主要是在初始化解码器前,从音视频流头信息中读取每个流的时间尺度参数和速率参数,根据这两类参数分别初始化音视频解码器的解码速率,从而保持AV同步。而在播放含有一路Divx视频编码数据、多路音频数据的AVI文件,当切换播放的音频数据时,就需要重新计算出音频、视频播放的精确位置,以保证AV同步。\n本发明是基于嵌入式系统,解码工作由硬件芯片完成,数据传输控制由软件完成,以降低嵌入式系统运行要求,加快解码速度。但采用硬件解码时,数据传输的位置信息及数据解码的位置信息等保持AV同步所需的信息需要在各个单元之间传递,工作的控制和协调较难实现,目前还没有这样的一种方法。\n发明内容\n本发明要解决的技术问题是提供一种AVI文件播放时切换多路音频流的AV同步方法及装置,在播放含有一路Divx视频编码数据、多路音频数据的AVI文件时,切换音频流后可保持AV同步。\n为了解决上述技术问题,本发明提供了一种AVI文件播放时切换多路音频流的AV同步方法,应用于包括切换控制单元、数据传输单元、数据处理单元和数据解码单元的系统,在播放含有多路音频流的AVI文件时,先保存AVI文件头信息,当用户切换音频流后,执行以下步骤:\n(a)切换控制单元收到切换请求后,向数据处理单元和数据解码单元发送切换指令;\n(b)数据解码单元向切换控制单元回传当前解码的视频帧数;\n(c)切换控制单元根据当前解码的视频帧数和保存的索引信息、文件头信息计算得到重传位置和同步播放参数,将重传位置发送到数据传输单元,将同步播放参数发送到数据解码单元,所述同步播放参数为计算出的音频跳过数目Skip_audio和视频跳过数目Skip_Frame;\n(d)数据传输单元按指定重传位置重新传输AVI文件的音视频数据,数据处理单元接收到音视频数据后分离出视频流和应切换到的那路音频流;数据解码单元完成视频解码的重新初始化,并按要切换到的那路音频流的参数重新进行音频解码的初始化;\n(e)数据解码单元接收到重新传输的音视频数据后,所述数据解码单元对重新传输的音视频流开始部分的Skip_audio个字节数或帧数以及Skip_Frame个视频帧,解码后不传输到数据显示单元,之后解码的音视频数据再传输到数据显示单元进行同步播放,其中对固定码流采用字节数,对可变码流采用帧数。\n进一步地,上述音视频同步方法还可具有以下特点:\n所述数据解码单元在收到切换指令后,继续对缓存的视频数据进行解码,在收到参数Skip_audio和Skip_Frame后,再清空缓存的视频数据,进行视频解码的重新初始化。\n进一步地,上述音视频同步方法还可具有以下特点:\n所述系统为嵌入式系统,所述数据解码单元用硬件实现,切换控制单元、数据传输单元和数据处理单元则由CPU执行相应软件来实现。\n进一步地,上述音视频同步方法还可具有以下特点:所述步骤(c)切换控制单元进一步通过以下步骤完成计算:\n(c1)根据切换音频数据流时正在解码的帧数A加上设定的帧数B,得到本次切换的视频同步点VC的帧序号,且根据解析的音视频数据开始位置和其总大小,确定索引信息起始位置,读取索引信息并保存;\n(c2)从音视频数据索引开始位置累计视频帧的数目,以累计的视频帧数最接近且小于VC帧序号的I帧为VC之前最近的I帧VI;\n(c3)从索引信息中找到VI对应的音频数据块AI,读取AI在AVI文件中的偏移位置,以该位置为重传位置;\n(c4)计算VC与VI之间的帧数差即视频跳过数目Skip_Frame,以及播放VC时要切换到的那路音频流应播过的音频字节数或帧数Audio_accum_size与AI之前累加得到的音频字节数或帧数Audio_TotalN_AI的差值,即音频跳过数目Skip_audio。\n进一步地,上述音视频同步方法还可具有以下特点:所述步骤(c3)中VI对应的音频数据块AI按以下方式来查找:\n(c31)计算播放VI之前要切换到的那路音频流应播过的音频字节数或帧数Audio_TotalN_I,公式为:\n对固定码流:Audio_TotalN_I=VI的帧序号*(视频流时间尺度/视频流速率指标)*CBR音频字节率\n对可变码流:Audio_TotalN_I=VI的帧序号*(视频流时间尺度/视频流速率指标)*VBR音频采样率/1152\n(c32)从音视频数据的起始位置,逐一累加要切换到的那路音频流数据块的字节数或帧数,将累加值与上面得到的Audio_TotalN_I进行比较,如果小于Audio_TotalN_I,再进行下一次累加,如于大于等于Audio_TotalN_I,执行下一步;\n(c33)如累加值等于Audio_TotalN_I,则该路音频流的下一音频数据块即为VI对应的音频数据块AI,如累加值大于Audio_TotalN_I,则该音频数据块即为VI对应的音频数据块AI,同时记录AI之前累加得到的音频字节数或帧数Audio_TotalN_AI;\n(c34)从音频数据块AI对应的索引信息块中找到偏移位置dwOffset,该位置即为重传位置。\n所述步骤(c4)中计算播放VC时要切换到的那路音频流应播过的音频字节数或帧数Audio_accum_size时,只需将步骤(c31)公式中的VI的帧序号改成VC的帧序号即可。\n进一步地,上述音视频同步方法还可具有以下特点:\n所述帧数B取值范围为:6~12个帧。\n进一步地,上述音视频同步方法还可具有以下特点:\n步骤(a)中,切换控制单元收到切换请求后,还向所述数据传输单元发送切换指令,所述数据传输单元收到切换指令后,立即停止对原音视频流的传输;同时,如AVI文件中包含三路及以上的音频流数据,则切换控制单元发送到数据处理单元和数据解码单元的指令中,需要指示要切换到的是哪一路音频流。\n本发明提供的AVI文件播放时切换多路音频流的AV同步装置包括:\n数据传输单元,用于读取AVI文件的音视频数据传输到数据处理单元,并在收到重传指令后按指定重传位置重新传输AVI文件的音视频数据;\n数据处理单元,用于对AVI文件头信息和索引信息进行解析和保存,完成音频流和视频流的分离并传输给数据解码单元,在收到切换指令后,从音视频数据中分离出视频流和应切换到的那路音频流;\n切换控制单元,用于在收到切换请求后,向数据处理单元和数据解码单元发送切换指令,然后根据当前解码的视频帧数和保存的索引信息、文件头信息计算得到重传位置和同步播放参数,将重传位置发送到数据传输单元,将同步播放参数发送到数据解码单元,所述同步播放参数为计算出的音频跳过数目Skip_audio和视频跳过数目Skip_Frame;\n数据解码单元,包括音频解码子单元和视频解码子单元;在收到切换指令后,向切换控制单元回传当前解码的视频帧数,并完成视频解码的重新初始化以及按要切换到的那路音频流的参数重新进行音频解码的初始化;根据接收的同步播放参数,所述数据解码单元对重新传输的音视频流开始部分的Skip_audio个字节数或帧数以及Skip_Frame个视频帧,解码后不传输到数据显示单元,之后解码的音视频数据再传输到数据显示单元进行同步播放,其中对固定码流采用字节数,对可变码流采用帧数。\n进一步地,上述音视频同步装置还可具有以下特点:所述切换控制单元进一步包括:\n接口子单元,用于完成切换控制单元与其它单元之间的通信;\n信息提取子单元,用于从数据处理单元获取AVI文件头信息和索引信息,供运算子单元使用。\n控制子单元,用于在收到用户接口单元的切换请求后,向数据解码单元、数据处理单元和数据解码单元发送切换指令,发送到数据处理单元和解码单元的指令应携带要切换到的音频流标识,从数据解码单元获取当前解码的视频帧序号传送到运算子单元;并在收到运算子单元的重传位置、音频跳过数目和视频跳过数目参数后,向数据传输单元发送重传指令,携带重传位置参数,以及将音频跳过数目和视频跳过数目参数传输到数据解码单元。\n运算子单元,用于根据当前解码的视频帧序号和AVI文件头信息和索引信息,计算出重传位置、音频跳过数目Skip_audio和视频跳过数目Skip_Frame,传送到控制子单元。\n进一步地,上述音视频同步装置还可具有以下特点:\n所述数据解码单元在收到切换指令后,继续对缓存的视频数据进行解码,在收到参数Skip_audio和Skip_Frame后,再清空缓存的视频数据,进行视频解码的重新初始化。\n进一步地,上述音视频同步装置还可具有以下特点:所述运算子单元进一步包括以下部分:\n同步点计算及索引信息提取部分,根据切换音频数据流时正在解码的帧数A加上设定的帧数B,得到本次切换的视频同步点VC的帧序号,且根据解析的音视频数据开始位置和其总大小,确定索引信息起始位置,读取索引信息并保存;\nI帧确定部分,从音视频数据索引开始位置累计视频帧的数目,以累计的视频帧数最接近且小于VC帧序号的I帧为VC之前最近的I帧VI;\n重传位置计算部分,从索引信息中找到VI对应的音频数据块AI,读取AI在AVI文件中的偏移位置,以该位置为重传位置;\n跳过数目计算部分,计算VC与VI之间的帧数差即视频跳过数目Skip_Frame,以及播放VC时要切换到的那路音频流应播过的音频字节数或帧数Audio_accum_size与AI之前累加得到的音频字节数或帧数Audio_TotalN_AI的差值,即音频跳过数目Skip_audio。\n进一步地,上述音视频同步装置还可具有以下特点:\n所述重传位置计算部分查找VI对应的音频数据块AI时,先计算播放VI之前要切换到的那路音频流应播过的音频字节数或帧数Audio_TotalN_I,公式为:\n对固定码流:Audio_TotalN_I=VI的帧序号*(视频流时间尺度/视频流速率指标)*CBR音频字节率\n对可变码流:Audio_TotalN_I=VI的帧序号*(视频流时间尺度/视频流速率指标)*VBR音频采样率/1152\n再从音视频数据的起始位置,逐一累加要切换到的那路音频流数据块的字节数或帧数,将累加值与上面得到的Audio_TotalN_I进行比较,如果小于Audio_TotalN_I,再进行下一次累加,如累加值等于Audio_TotalN_I,则该路音频流的下一音频数据块即为VI对应的音频数据块AI,如累加值大于Audio_TotalN_I,则该音频数据块即为VI对应的音频数据块AI,同时记录AI之前累加得到的音频字节数或帧数Audio_TotalN_AI;\n最后,从音频数据块AI对应的索引信息块中找到偏移位置dwOffset,该位置即为重传位置。\n所述跳过数目计算部分计算播放VC时要切换到的那路音频流应播过的音频字节数或帧数Audio_accum_size时,只需将上述计算Audio_TotalN_I公式中的VI的帧序号改成VC的帧序号即可。\n进一步地,上述音视频同步装置还可具有以下特点:\n所述切换控制单元还用于在收到切换请求后,向所述数据传输单元发送切换指令;所述数据传输单元收到切换指令后,立即停止对原音视频流的传输;所述切换控制单元在播放的AVI文件中包含三路及以上的音频流数据时,发送到数据处理单元和数据解码单元的指令中,需要指示要切换到的是哪一路音频流。\n进一步地,上述音视频同步装置还可具有以下特点:\n所述装置应用于嵌入式系统,所述数据解码单元用硬件实现,切换控制单元、数据传输单元和数据处理单元由CPU执行相应软件来实现。\n本发明保证了播放含一路Divx视频编码数据、多路音频数据的AVI文件,在切换不同音频流数据时保持AV同步。进一步还可以尽可能维持视频播放的连续性。特别可用于嵌入式系统的低配置条件下,实现AVI文件音频数据切换时的AV同步,从而降低了对系统主频的要求,可实现Karaoke(卡拉OK)的原/伴唱切换等功能。\n附图说明\n图1是AVI文件结构的示意图。\n图2是图1中的音视频数据部分的结构示意图。\n图3是本发明实施例系统的结构框图。\n图4是本发明实施例方法在切换原伴唱时的处理流程图。\n图5和图6分别是CBR音频流和VBR音频流的参数计算的示意图。\n具体实施方式\n本发明是播放含有一路Divx视频编码数据、多路音频数据的AVI文件过程中,切换音频数据时保持AV同步的方法和系统,以下以播放Karaoke系统时切换原伴唱为例,结合附图和实施例对本发明进行详细说明。\n由于从得到切换指令到行使多路音频切换期间需要一段时间进行计算,为避免视频图像静止定格,视频会继续播放一段时间。在视频播放的情况下,为了保证切换后的音频与视频的同步,就要选择一个音视频同时播放的一个点,即视频同步点(即视频帧)C及其对应的音频数据块。该视频同步点应在切换时解码的视频帧后的某个位置。\n另外根据解码的要求,视频的解码必须从I帧开始,音频可以从任何位置开始,如果直接从C点视频解码,则会出现马赛克现象。所以确定切换后重新解码的开始位置时,需找到视频同步点C(也用VC表示)之前最近的I帧(也用VI表示)所对应(指应同步播放)的音频数据块(以下用AI表示),从该音频数据块在AVI文件中的偏移位置Goto_offset重新传输和解码AVI文件数据。对于VC之前的视频帧以及VC对应的音频数据块(以下用AC表示)之前的音视频数据,只进行解码而不进行播放。\n本文中的重新传输或重传,是指打破第一次传输次序,开始新的第二次传输,这次传输的起始位置不再是原来的文件头。\n图3是本发明实施例系统的结构框图,如图所示,包括数据传输单元、数据处理单元、切换控制单元、数据解码单元、数据显示单元和用户接口单元,其中:\n数据传输单元用于将读取的AVI文件音视频数据传输到数据处理单元,且数据传输单元在收到切换控制单元的切换指令后停止数据传输,在收到该单元的重传指令后,按指令中指示的重转位置重新开始传输音视频数据。其中视频数据采用Divx3.11、Divx4.x、Divx5.x等编码格式,音频数据采用MP1、MP2、MP3等编码格式。\n数据处理单元用于接收数据传输单元传输的音视频数据,对AVI文件头信息、Index信息、音视频格式信息进行解析后保存,分离出要播放的音视频数据并传输给数据解码单元,在收到切换指令后对重新传输的数据,需要从音视频数据中分离出视频流和应切换到的那路音频流;\n切换控制单元进一步包括:\n信息提取子单元,用于从数据处理单元获取保存的AVI文件头信息和Index信息,供运算子单元使用;\n接口子单元,用于完成切换控制单元与其它单元之间的通信;\n控制子单元,用于在收到用户接口单元的切换请求后,向数据传输单元、数据处理单元和数据解码单元发送切换指令,发送到数据处理单元和解码单元的指令指示要切换到的是哪一路音频流(指示可以通过携带要切换到的音频流标识来实现,当然如果只有两路音频流也可以不指示),并从数据解码单元获取当前解码的视频帧数传送到运算子单元;以及在收到运算子单元的重传位置、音频跳过数目和视频跳过数目参数后,向数据传输单元发送重传指令,包含重传位置参数,并将音频跳过数目和视频跳过数目参数传输到数据解码单元;\n运算子单元,用于根据当前解码的视频帧数和AVI文件头信息、Index信息,计算出重传位置、音频跳过数目和视频跳过数目,传送到控制子单元。该子单元可进行分为同步点计算及索引信息提取部分、I帧确定部分、重传位置计算部分和跳过数目计算部分,各个部分的功能将在下文再介绍。\n数据解码单元,包括音频解码子单元和视频解码子单元,分别用于对数据处理单元传输的音视频数据分别进行解码,其中:\n视频解码子单元还用于在收到切换控制单元的切换指令后,向其回传当前视频解码的视频帧数,并继续解码缓存数据;在收到视频跳过数目后,清空缓存并重新初始化,对重新传输的视频流开始部分该数目的视频帧只解码,不传输到数据显示单元,之后的视频帧解码后输出到数据显示单元;\n音频解码子单元在收到切换控制单元的切换指令后停止对音频数据的解码,按要切换到的音频流参数进行重新初始化设置;在收到音频跳过数目后,对重新传输的音频流开始部分该数目的音频帧/字节数(“/”表示“或”关系,对CBR的音频数据为字节数,对VBR的音频数据为音频帧)只解码,不传输到数据显示单元,之后的音频数据解码后输出到数据显示单元。\n数据显示单元,用于把解码后的音视频数据进行显示、播放,视频可以在TV/VGA设备输出,音频在TV设备输出。\n用户接口单元是用户操作的接口,用户可通过该接口发送切换请求,其中该切换请求在有三路以上音频流时,要包含要切换到的音频流标识,即指示要切换到的是哪一路音频流。\n没有切换原伴唱时执行的流程包括以下步骤:\n步骤一,STB加电,自动运行Karaoke播放系统,用户通过播放界面控制此系统;\n步骤二,用户选择播放AVI文件格式的歌曲时,从AVI文件中的文件头开始传输数据,如接收到的传输数据为AVI文件头,执行步骤三,若为音视频数据,执行步骤五;\n步骤三,解析AVI文件头,保存其中包含的信息;\n其中解析且保存的AVI文件头信息包括:音视频流数,用以确认此文件中有几路音视频流;视频流时间尺度和视频流速率指标;VBR数据对齐值(固定值为1152,)、VBR音频流的采样率或者CBR音频流的字节率;音视频数据开始位置Movie_Offset及音视频数据整体大小Movie_Size;视频图象的宽、高,即图象分辨率;视频解码器类型;视频解码器调色板;视频解码器解码速率(通过视频流时间尺度和视频流速率指标这两个参数表示);每路音频流音频解码器类型;每路音频流音频解码器码流类型(固定码率或非固定码率);每路音频流音频解码器解码速率;音、视频解码器开始解码时间。\n步骤四,根据从AVI文件头获取的信息进行解码的初始化设置操作;\n主要包括以下操作:设置视频图象的宽、高,即图象分辨率;设置视频解码器类型;设置视频解码器调色板;设置视频解码器解码速率;设置音频解码器类型;设置音频解码器码流类型(固定码率或非固定码率);设置音频解码器解码速率;设置音、视频解码器开始解码时间。\n其中AVI文件只含有一路视频数据,但可以含多路音频数据,所以初始化音频解码器时使用默认播放的音频流参数进行初始化操作。\n步骤五,分离需要播放的音视频数据流;\n步骤六,对分离的音视频数据进行解码,通过AV接口把解码后的数据输出到显示设备与扬声器进行播放。\n该流程只是常规的处理流程。\n如图4所示,在播放含有多路音频流的AVI文件的过程中,用户切换原伴唱的处理流程包括以下步骤:\n步骤110,用户切换原伴唱;\n步骤120,切换控制单元收到切换请求后,向数据传输单元、数据处理单元和数据解码单元发送切换指令,其中发送到数据处理单元和数据解码单元的指令需要携带要切换到的音频流标识;\n步骤130,数据传输单元停止对音视频流的传输,数据解码单元按要切换到的那路音频流的参数重新进行音频解码的初始化设置,向切换控制单元回传当前解码的视频帧数,同时继续对缓存的视频数据进行解码;\n该步中的音频解码初始化设置包括:设置音频解码器类型;设置音频解码器码流类型(固定帧率或非固定帧率);设置音频解码器解码速率;设置音、视频解码器开始解码时间。进行这些设置所需的参数是原来从AVI文件头获取的。\n步骤140,切换控制单元根据当前解码的视频帧数和保存的INDEX信息、文件头信息,计算出重传位置、音频跳过数目Skip_audio和视频跳过数目Skip_Frame等参数,向数据传输单元发送重传指令并包括重传位置参数,并将参数Skip_audio和Skip_Frame传送到数据解码单元;\n步骤150,数据传输单元按指定重传位置重新传输AVI文件的音视频数据,由数据处理单元从音视频数据中分离出视频流和应切换到的那路音频流;数据解码单元先清空缓存的视频数据,重新初始化;\n步骤160,数据解码单元对重新传输的音视频流开始部分的Skip_audio个音频字节数/帧数和Skip_Frame个视频帧,解码后不传输到数据显示单元,之后解码的音视频数据再传输到数据显示单元以同步播放。\n至此A/V同步过程完成。要说明的是,数据解码单元(中的音频解码子单元)也可以在收到切换指令后继续解码音频数据,在收到音频跳过数目后再停止解码、完成要切换到的音频流的初始化。\n下面将详细地说明在步骤140中如何进行计算,请同时参照图5和图6示出的CBR(固定码流)音频流和VBR(可变码流)音频流的参数计算的示意图。图中“a”或“v”对应一个数据块。该步骤进一步分为以下步骤:\n步骤1401,根据切换音频数据流时正在解码的视频帧数A加上设定的帧数B,得到本次切换的视频同步点VC的帧序号,同时根据解析的音视频数据开始位置和其总大小确定INDEX信息起始位置,读取INDEX信息并保存;\nVC的帧序号即为从音视频数据开始位置到该帧累计得到的视频帧数目。帧数B为经验值或计算出来,B如果大了,播放会有跳跃现象,如果小了,就会有重复现象,较佳取值范围为:6~12个帧。该运算由运算子单元的同步点计算及索引信息提取部分完成。\n步骤1402,先确定VC之前最近的I帧VI的帧序号;\n本实施例是从音视频数据索引开始位置,分别累计视频帧的数目、所要切换到的音频数据流的每一音频数据块前所有本路音频数据块、字节数/帧数,以及每一路音频流的每一音频数据块在AVI文件中的偏移位置;这样可以一次得到每一个I帧的帧序号(即累计到该I帧的视频帧数),该I帧之前的各路音频流数据块数、字节数/帧数,该I帧对应的音频数据块在AVI文件中的偏移位置等的信息。那么帧序号最接近且小于VC帧序号的I帧即为VI。\n由于在INDEX信息中并没有音频数据块或视频数据块的序号,因此可以从头开始累计视频帧的数目,等于VC的帧序号时即找到了VC,进而可确定其之前最近的I帧。或者,也可以在累计过程中建立起每一个I帧帧序号的集合,直接和VC的帧序号比较,其中帧序号最接近且小于等于VC的帧序号的I帧即为要找的I帧。另外,由于每个I帧之间间隔的帧数是固定的,只要知道第一个I帧的序号(如读取INDEX信息或为固定值),就可以直接计算出每一I帧的帧序号,按同样方法可比较得到VI的帧序号。\n该运算由运算子单元的I帧确定部分完成。\n步骤1403,从INDEX信息中找到VI对应的音频数据块AI,读取AI在AVI文件中的偏移位置,以该位置为重传位置Goto_offset;\n在INDEX中,VI对应的音频数据块AI按以下方式来查找:\n1)计算播放VI之前要切换到的那路音频流应播过的音频字节数或帧数Audio_TotalN_I,对CBR(固定码流)音频流计算的是音频数据字节数,对于VBR(可变码流)音频流计算的是音频数据帧数,公式为:\n对CBR:Audio_TotalN_I=VI的帧序号*(视频流时间尺度/视频流速率指标)*CBR音频字节率\n对VBR:Audio_TotalN_I=VI的帧序号*(视频流时间尺度/视频流速率指标)*VBR音频采样率/1152\n应同步播放的音频数据块和视频数据块并不总是相邻,因此上面根据AVI文件头中的相关参数来计算。\n2)从音视频数据的起始位置,逐一累加要切换到的那路音频流数据块的字节数/帧数,将累加值与上面得到的Audio_TotalN_I进行比较,如果小于Audio_TotalN_I,再进行下一次累加,如于大于等于Audio_TotalN_I,执行下一步;\n3)如累加值等于Audio_TotalN_I,则该路音频流的下一音频数据块即为VI对应的音频数据块AI,如累加值大于Audio_TotalN_I,则该音频数据块即为VI对应的音频数据块AI,同时记录AI之前累加得到的音频字节数/帧数Audio_TotalN_AI;\n4)从音频数据块AI对应的索引信息块中找到偏移位置dwOffset,该位置即为重传位置Goto_offset。\n在另一实施例中,也可以在读入INDEX信息后,先遍历INDEX信息,记录要切换到的那路音频流的每一音频数据块对应的字节数或帧数及其偏移位置,这样在计算出Audio_TotalN_I后,就可以直接比较得到重传位置Goto_offset。\n该运算由运算子单元的重传位置计算部分完成。\n步骤1404,计算出VC与VI之间的帧数差即视频跳过数目Skip_Frame,以及播放VC时要切换到的那路音频流应播过的音频字节数/帧数Audio_accum_size与AI之前累加得到的音频字节数/帧数Audio_TotalN_AI的差值,即音频跳过数目Skip_audio;\nSkip_Frame就等于VC与VI的帧序号的差值。而Audio_accum_size的计算方法与Audio_TotalN_I相同,公式如下:\n对CBR:Audio_accum_size=VC的帧序号*(视频流时间尺度/视频流速率指标)*CBR音频字节率\n对VBR:Audio_accum_size=VC的帧序号*(视频流时间尺度/视频流速率指标)*VBR音频采样率/1152\n由于CBR音频流计算的是音频数据字节数,VBR音频流计算的是音频数据帧数,故Audio_accum_size在CBR的组合数据块或者一个数据块(CBR的音频数据块与音频帧是不对应关系)中可以是截至在一个帧中间,在VBR的组合数据块中是截至在帧帧之间。\n该运算由运算子单元的跳过数目计算部分完成。\n综上所述,本发明可采用软、硬件结合的方式,播放含一路Divx视频编码数据、多路音频数据的AVI文件,在切换不同音频流数据时保持AV同步。保证了在嵌入式系统中低配置条件下,对AVI文件音频数据切换时AV同步,从而降低了对系统主频的要求。\n本发明的另一实施例中,如果只需要实现同步,不考虑播放的连续性问题,也可以省略与音频跳过数目和视频跳过数目相关的流程中的操作和装置中的单元。
法律信息
- 2018-12-14
未缴年费专利权终止
IPC(主分类): H04N 7/26
专利号: ZL 200610172268.9
申请日: 2006.12.30
授权公告日: 2010.04.14
- 2014-04-02
专利权的转移
登记生效日: 2014.03.14
专利权人由凌阳科技股份有限公司变更为凌阳科技股份有限公司
地址由中国台湾新竹科学工业园区创新一路19号变更为中国台湾新竹科学工业园区创新一路19号
专利权人由北京北阳电子技术有限公司变更为北京凌阳益辉科技有限公司
- 2010-04-14
- 2008-08-27
- 2008-07-02
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2006-05-03
|
2005-10-21
| | |
2
| |
2006-02-01
|
2004-07-28
| | |
3
| | 暂无 |
2004-02-25
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |