发明内容
针对相关技术的多媒体流中的音频数据包在传输过程中因丢包而产生噪音的问题,本发明提供了一种多媒体流的传输方法及装置,以至少解决上述问题。
根据本发明的一个方面,提供了一种多媒体流的传输方法。
根据本发明的多媒体流的传输方法包括:检测一个多媒体流的多个帧中是否存在一个或多个音频数据包丢失;当检测到存在一个或多个音频数据包丢失时,确定多媒体流中需要填充无效数据的位置;在需要填充无效数据的位置中填充无效数据,并将填充后的多媒体流进行传输。
在上述方法中,检测一个多媒体流的多个帧中是否存在一个或多个音频数据包丢失包括:根据多媒体流中全部音频数据包中的字段确定是否存在不连续的音频数据包;如果存在,则确定存在一个或多个音频数据包丢失。
在上述方法中,一个或多个音频数据包所在的位置为以下至少之一:帧头部分、帧体部分。
在上述方法中,当一个或多个音频数据包所在的位置为帧体部分时,确定多媒体流中需要填充无效数据的位置包括:查找一个或多个音频数据包所在的帧的第一帧头所在的位置;查找一个或多个音频数据包所在的帧的下一帧的第二帧头所在的位置;确定需要填充无效数据的位置为第一帧头与第二帧头之间的位置。
在上述方法中,当一个或多个音频数据包所在的位置为帧头部分时,在一个或多个音频数据包对应的位置填充无效数据,包括:查找一个或多个音频数据包所在的帧的上一帧的第三帧头所在的位置;查找一个或多个音频数据包所对应的帧的下一帧的第四帧头所在的位置;确定需要填充无效数据的位置为第三帧头与第四帧头之间的位置。
在上述方法中,在将填充后的多媒体流进行传输之后,还包括:解码器接收填充后的多媒体流并执行解码操作。
根据本发明的另一方面,提供了一种多媒体流的传输装置。
根据本发明的多媒体流的传输装置包括:检测模块,用于检测一个多媒体流的多个帧中是否存在一个或多个音频数据包丢失;确定模块,用于在检测模块输出为否的情况下,确定多媒体流中需要填充无效数据的位置;填充模块,用于在需要填充无效数据的位置中填充无效数据;传输模块,用于将填充后的多媒体流进行传输。
在上述装置中,上述检测模块包括:第一确定单元,用于根据多媒体流中全部音频数据包中的字段确定是否存在不连续的音频数据包。
在上述装置中,一个或多个音频数据包所在的位置为以下至少之一:帧头部分、帧体部分。
在上述装置中,上述确定模块包括:第一查找单元,用于查找一个或多个音频数据包所在的帧的第一帧头所在的位置;第二查找单元,用于查找一个或多个音频数据包所在的帧的下一帧的第二帧头所在的位置;第二确定单元,确定需要填充无效数据的位置为第一帧头与第二帧头之间的位置。
在上述装置中,上述确定模块包括:第三查找单元,用于查找一个或多个音频数据包所在的帧的上一帧的第三帧头所在的位置;第四查找单元,用于查找一个或多个音频数据包所在的帧的下一帧的第四帧头所在的位置;第三确定单元,用于确定需要填充无效数据的位置为第三帧头与第四帧头之间的位置。
通过本发明,当检测到多媒体数据流中存在一个或多个音频数据包丢失时,确定该多媒体流中需要填充无效数据的位置并进行无效数据的填充,解决了相关技术的多媒体流中的音频数据包在传输过程中因丢包而产生噪音的问题,进而达到了易实现、成本低、用户体验友好的效果。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
图1是根据本发明实施例的多媒体流的传输方法的流程图。如图1所示,该方法主要包括以下处理:
步骤S102:检测一个多媒体流的多个帧中是否存在一个或多个音频数据包丢失;
步骤S104:当检测到存在一个或多个音频数据包丢失时,确定多媒体流中需要填充无效数据的位置;
步骤S106:在需要填充无效数据的位置中填充无效数据,并将填充后的多媒体流进行传输。
在相关技术中,多媒体流在传输过程中因丢失音频数据包易产生噪音。采用如图2所示的方法,检测多媒体流中的各个帧是否存在一个或多个音频数据包丢失,并确定多媒体流中需要填充无效数据的位置,在解码之前进行无效数据填充处理。经过处理后的数据,即使是不连续的数据,也不会因丢失音频数据包而发出噪音,解决了相关技术的多媒体流中的音频数据包在传输过程中因丢包而产生噪音的问题,进而实现了处理方法简单,易于实现,投入少,为用户带来更好的体验的效果。
优选地,在执行步骤S102时,可以包括:根据多媒体流中全部音频数据包中的字段确定是否存在不连续的音频数据包;如果存在,则确定存在一个或多个音频数据包丢失。
在优选实施过程中,多媒体数据有多种打包格式,如:传输流(TS流)、MKV、AVI等,每个打包格式都可以判断出其数据是否有丢失。以TS流为例,可以利用其continuity_counter字段来判断是否有数据丢失。continuity_counter字段是一个4bit的字段,相同PID的TS包的此字段是连续递增的,递增到15后又恢复到0。当判断出有continuity_counter字段不连续时,即确定多媒体流中的帧存在一个或多个音频数据包丢失。
优选地,在执行步骤S104时,一个或多个音频数据包所在的位置可以但不限于为以下至少之一:帧头部分、帧体部分。
优选地,当一个或多个音频数据包所在的位置为帧体部分时,步骤S104可以进一步包括以下处理:
(1)查找一个或多个音频数据包所在的帧的第一帧头所在的位置;
(2)查找一个或多个音频数据包所在的帧的下一帧的第二帧头所在的位置;
(3)确定需要填充无效数据的位置为第一帧头与第二帧头之间的位置。
例如,如图2所示,白色表示正常的音频数据包;竖线阴影表示丢失的音频数据包;网格状阴影表示需要填充无效数据的音频数据包(丢失的音频数据包也需要填充无效数据);斜线阴影表示其他类型的数据包,如:视频数据包等。A帧包含在序号是1、2、3三个TS包中,B帧包含在3、4、5三个TS包中,C帧包含在5、6、7三个TS包中。在图2中,4号TS包丢失,如果4号TS包所在的帧不清理掉,那么在对该帧进行解码时就有可能产生未知的影响,释放噪音就是其中一种较为明显表现。因此,需要采取如下处理方式:向前查找4号TS包所在的帧(B帧)的帧头(D2)和4号TS包所在的帧的下一帧(C帧)的帧头(D3);确定在D2与D3之间的3号TS包的尾部、5号TS包的头部以及4号TS包均需要填充等量的无效数据,同时还需要对4号TS包所在的帧的描述信息(例如,PES语法元素)进行修改。
优选地,当一个或多个音频数据包所在的位置为帧头部分时,步骤S104可以进一步包括以下处理:
(1)查找所述一个或多个音频数据包所在的帧的上一帧的第三帧头所在的位置;
(2)查找所述一个或多个音频数据包所对应的帧的下一帧的第四帧头所在的位置;
(3)确定所述需要填充无效数据的位置为所述第三帧头与所述第四帧头之间的位置。
例如,如图3所示,图中各部分所代表的含义以及TS包与帧的对应关系可以参见图2,此处不再赘述。在图3中,3号TS包丢失,如果3号TS包所在的帧不清理掉,那么在对该帧进行解码时就有可能产生未知的影响,释放噪音就是其中一种较为明显表现。因此,需要采取如下处理方式:向前查找3号TS包所在的帧的上一帧(A帧)的帧头(D1)和3号TS包所在的帧的下一帧(C帧)的帧头(D2);确定在D1与D2之间的2号TS包、4号TS包、1号TS包的尾部、5号TS包的头部以及3号TS包均需要填充等量的无效数据,同时还需要对3号TS包所在的帧(B帧)以及3号TS包所在的帧的上一帧(A帧)的描述信息(例如,PES语法元素)进行修改。
优选地,在执行步骤S106之后,还可以包括以下处理:解码器接收填充后的多媒体流并执行解码操作。
需要说明的是,本发明的多媒体流的传输方法适用于采用传输流封装的多媒体流,同样适用于其他封装格式的多媒体流,下面以传输流(TS流)为例对上述优选实施方式做进一步的描述。
图4是根据本发明优选实施例的多媒体流的传输方法的流程图。如图4所示,该方法可以包括以下处理步骤:
步骤S402:根据音频的PID,获取一个音频TS包的continuity_counter字段的值以及该音频TS包的下一个音频TS包的continuity_counter字段的值;若两个TS包的continuity_counter字段值不连续,即后一个TS包的continuity_counter字段的值不是在前一个的基础上加1,则说明有丢包发生;若两个TS包的continuity_counter字段值是连续的,即后一个TS包的continuity_counter字段的值是在前一个的基础上加1,则说明没有丢包发生,则转到步骤S408;
步骤S404:确定需要填充无效数据的TS包。当两个TS包的continuity_counter字段值不连续时,需要确定丢失的TS包是位于所在帧的帧头还是帧体,或者丢失的TS包既位于所在帧的帧头又位于所在帧的帧体。
步骤S406:当丢失的TS包位于所在帧的帧体时,则可以按照上述图2中的处理方式进行处理,此处不再赘述;当丢失的TS包位于所在的帧的帧头时,则可以按照上述图3中的处理方式进行处理,此处也不再赘述;
需要说明的是,当发生多个TS包丢失的情况下,多个TS包可能分别位于各自所在的帧的帧头或者帧体,也可能同时位于所在帧的帧头和帧体,关于前两种情况上面已有描述,此处仅针对多个丢失TS包同时位于所在帧的帧头和帧体的情况进行说明,在此种情况下,由于该帧的帧头已经丢失,因此,需要按照上述图3所描述的处理方式进行无效填充处理。
步骤S408:将TS流传输至解码器。解码器负责根据音频类型和相应的参数来将压缩数据解成PCM数据并输出。
图5是根据本发明实施例的多媒体流的传输装置的结构框图。如图5所示,该多媒体流的传输装置主要包括:检测模块500,用于检测一个多媒体流的多个帧中是否存在一个或多个音频数据包丢失;确定模块502,用于在检测模块输出为否的情况下,确定多媒体流中需要填充无效数据的位置;填充模块504,用于在需要填充无效数据的位置中填充无效数据;传输模块506,用于将填充后的多媒体流进行传输。
在相关技术中,多媒体流在传输过程中因丢失音频数据包易产生噪音。采用如图5所示的装置,检测模块500对多媒体流中的各个帧是否存在一个或多个音频数据包丢失进行检测;确定模块502,在检测模块500发现存在一个或多个音频数据包丢失时,确定多媒体流中需要填充无效数据的位置;填充模块504按照确定模块502确定需要填充无效数据的位置后,在相应的位置中填充无效数据;传输模块506将填充后的多媒体流进行传输。
由此,解决了相关技术的多媒体流中的音频数据包在传输过程中因丢包而产生噪音的问题,进而实现了处理方法简单,易于实现,投入少,为用户带来更好的体验的效果。
优选地,上述检测模块500可以进一步包括:第一确定单元(图中未示出),用于根据多媒体流中全部音频数据包中的字段确定是否存在不连续的音频数据包。
优选地,上述一个或多个音频数据包所在的位置可以为以下至少之一:帧头部分、帧体部分。
优选地,如图6所示,针对一个或多个音频数据包所在的位置为帧体部分而言,上述确定模块502可以进一步包括:第一查找单元5020,用于查找一个或多个音频数据包所在的帧的第一帧头所在的位置;第二查找单元5022,用于查找一个或多个音频数据包所在的帧的下一帧的第二帧头所在的位置;第二确定单元5024,确定需要填充无效数据的位置为第一帧头与第二帧头之间的位置。
优选地,如图7所示,针对一个或多个音频数据包所在的位置为帧头部分而言,上述确定模块502可以进一步包括:第三查找单元5026,用于查找一个或多个音频数据包所在的帧的上一帧的第三帧头所在的位置;第四查找单元5028,用于查找一个或多个音频数据包所在的帧的下一帧的第四帧头所在的位置;第三确定单元5030,用于确定需要填充无效数据的位置为第三帧头与第四帧头之间的位置。
从以上的描述中,可以看出,本发明实现了如下技术效果:易实现、成本低、用户体验友好的效果。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。