一种规避连续I帧的分布式音视频处理装置和处理方法与流程

文档序号:11733406阅读:310来源:国知局
一种规避连续I帧的分布式音视频处理装置和处理方法与流程
:本发明涉及一种利用计算机或数据处理装置处理数据的装置和方法,尤其涉及一种能规避连续I帧的分布式处理音视频文件的装置和方法。

背景技术:
:随着网络和文化事业的发展,音视频资源极大丰富,对音视频文件的处理的需要也快速增长。音视频文件处理的大致流程如下:首先将需处理的音视频文件解封装成为视频帧序列和音频帧序列;然后将视频帧序列和音频帧序列分别解码为RAW格式和PCM格式数据;对RAW格式和PCM格式数据进行处理;再将RAW格式和PCM格式的数据编码为所需格式的音频帧序列和视频帧序列;最后将音频帧序列和视频帧序列封装成需要的文件格式。以上处理是通过计算机或计算机构成的数据处理装置来完成的,现有的这些计算机或数据处理装置是依靠本机的软硬件资源来实现对文件的处理。音视频文件处理的计算量庞大,对处理装置的运算能力和存储资源消耗很大,而且随着高清音视频文件的日益增多和处理需求的不断增大,依靠单机进行音视频文件处理的瓶颈问题日益突出,单机处理速度慢且容易发生系统崩溃。即使用户使用配置很高的计算机也难以保证处理的速度和稳定程度,尤其无法满足大批量和时间要求很高的处理任务。对于上述技术问题,公开号为CN103605710A和CN103605709A的中国专利申请均提供了一种分布式音视频处理装置,其使用多台计算机或处理装置来实现并行处理,大大减少了处理所需的时间,同时降低了系统的处理压力。但是,在公开号为CN103605710A和CN103605709A的中国专利申请所提供的分布式音视频处理装置中,源视频流被划分为GOP(GOP:GroupOfPicture图像组);而且这些GOP被分发到很多台不同的视频处理服务器上进行解码、编码。也就是说在分布式系统中有很多编码器。如果GOP(n)和GOP(n+1)被分配到不同的视频处理服务器上,那么这两个GOP的编码之间就无法被编码器统筹处理。例如,如果GOP(n)编码后的帧序列是:IPPB.....PIPPB.....PI(最后一帧被编码成I帧了),GOP(n+1)编码后的帧序列是:IPPB.....PBPPB.....PBI,那么在视频封装阶段把这两个GOP排列在一起的帧序列就是:IPPB.....PIPPB.....PIIPPB.....PBPPB.....PBI,可见在这个序列中很明显就出现连续I帧了。当一个序列中出现连续I帧时,由于I帧是可以独立解码的帧,这类型的帧比B、P帧的长度就会大很多,如果视频长度一定连续I帧多了就会使视频文件的长度变大,这会产生不利于视频的传输和储存的问题。同时,在某些mp4封装器会将连续的两个I帧解析为一个I帧,这样封装出来的视频帧数量就比源视频帧少了,从而造成转码后的视频音画不同步的问题。

技术实现要素:
:为了解决上述技术问题,本发明提供了一种规避连续I帧的分布式音视频文件处理系统,包括:输入处理单元,用于接收源视频文件,对所述源视频文件进行处理获得视频数据和音频数据,并将所述视频数据和所述音频数据分别以GOP和GOA为单位分割成视频数据片段和音频数据片段后,根据一定的分配规则将分割所得的视频数据片段和音频数据片段分配给相应的视频数据处理单元/音频数据处理单元进行处理;数个视频数据处理单元,分别用于对经分割后的视频数据片段进行处理,使得在拼合经处理后的视频数据片段时不会出现连续I帧;数个音频数据处理单元,分别用于对经分割后的音频数据片段进行处理;输出处理单元,用于对经处理后的视频数据片段和音频数据片段进行分别拼合处理并输出;调度单元,用于协调所述输入处理单元、所述数个视频数据处理单元、所述数个音频数据处理单元及输出处理单元的工作。优选地,所述输入处理单元将所述视频数据和所述音频数据分别按顺序以GOP和GOA为单位分割成视频数据片段和音频数据片段;当所述输入处理单元检测到所述视频数据存在连续I帧时,将连续I帧并到其相邻的视频数据片段中。优选地,所述输入处理单元将所述连续I帧中的第一个连续I帧至所述连续I帧之后的下一个非连续I帧但不包括所述下一个非连续I帧之间的所有帧分割为一个视频数据片段。优选地,所述输入处理单元将所述连续I帧之前的上一个非连续I帧至所述连续I帧之后的下一个非连续I帧但不包括所述下一个非连续I帧之间的所有帧分割为一个视频数据片段。优选地,所述数个视频数据处理单元通过调整I帧间隔数使得处理后的视频数据的最后一帧不为I帧。优选地,所述数个视频数据处理单元将I帧间隔数依次增加或减小一个从1逐渐增大的整数值,直至按该I帧间隔数处理后的视频数据的最后一帧不为I帧。本发明还提供一种分布式音视频文件处理方法,包括:输入处理步骤,通过输入处理单元接收源视频文件,对所述源视频文件进行处理获得视频数据和音频数据,并分别将所述视频数据和所述音频数据分别按顺序以GOP和GOA为单位分割成视频数据片段和音频数据片段后,并根据一定的分配规则将分割所得的视频数据片段和音频数据片段分配给相应的视频数据处理单元和音频数据处理单元进行处理;视频数据处理步骤,分别使用数个视频数据处理单元对经分割后的视频数据片段进行处理,使得在拼合经处理后的视频数据片段时不会出现连续I帧;音频数据处理步骤,分别使用数个音频数据处理单元对经分割后的音频数据片段进行处理;输出处理步骤,通过输出处理单元对经处理后的视频数据片段和音频数据片段进行分别拼合处理并输出;调度步骤,通过调度单元协调所述输入处理单元、所述数个视频数据处理单元、所述数个音频数据处理单元及输出处理单元的工作。优选地,在所述输入处理步骤,将所述视频数据和所述音频数据分别按顺序以GOP和GOA为单位分割成视频数据片段和音频数据片段;当在所述输入处理步骤中检测到所述视频数据存在连续I帧时,将连续I帧并到其相邻的视频数据片段中。优选地,在所述输入处理步骤,将所述连续I帧中的第一个连续I帧至所述连续I帧之后的下一个非连续I帧但不包括所述下一个非连续I帧之间的所有帧分割为一个视频数据片段。优选地,在所述输入处理步骤中,将所述连续I帧之前的上一个非连续I帧至所述连续I帧之后的下一个非连续I帧但不包括所述下一个非连续I帧之间的所有帧分割为一个视频数据片段。优选地,在所述视频数据处理步骤,通过调整I帧间隔数使得处理后的视频数据的最后一帧不为I帧。优选地,在所述视频数据处理步骤,将I帧间隔数依次增加或减小一个从1逐渐增大的整数值直至按该I帧间隔数处理后的视频数据的最后一帧不为I帧。附图说明:图1为本发明实施方式涉及的分布式处理系统的结构框图;图2为本发明实施方式涉及的分布式处理系统的输入处理模块的结构框图;图3为本发明实施方式涉及的输入处理模块中对视频帧序列进行GOP分割的示例图;图4为本发明实施方式涉及的分布式处理系统的输出处理模块的结构框图;图5为本发明实施方式涉及的分布式处理系统的中视频处理单元的处理流程图;图6为本发明实施方式涉及的分布式处理系统的处理步骤S817中的视频数据编码的处理流程图。具体实施方式:下面根据附图所示实施方式阐述本项发明。此次公开的实施方式可以认为在所有方面均为例示,不具限制性。本发明的范围不受上述实施方式的说明所限,仅由权利要求书的范围所示,而且包括与权利要求范围具有同样意思及权利要求范围内的所有变形。图1为分布式处理系统的结构框图。如图1所示,本实施方式的分布式系统包括调度模块(Dispatcher模块)1、输入处理单元2、数个视频处理单元3和4、数个音频处理单元5和6、输出处理单元7、监视模块(Watcher模块)8以及客户端模块(Client模块)9。其中,调度模块1用于协调整个系统的各部分的运行。输入处理单元2包括监控模块(Monitor模块)21、输入处理模块(Ingress模块)22和传输模块(Offer模块)23。优选地,上述监控模块21、输入处理模块22和传输模块23之间可以采用消息队列通信。上述视频处理单元3(4)包括监控模块(Monitor模块)31(41)、视频处理模块(VP模块)32(42)和传输模块(Offer模块)33(43)。优选地,上述监控模块31(41)、视频处理模块32(42)和传输模块33(43)之间可以采用消息队列通信。音频处理单元5(6)包括监控模块(Monitor模块)51(61)、音频处理模块(AP模块)52(62)和传输模块(Offer模块)53(63)。优选地,上述监控模块51(61)、音频处理模块52(62)和传输模块53(63)之间可以采用消息队列通信。输出处理单元7包括监控模块(Monitor模块)71、输出处理模块(Egress模块)72和传输模块(Offer模块)73。优选地,上述监控模块71、输出处理模块72和传输模块73之间可以采用消息队列通信。监视模块8与调度模块1共享内存并由此获得调度模块1中的所有信息。监视模块8将获取的信息发送给客户端模块9,由客户端模块9将其以图形界面显示给用户。上述调度模块1、上述输入处理单元2和上述监视模块(Watcher模块)8可以共用一台物理机器(服务器)。每一个视频处理单元3或4可以单独用一台物理机器(服务器),即:上述监控模块31、上述视频处理模块32和上述传输模块33可以共用一台物理机器(服务器),以及上述监控模块41、上述视频处理模块42和上述传输模块43可以共用一台物理机(服务器),其中每一台物理机器(服务器)可以每一次仅运行一个视频处理进程(VP进程);每一个音频处理单元5或6可以单独用一台物理机器(服务器),即:上述监控模块51、上述音频处理模块52和上述传输模块53可以共用一台物理机器(服务器),以及上述监控模块61、上述音频处理模块62和上述传输模块63共用一台物理机器(服务器),其中每一台物理机器(服务器)可以每一次仅运行一个音频处理进程(AP进程)。上述输出处理单元7可以单独用一台物理机器(服务器),即:上述监控模块71、上述输出处理模块72和上述传输模块73可以共用一台物理机器(服务器)。上述调度模块1分别与上述输入处理单元2中的监控模块21、各个视频处理单元(视频处理单元3和4)中的监控模块(监控模块31和41)、各个音频处理单元(音频处理单元5和6)中的监控模块(监控模块51和61)及上述输出处理单元7中的监控模块71进行通信连接,用于协调整个系统中的输入处理单元2、视频处理单元3和4、音频处理单元5和6和输出处理单元7等各部分的运行。上述输入处理单元2中的传输模块23分别与各个视频处理单元(视频处理单元3和4)中的传输模块(传输模块33和43)和各个音频处理单元(音频处理单元5和6)中的传输模块(监控模块53和63)进行通信连接,用于向各个视频处理单元(视频处理单元3和4)中的传输模块(传输模块33和43)和各个音频处理单元(音频处理单元5和6)中的传输模块(传输模块53和63)分别传输相应的信息和数据。上述输出处理单元7中的传输模块73分别与各个视频处理单元(视频处理单元3和4)中的传输模块(传输模块33和43)和各个音频处理单元(音频处理单元5和6)中的传输模块(传输模块53和63)进行通信连接,用于从各个视频处理单元(视频处理单元3和4)中的传输模块(传输模块33和43)和各个音频处理单元(音频处理单元5和6)中的传输模块(传输模块53和63)分别接受相应的信息和数据。图2为上述输入处理模块22的结构框图。如图2所示,上述输入处理模块22包括解封装模块221、输入数据处理模块222和数据存储模块223,其中上述解封装模块221对上述输入处理单元2所接受的源视频文件进行解封装,上述输入数据处理模块222对音/视频文件进行处理,上述数据存储模块223用于存储音/视频文件及相关信息。上述解封装模块221包括音/视频文件格式判断单元2211、解封装选择单元2212和数个解封装单元2213、2214、2215……。其中,上述数个解封装单元(2213、2214、2215……)具有不同的格式,并且上述解封装选择单元2212可以根据上述音/视频文件格式判断单元2211的判断结果从上述数个解封装单元中选择相应的解封装单元对上述源视频文件进行解封装,从而使得上述解封装模块221可以对应于不同的文件格式进行解封装。输入数据处理模块222具有分割模块2221和分配模块2222。分割模块2221可以将解封装后的视频文件以GOP为单位分割成多个视频数据片段(GOP文件),将解封装后的音频文件按一定的时长分割成多个音频数据片段(GOA文件)。分割后的多个音频数据片段和多个视频数据片段被分别赋予一个各自的顺序号,分配模块2222通过对分割后的片段的序号分别按照音频处理单元和视频处理单元的数量取模,以此确定每个音频数据片段和视频数据片段对应的音频处理单元和视频处理单元。上述输入处理模块22能够获取所述源视频文件的封装格式信息,并将上述信息通过上述传输模块23、33、43、53、63发送给上述输出处理单元7。上述输入处理模块22的所述分割模块2221在分割所述视频帧序列时,使得分割后的GOP文件可能包括不只由一个I帧组成的GOP文件。例如,如果当前的帧是一个I帧,而在该I帧之后的帧为其它类型的帧(比如P帧和B帧)(即非连续I帧),则将从该I帧起(包括该I帧)至下一个I帧为止(不包括下一个I帧)之间的所有帧分割为一个GOP文件;如果当前的帧是一个I帧,而在该I帧之后的帧也是I帧(即该I帧和该I帧之后的I帧均为连续I帧),则所述分割模块2221直至找到一个在其之后的帧不是I帧(比如P帧和B帧)的I帧(即下一个非连续I帧),并将该I帧(包括该I帧)至下一个非连续I帧(不包括该非连续I帧)之间的所有帧分割为一个GOP文件,或者将上一个非连续I帧(包括上一个非连续I帧)至下一个非连续I帧(不包括下一个非连续I帧)之间所有帧分割为一个GOP文件。如图3所示,一段视频帧序列,上述分割模块2221把第一个I帧和它后面的P帧和B帧(下一个I帧之前的P帧、B帧)分割成一个GOP文件;由于第二和第三个I帧后面都没有P帧和B帧,因此上述输入分割模块2221把上述两个I帧和第四个I帧及其之后面的P帧、B帧分割成一个GOP文件。在图3中,最后一个I帧之后已经没有其它帧了,因此,在此种情况下,将此单I帧分割为一个GOP文件。图4为上述输出处理模块72的结构框图。如图4所示,上述输出处理模块72包括封装模块721、输出数据处理模块722和存储模块723。其中,上述存储模块723存储经过上述视频处理单元3和4及上述音频处理单元5和6处理后的音频文件和视频文件,上述输出数据处理模块722对经过上述视频处理单元3和4及上述音频处理单元5和6处理后的音频文件和视频文件进行处理,并将经上述输出数据处理模块722处理后的音频文件和视频文件输送至上述封装模块721。上述封装模块721包括封装格式选择单元7211和数个具有不同的封装格式的封装单元7212、7213、7214……,其中上述封装格式选择单元7211根据上述传输模块73所接收到的封装格式信息从数个封装单元(7212、7213、7214……)中选择相应的封装单元进行封装,从而可以使得上述封装模块721对应于不同的封装格式的要求进行封装。图5为上述视频处理单元3和上述视频处理单元4的视频文件处理流程图。在本实施方式中,视频处理单元3和视频处理单元4的视频文件处理流程相同,因此仅就视频处理单元3介绍视频文件处理流程。如图5所示,上述视频处理单元3的视频处理模块32将视频文件处理进程的启动时间和收到的视频文件的ID信息(例如收到了以下文件:F01-1.gop,F01-3.gop,F01-5.gop等和F02-1.gop,F02-3.gop等)发送给上述监控模块31(步骤S811)。上述监控模块31可以将上述启动时间和视频文件的ID信息反馈到上述调度模块1,使得系统能够监控上述视频处理单元3的处理进程状况。上述视频处理模块32在指定目录读取系统配置文件(tvmccd.cfg),获取上述视频处理单元3的处理进程的<Source>(源项)、<Output>(输出项)和<Send>(发送项)等配置项(步骤S812),并在<Source>项目录读取相关信息(info文件)和视频文件(gop文件)(步骤S813)。如果<Source>项目录下有total文件,则上述视频处理模块32将上述total文件移送至<Send>项目录。然后,上述视频处理模块32根据监控模块31所接收到的视频编码格式信息选择相应的解码器对上述视频文件进行解码(步骤S814)。如果解码成功(步骤S815:是),上述视频处理模块32对上述经解码后的视频数据进行预定处理(步骤S816)。上述预定处理可以是视频帧率定制调节、向视频中添加滚屏信息、不同音/视频文件的合并等。上述视频处理模块32根据监控模块31从调度模块1收到的处理后的文件的参数要求将经过处理后的视频数据进行编码,获取经处理后的视频文件(gop文件),并将正在输出的视频文件(gop文件)写到<Output>项目录,在写磁盘结束并校验无误后将该文件移送到<Send>项目录,由上述传输模块33输送至上述输出处理单元7(步骤S817)。在现有的单机系统中,编码由同一个编码器完成,编码器会按照设定的I帧间隔对视频进行编码,获得的编码后的帧序列中始终是一个I帧之后跟着多个B帧或P帧的结构重复出现,其I帧间隔是固定的,不会出现两个连续I帧。而在分布式系统中,视频的多个部分由多个编码器(视频处理模块32)进行编码,因此有可能出现编码后的第一部分的最后一帧为I帧的情况,这样将第一部分与开头为I帧的第二部分拼合后就会出现连续I帧的情况。图6为上述步骤S817中对视频数据进行编码时规避连续I帧的处理流程图。如图6所示,上述视频处理模块32首先获取处理后的视频数据中包含的视频帧数n、编码设置的I帧间隔m(步骤S8171),再计算以当前的I帧间隔m进行编码后最后一帧是否为I帧(步骤S8172),计算的方法可以是将n用m取模,判断余数是否为1,如果余数为1的话,说明以当前的I帧间隔m进行编码后最后一帧是I帧;如果余数不为1的话,说明以当前的I帧间隔m进行编码后最后一帧不是I帧。如果以当前的I帧间隔m进行编码后最后一帧为I帧,则调整I帧的间隔m(步骤S8173)。一般情况下调整后的I帧间隔与原值相差不应太大,可依次取m=m-1、m=m+1、m=m-2、m=m+2等,直到满足以当前的I帧间隔m进行编码后最后一帧不为I帧。具体来说,视频处理模块32中预设了调整m值的选择顺序表,其中按优先顺序记录了m的可调整值,例如m=m-1、m=m+1、m=m-2、m=m+2分别对应优先顺序1至4。视频处理模块32中还有一个记录m值调整次数a的计数器。a的初始值为0,m值每被调整一次,a的值加1,直至m值满足要求(步骤S8174)。如果以当前的I帧间隔m进行编码后最后一帧不为I帧,上述视频处理模块32根据计数器中a的值和选择顺序表确定调整后的m值,以当前的I帧间隔m对所述视频数据进行编码(步骤S8175)。返回图5如果解码出错(步骤S815:否),并且该视频文件的解码次数n没有超过预定阈值a(步骤S818:否),则将上述解码次数n加1(步骤S819)并返回到步骤S814进行重新解码,如果该视频文件的解码次数n超过预定阈值a(步骤S818:是),则将解码出错的视频文件的ID信息发送给监控模块31(步骤S8110)。上述监控模块31将解码出错的视频文件的ID信息反馈给上述调度模块1,上述调度模块1可以选择让输入处理单元2向上述视频处理单元3再次发送该出错的视频文件,或让输入处理单元2将该出错的视频文件重新加入未被上述输入处理单元2的传输模块23发送的剩余视频文件中并进行重新编序号,再根据上述一定的分配规则将该出错的视频文件分配给相应的视频处理单元进行处理。此外,调度模块1也可以选择直接忽略该解码错误,并将错误信息输出给用户。在本实施方式中,在输入数据处理模块的处理中,两个各自仅包括一个非连续I帧的视频数据片断被分割在不同的GOP文件中,但不限于此,也可以将多个各自仅包括一个非连续I帧的视频数据片断分割在同一个GOP文件中。此时,分割原则仍然是分割后的GOP文件中的最后一帧不会是一个I帧(每个视频序列的最后一个GOP文件除外,即每个视频序列的最后一个GOP文件的最后一帧可以是一个I帧)。在本实施方式中,在视频处理模块的处理中,I帧间隔m的调整值依次取m=m-1、m=m+1、m=m-2、m=m+2等,但不限于此,也可以依次取m=m+1、m=m-1、m=m+2、m=m-2等。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1