CN104079949B - 面向多屏的场景自适应的数据封装方法和装置及系统 - Google Patents
面向多屏的场景自适应的数据封装方法和装置及系统 Download PDFInfo
- Publication number
- CN104079949B CN104079949B CN201410302179.6A CN201410302179A CN104079949B CN 104079949 B CN104079949 B CN 104079949B CN 201410302179 A CN201410302179 A CN 201410302179A CN 104079949 B CN104079949 B CN 104079949B
- Authority
- CN
- China
- Prior art keywords
- data
- parameter
- video
- client
- encapsulation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种面向多屏的场景自适应的数据封装方法和装置及系统。其中,数据封装方法包括:检测客户端的属性信息,所述属性信息用于反映所述客户端对多媒体数据封装的解析能力,所述多媒体数据包括音频数据和/或视频数据;由所述属性信息确定所述客户端对应的封装参数;根据所述封装参数对所述多媒体数据进行封装;以及将封装后的数据输出至所述客户端。通过本发明,解决了无法针对不同的客户端进行数据封装的问题,达到了针对不同的客户端的解析能力对多媒体数据进行封装减少数据封装引起的额外开销的效果。
Description
技术领域
本发明涉及数据封装领域,具体而言,涉及一种面向多屏的场景自适应的数据封装方法和装置及系统。
背景技术
随着移动终端的发展,播放终端的多样化趋势已不可避免。而不同播放终端允许接收的音视频数据的封装格式也有所差异,如:PC上Flash播放器可以接收RTMP格式和HDS格式,iOS以及Android高于4.0版本的手机和平板可以接收HTTP Live Streaming(HLS)格式,Android低于4.0版本的手机和平板可以接收RTP格式。这些数据封装类型均有与之对应的标准协议描述。数据的封装和解封装,指的是数据从编码端传递到播放端时,需要经过多个协议层,在编码端,从最高层的应用层到最底层的物理层,每一层中又包含一个或多个协议层,数据每向下经过一个协议层时,均要在数据之上添加对应的头或尾作为协议的控制信息,然后传递给下一层协议层,称之为数据的封装,而在解码端,每向上通过一个协议层,则将协议的控制信息剥离,再把剩下的数据向上传递给上一层协议,称之为数据的解封装。这里提到的数据封装,特指在应用层中包含的协议层的数据封装,而不涉及传输层TCP/UDP、网络层、数据链路层和物理层的数据封装。上述提到的不同播放终端支持的数据封装,其应用层包含一个或多个协议。同时这些协议中所描述的数据封装方法,通常仅是规定了数据封装中控制信息的格式,但对具体如何拆分视频、音频信息,特别是不同帧的信息如何组织,并未具体规定。
发明人发现,为提高传输效率,可以针对不同场景给出不同的封装优化方案,但是场景是易变的,目前还没有封装方案可以适应所有的场景及所有的播放终端。无法针对不同的客户端进行数据封装。同时场景还可能会在传输过程中实时变化,即时开始预设正确了场景,也无法保证整个过程保持正确。因此目前常见的封装方案为追求对客户端的广泛适用,对不同客户端采用了同样的封装方案。这样,客户端无法根据自身的解封装能力进行数据的解封装导致增加客户端解封转的开销。
针对现有技术中无法针对不同的客户端进行数据封装的问题,目前尚未提出有效的解决方案。
发明内容
本发明的主要目的在于提供一种面向多屏的场景自适应的数据封装方法和装置及系统,以解决无法针对不同的客户端进行数据封装的问题。
为了实现上述目的,根据本发明的一个方面,提供了一种面向多屏的场景自适应的数据封装方法。根据本发明的数据封装方法包括:检测客户端的属性信息,所述属性信息用于反映所述客户端对多媒体数据封装的解析能力,所述多媒体数据包括音频数据和/或视频数据;由所述属性信息确定所述客户端对应的封装参数,所述封装参数包括以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,其中,所述第一参数用于反映所述客户端是否支持音视频交织,所述第二参数用于反映所述客户端是否支持动态码率,所述第三参数用于反映所述客户端是否支持音频数据截断,所述第四参数用于反映所述客户端是否支持视频数据截断,所述第五参数用于反映所述客户端是否支持音频帧聚合,所述第六参数用于反映所述客户端是否支持视频帧聚合;根据所述封装参数对所述多媒体数据进行封装;以及将封装后的数据输出至所述客户端。
进一步地,在根据所述封装参数对所述多媒体数据进行封装之前,所述数据封装方法还包括:获取对所述多媒体数据进行编码后的数据;通过预先建立的缓存队列对所述编码后的数据进行缓存,根据所述封装参数对所述多媒体数据进行封装包括:根据所述封装参数对所述缓存队列中缓存的数据进行封装。
进一步地,所述缓存队列包括音频缓存队列和视频缓存队列,根据所述封装参数对所述多媒体数据进行封装包括:由所述第一参数判断所述客户端是否支持音视频交织;如果判断出所述客户端不支持音视频交织,则将所述音频数据缓存至所述音频缓存队列,将所述视频数据缓存至所述视频缓存队列;比较所述音频缓存队列的队列头部的数据帧的时间戳与所述视频缓存队列的队列头部的数据帧的时间戳;以及获取所述音频缓存队列和所述视频缓存队列中时间戳较小的数据帧进行封装。
进一步地,所述属性信息包括所述客户端的操作系统和所述操作系统对应的版本号,检测客户端的属性信息包括:检测所述客户端的操作系统和所述操作系统对应的版本号,由所述属性信息确定所述客户端对应的封装参数包括:如果检测出所述操作系统为iOS系统且所述iOS系统的版本号为iOS3.0及iOS3.0以上版本,则确定所述客户端不支持音视频交织、支持动态码率、支持音频数据截断、支持视频数据截断、支持音频帧聚合以及支持视频帧聚合;如果检测出所述操作系统为Android系统且所述Android系统的版本号为Android4.0及Android4.0以上版本,则确定所述客户端不支持音视频交织、支持动态码率、支持音频数据截断、支持视频数据截断、支持音频帧聚合以及支持视频帧聚合;以及如果检测出所述操作系统为Android系统且所述Android系统的版本号低于Android4.0,则确定所述客户端支持音视频交织、不支持动态码率、不支持音频数据截断、不支持视频数据截断、不支持音频帧聚合以及不支持视频帧聚合。
进一步地,根据所述封装参数对所述多媒体数据进行封装包括:由所述第五参数判断所述客户端是否支持音频帧聚合;如果判断出所述客户端支持音频帧聚合,则获取所述音频数据中按顺序排列的多个音频帧;获取所述多个音频帧中第一个音频帧的数据包头信息;以所述第一个音频帧的数据包头信息作为音频帧集合的数据包头信息对所述多个音频帧进行聚合,得到所述音频帧集合;以及对所述音频帧集合进行封装,和/或,根据所述封装参数对所述多媒体数据进行封装包括:由所述第六参数判断所述客户端是否支持视频帧聚合;如果判断出所述客户端支持视频帧聚合,则获取所述视频数据中按顺序排列的多个视频帧;获取所述多个视频帧中第一个视频帧的数据包头信息;以所述第一个视频帧的数据包头信息作为视频帧集合的数据包头信息对所述多个视频帧进行聚合,得到所述视频帧集合;以及对所述视频帧集合进行封装。
进一步地,对所述多个音频帧进行聚合,得到音频帧集合包括:判断所述客户端接收的封装后的数据包的数据长度是否为固定数据长度;如果判断出所述客户端接收的封装后的数据包的数据长度为所述固定数据长度,则确定所述客户端接收的封装后的数据包的固定负荷和所述数据包的封包包头数据长度;确定用于进行聚合的音频帧的个数k,所述个数k满足以下公式
其中,z为预设的比例值,Truncate((S(k)+SH+L-1)/L)表示(S(k)+SH+L-1)/L的整数部分的数值,S(k)表示所述固定数据长度,L表示所述固定负荷,SH表示所述封包包头数据长度;以及选取k个音频帧进行音频帧聚合,得到所述音频帧集合。
进一步地,根据所述封装参数对所述多媒体数据进行封装包括:由所述第三参数判断所述客户端是否支持音频数据截断;如果判断出所述客户端支持音频数据截断,则确定所述音频帧集合的数据截断位置;基于所述音频帧集合的数据截止位置将所述音频帧集合截断成第一数据块和第二数据块;以所述第一数据块中第一个字节所属的音频帧的包头信息作为所述第一数据块的包头信息对所述第一数据块进行封装;以及以所述第二数据块中第一个字节所属的音频帧的包头信息作为所述第二数据块的包头信息对所述第二数据块进行封装,和/或,根据所述封装参数对所述多媒体数据进行封装包括:由所述第四参数判断所述客户端是否支持视频数据截断;如果判断出所述客户端支持视频数据截断,则确定所述视频帧集合的数据截断位置;基于所述视频帧集合的数据截止位置将所述视频帧集合截断成第三数据块和第四数据块;以所述第三数据块中第一个字节所属的视频帧的包头信息作为所述第三数据块的包头信息对所述第三数据块进行封装;以及以所述第四数据块中第一个字节所属的视频帧的包头信息作为所述第四数据块的包头信息对所述第四数据块进行封装。
进一步地,根据所述封装参数对所述多媒体数据进行封装包括:由所述第三参数判断所述客户端是否支持音频数据截断;如果判断出所述客户端支持音频数据截断,则确定所述音频数据中音频帧的数据截断位置;基于所述音频帧的数据截止位置将所述音频帧截断成第五数据块和第六数据块;以所述音频帧的包头信息作为所述第五数据块的包头信息对所述第五数据块进行封装;以及以所述音频帧的包头信息作为所述第六数据块的包头信息对所述第六数据块进行封装,和/或,根据所述封装参数对所述多媒体数据进行封装包括:由所述第四参数判断所述客户端是否支持视频数据截断;如果判断出所述客户端支持视频数据截断,则确定所述视频数据中视频帧的数据截断位置;基于所述视频帧的数据截止位置将所述视频帧截断成第七数据块和第八数据块;以所述视频帧的包头信息作为所述第七数据块的包头信息对所述第七数据块进行封装;以及以所述视频帧的包头信息作为所述第八数据块的包头信息对所述第八数据块进行封装。
为了实现上述目的,根据本发明的另一方面,提供了一种面向多屏的场景自适应的数据封装装置。根据本发明的数据封装装置包括:检测单元,用于检测客户端的属性信息,所述属性信息用于反映所述客户端对多媒体数据封装的解析能力,所述多媒体数据包括音频数据和/或视频数据;确定单元,用于由所述属性信息确定所述客户端对应的封装参数,所述封装参数包括以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,其中,所述第一参数用于反映所述客户端是否支持音视频交织,所述第二参数用于反映所述客户端是否支持动态码率,所述第三参数用于反映所述客户端是否支持音频数据截断,所述第四参数用于反映所述客户端是否支持视频数据截断,所述第五参数用于反映所述客户端是否支持音频帧聚合,所述第六参数用于反映所述客户端是否支持视频帧聚合;封装单元,用于根据所述封装参数对所述多媒体数据进行封装;以及输出单元,用于将封装后的数据输出至所述客户端。
进一步地,所述数据封装装置还包括:获取单元,用于在根据所述封装参数对所述多媒体数据进行封装之前,获取对所述多媒体数据进行编码后的数据;缓存单元,用于通过预先建立的缓存队列对所述编码后的数据进行缓存,所述封装单元还用于根据所述封装参数对所述缓存队列中缓存的数据进行封装。
进一步地,所述缓存队列包括音频缓存队列和视频缓存队列,所述封装单元包括:第一判断模块,用于由所述第一参数判断所述客户端是否支持音视频交织;缓存模块,用于当判断出所述客户端不支持音视频交织时,将所述音频数据缓存至所述音频缓存队列,将所述视频数据缓存至所述视频缓存队列;比较模块,用于比较所述音频缓存队列的队列头部的数据帧的时间戳与所述视频缓存队列的队列头部的数据帧的时间戳;以及第一封装模块,用于获取所述音频缓存队列和所述视频缓存队列中时间戳较小的数据帧进行封装。
进一步地,所述属性信息包括所述客户端的操作系统和所述操作系统对应的版本号,所述检测单元包括:检测模块,用于检测所述客户端的操作系统和所述操作系统对应的版本号,所述确定单元包括:第一确定模块,用于当检测出所述操作系统为iOS系统且所述iOS系统的版本号为iOS3.0及iOS3.0以上版本时,确定所述客户端不支持音视频交织、支持动态码率、支持音频数据截断、支持视频数据截断、支持音频帧聚合以及支持视频帧聚合;第二确定模块,用于当检测出所述操作系统为Android系统且所述Android系统的版本号为Android4.0及Android4.0以上版本时,确定所述客户端不支持音视频交织、支持动态码率、支持音频数据截断、支持视频数据截断、支持音频帧聚合以及支持视频帧聚合;以及第三确定模块,用于当检测出所述操作系统为Android系统且所述Android系统的版本号低于Android4.0时,确定所述客户端支持音视频交织、不支持动态码率、不支持音频数据截断、不支持视频数据截断、不支持音频帧聚合以及不支持视频帧聚合。
进一步地,所述封装单元包括:第二判断模块,用于由所述第五参数判断所述客户端是否支持音频帧聚合;第一获取模块,用于当判断出所述客户端支持音频帧聚合时,获取所述音频数据中按顺序排列的多个音频帧;第二获取模块,用于获取所述多个音频帧中第一个音频帧的数据包头信息;第一聚合模块,用于以所述第一个音频帧的数据包头信息作为音频帧集合的数据包头信息对所述多个音频帧进行聚合,得到音频帧集合;以及第二封装模块,用于对所述音频帧集合进行封装,和/或,所述封装单元包括:第三判断模块,用于由所述第六参数判断所述客户端是否支持视频帧聚合;第三获取模块,用于当判断出所述客户端支持视频帧聚合时,获取所述视频数据中按顺序排列的多个视频帧;第四获取模块,用于获取所述多个视频帧中第一个视频帧的数据包头信息;第二聚合模块,用于以所述第一个视频帧的数据包头信息作为视频帧集合的数据包头信息对所述多个视频帧进行聚合,得到所述视频帧集合;以及第三封装模块,用于对所述视频帧集合进行封装。
进一步地,所述第一聚合模块包括:判断子模块,用于判断所述客户端接收的封装后的数据包的数据长度是否为固定数据长度;第一确定子模块,用于当判断出所述客户端接收的封装后的数据包的数据长度为所述固定数据长度时,确定所述客户端接收的封装后的数据包的固定负荷和所述数据包的封包包头数据长度;第二确定子模块,用于确定用于进行聚合的音频帧的个数k,所述个数k满足以下公式
其中,z为预设的比例值,Truncate((S(k)+SH+L-1)/L)表示(S(k)+SH+L-1)/L的整数部分的数值,S(k)表示所述固定数据长度,L表示所述固定负荷,SH表示所述封包包头数据长度;以及选取模块,用于选取k个音频帧进行音频帧聚合,得到所述音频帧集合。
进一步地,所述封装单元还包括:第四判断模块,用于由所述第三参数判断所述客户端是否支持音频数据截断;第四确定模块,用于当判断出所述客户端支持音频数据截断时,确定所述音频帧集合的数据截断位置;第一截断模块,用于基于所述音频帧集合的数据截止位置将所述音频帧集合截断成第一数据块和第二数据块;第四封装模块,用于以所述第一数据块中第一个字节所属的音频帧的包头信息作为所述第一数据块的包头信息对所述第一数据块进行封装,并以所述第二数据块中第一个字节所属的音频帧的包头信息作为所述第二数据块的包头信息对所述第二数据块进行封装,和/或,所述封装单元还包括:第五判断模块,用于由所述第四参数判断所述客户端是否支持视频数据截断;第五确定模块,用于当判断出所述客户端支持视频数据截断时,确定所述视频帧集合的数据截断位置;第二截断模块,用于基于所述视频帧集合的数据截止位置将所述视频帧集合截断成第三数据块和第四数据块;第五封装模块,用于以所述第三数据块中第一个字节所属的视频帧的包头信息作为所述第三数据块的包头信息对所述第三数据块进行封装,并以所述第四数据块中第一个字节所属的视频帧的包头信息作为所述第四数据块的包头信息对所述第四数据块进行封装。
进一步地,所述封装单元包括:第六判断模块,用于由所述第三参数判断所述客户端是否支持音频数据截断;第六确定模块,用于当判断出所述客户端支持音频数据截断时,确定所述音频数据中音频帧的数据截断位置;第三截断模块,用于基于所述音频帧的数据截止位置将所述音频帧截断成第五数据块和第六数据块;第六封装模块,用于以所述音频帧的包头信息作为所述第五数据块的包头信息对所述第五数据块进行封装,并以所述音频帧的包头信息作为所述第六数据块的包头信息对所述第六数据块进行封装,和/或,所述封装单元包括:第七判断模块,用于由所述第四参数判断所述客户端是否支持视频数据截断;第七确定模块,用于当判断出所述客户端支持视频数据截断时,确定所述视频数据中视频帧的数据截断位置;第四截断模块,用于基于所述视频帧的数据截止位置将所述视频帧截断成第七数据块和第八数据块;第七封装模块,用于以所述视频帧的包头信息作为所述第七数据块的包头信息对所述第七数据块进行封装,并以所述视频帧的包头信息作为所述第八数据块的包头信息对所述第八数据块进行封装。
为了实现上述目的,根据本发明的另一方面,提供了一种面向多屏的场景自适应的数据封装系统。根据本发明的数据封装系统包括:服务器和客户端,其中,服务器用于检测客户端的属性信息,所述属性信息用于反映所述客户端对多媒体数据封装的解析能力,所述多媒体数据包括音频数据和/或视频数据,由所述属性信息确定所述客户端对应的封装参数,根据所述封装参数对所述多媒体数据进行封装,将封装后的数据输出至所述客户端,其中,所述封装参数包括以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,其中,所述第一参数用于反映所述客户端是否支持音视频交织,所述第二参数用于反映所述客户端是否支持动态码率,所述第三参数用于反映所述客户端是否支持音频数据截断,所述第四参数用于反映所述客户端是否支持视频数据截断,所述第五参数用于反映所述客户端是否支持音频帧聚合,所述第六参数用于反映所述客户端是否支持视频帧聚合。
根据本发明实施例,通过检测客户端的属性信息,由属性信息确定客户端对应的封装参数,其中,封装参数包括以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,其中,第一参数用于反映客户端是否支持音视频交织,第二参数用于反映客户端是否支持动态码率,第三参数用于反映客户端是否支持音频数据截断,第四参数用于反映客户端是否支持视频数据截断,第五参数用于反映客户端是否支持音频帧聚合,第六参数用于反映客户端是否支持视频帧聚合,根据封装参数对多媒体数据进行封装,将封装后的数据输出至客户端,从而解决了无法针对不同的客户端进行数据封装的问题,达到了针对不同的客户端的解析能力对多媒体数据进行封装减少数据封装引起的额外开销的效果。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的数据封装方法的流程图;
图2是根据本发明实施例优选的数据封装方法的流程图;
图3是根据本发明实施例的数据封装装置的示意图;
图4是根据本发明实施例优选的数据封装装置的示意图;以及
图5是根据本发明实施例的数据封装系统的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例提供了一种面向多屏的场景自适应的数据封装方法。
图1是根据本发明实施例的数据封装方法的流程图。如图1所示,该数据封装方法包括步骤如下:
步骤S102,检测客户端的属性信息,属性信息用于反映客户端对多媒体数据封装的解析能力,多媒体数据包括音频数据和/或视频数据。
客户端可以包括一个或者多个,多个客户端可以是多个采用不同操作系统的客户端,其中,操作系统可以是例如Android操作系统、iOS操作系统或者windows phone系统等,客户端可以是个人电脑或者移动终端(包括手机、平板电脑、笔记本电脑等)。客户端的该属性信息为用于反映客户端对多媒体数据封装的解析能力的信息其中,多媒体数据包括音频数据、视频数据和音视频混合数据等。该属性信息包括客户端的类型和型号,以及该客户端支持的封装协议、传输协议等信息。例如,PC上Flash播放器可以接收的RTMP格式和HDS格式,iOS以及Android高于4.0版本的手机和平板可以接收HTTP Live Streaming(HLS)格式,Android低于4.0版本的手机和平板可以接收RTP格式。
用于对多媒体数据进行封装的服务器接收到客户端的数据请求,基于该请求检测客户端的属性信息,以便于对针对于客户端的解析能力对多媒体数据进行封装。
具体地,检测客户端的属性信息可以是判断接收音视频流的客户端的类别和型号,在HTTP请求中时,可基于HTTP-request包中包含的User-Agent信息;在RTSP请求中,可基于OPTIONS/DESCRIBE和SETUP包中包含的User-Agent信息。
步骤S104,由属性信息确定客户端对应的封装参数,封装参数包括以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,其中,第一参数用于反映客户端是否支持音视频交织,第二参数用于反映客户端是否支持动态码率,第三参数用于反映客户端是否支持音频数据截断,第四参数用于反映客户端是否支持视频数据截断,第五参数用于反映客户端是否支持音频帧聚合,第六参数用于反映客户端是否支持视频帧聚合。
封装参数为用于根据客户端的解析能力设置的封装参数,该封装参数包括以下至少之一:第一参数IL、第二参数VR、第三参数AT、第四参数VT、第五参数AU、第六参数VU,其中,第一参数IL用于反映客户端是否支持音视频交织、第二参数VR用于反映客户端是否支持动态码率、第三参数AT用于反映客户端接收的音频是否支持数据截断,第四参数VT用于反映客户端接收的视频是否支持数据截断,第五参数AU用于反映客户端接收的音频是否支持帧集合,第六参数VU用于反映客户端接收的视频是否支持帧集合。需要说明的是,封装参数包括但不限于上述参数。
由于检测的客户端属性信息能够反映出客户端的对封装数据的解析能力,基于该属性信息确定封装参数即为根据客户端对封装数据的解析能力来确定用于对多媒体数据进行封装的参数,这样,可以针对不同的客户端采用预期解析能力相应的封装参数。
步骤S106,根据封装参数对多媒体数据进行封装。
根据确定的封装参数对多媒体数据进行封装,由于封装参数为通过客户端的属性信息确定的,利用该封装参数进行多媒体数据封装,封装后的数据能够适应于客户端的解析能力,因此,客户端可以充分利用自身的解析能力来解析封装数据,提高客户端数据解析的效率。
具体地,由于封装参数以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,每一种参数对应有一种对数据进行封装的方式,不同参数的封装方式不同,对于同一多媒体数据请求,可以采用多种封装参数对多媒体数据进行封装。
优选地,在根据封装参数对多媒体数据进行封装之前,数据封装方法还包括:获取对多媒体数据进行编码后的数据;通过预先建立的缓存队列对编码后的数据进行缓存,根据封装参数对多媒体数据进行封装包括:根据封装参数对缓存队列中缓存的数据进行封装。
在接收到客户端的数据请求之后,编码服务器对请求的数据进行编码,其中,编码服务器为用于对数据进行编码的服务器,用于对数据进行封装的服务器获取编码后的数据,音视频数据在进行编码之后,会进入缓存阶段。此阶段中对每一个音视频轨的编码后数据分别建立队列进行缓存,并根据格式封装的参数以及数据的时间戳,来确定队列中的数据进入数据封装步骤的顺序。
步骤S108,将封装后的数据输出至客户端。
将数据封装好之后,对数据封装步骤输出的封装数据包进行网络或文件输出,将封装后的数据输出至客户端,供客户端进行解析,并展示相应的音视频。
音视频数据封装会导致传输带宽的增高,且现有的常用封装方法,往往会导致传输带宽的较大增加。例如,HLS是目前移动终端最为流行的封装协议,其音视频数据的封装标准采用TS封装,即ISO/IEC 13818-1协议。对于一段音视频码流,其中视频带宽为436kbps的H.264流,音频为64kbps的48000Hz的AAC-LC流,那么原始编码后的数据流带宽为500kbps,但是封装成TS后,因为TS补齐数据(stuffing_byte,见ISO/IEC 13818-1协议第2.4.3.5章节)、Adaptation PCR数据和PES包头的插入,最后TS流的带宽将达到588kbps,相比500kbps增高了17.6%。这在传输过程中是一笔非常高的额外开销,而且当音视频的编码带宽进一步降低时,这个比例还会增大。
根据本发明实施例,通过检测客户端的属性信息,由属性信息确定客户端对应的封装参数,其中,封装参数包括以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,其中,第一参数用于反映客户端是否支持音视频交织,第二参数用于反映客户端是否支持动态码率,第三参数用于反映客户端是否支持音频数据截断,第四参数用于反映客户端是否支持视频数据截断,第五参数用于反映客户端是否支持音频帧聚合,第六参数用于反映客户端是否支持视频帧聚合,根据封装参数对多媒体数据进行封装,将封装后的数据输出至客户端,从而解决了无法针对不同的客户端进行数据封装的问题,达到了针对不同的客户端的解析能力对多媒体数据进行封装减少数据封装引起的额外开销的效果。在保证不同类型的客户端对码流可正常解析和解码的前提下,减少码流中格式封装引起的额外开销,使得在同样的传输带宽下,可传输更多的音视频数据。
另外,本发明实施例的数据封装方案可以应对易变的场景及多样化的终端类型,可以面向互联网、面向多屏播放的应用场景。
优选地,第一参数用IL表示、第二参数用VR表示、第三参数用AT表示、第四参数用VT表示、第五参数用AU表示、第六参数用VU表示,如果客户端支持音视频交织,则第一参数IL为1,反之则为0;如果客户端支持动态码率,则第二参数VR为1,反之则为0;第三参数AT、第四参数VT、第五参数AU、第六参数VU同理,不再赘述。本发明实施例中的每个封装参数均有其预先设定的缺省值即(默认值),当某一场景下,或针对某一终端,没有设置某个封装参数值时,则该数值由缺省值决定。
进一步优选地,由属性信息确定封装参数包括:根据与客户端通讯中获得的信息,判断接收音视频流的客户端的类别和型号,及希望收到的流格式协议,根据此信息判断出客户端对封装的解析能力,从而选择最优化的封装参数,以达到封装效率最大化。当格式封装系统无法自动判断客户端的具体类型时,可由系统手动设定客户端的封装解析能力,从而决定最优化的封装参数。在部分场景下,可以不检测客户端的类型,按预先设置的缺省参数进行封装。
优选地,对多媒体数据进行封装包括:由第二参数判断决定客户端是否支持动态码率;如果判断出客户端支持动态码率,则可直接对多媒体数据进行分装,将封装好的数据输出;如果判断出客户端不支持动态码率,则需要采用补空包的机制,在封装好的数据中均匀的插入空包,将整段码流整理为一个恒定码率的码流。补空包的机制,在各种码流协议中均有说明。
图2是根据本发明实施例优选地的数据封装方法的流程图。该实施例的数据封装方法可以作为上述实施例的数据封装方法的优选实施方式。如图2所示,该数据封装方法中:步骤S106,根据封装参数对多媒体数据进行封装包括步骤如下:
步骤S202,由第一参数判断客户端是否支持音视频交织。
第一参数IL为用于反映客户端是否支持音视频交织的参数,在确定客户端的封装参数之后,根据第一参数判断客户端是否支持音视频交织。
步骤S204,如果判断出客户端不支持音视频交织,则将音频数据缓存至音频缓存队列,将视频数据缓存至视频缓存队列。
优选地,音视频交织为对音视频数据交织封装,缓存队列包括音频缓存队列和视频缓存队列,当第一参数IL=0时即在客户端不支持音视频交织的情况下,将音频数据缓存至音频缓存队列,将视频数据缓存至视频缓存队列。
步骤S206,比较音频缓存队列的队列头部的数据帧的时间戳与视频缓存队列的队列头部的数据帧的时间戳。
步骤S208,获取音频缓存队列和视频缓存队列中时间戳较小的数据帧进行封装。
具体地,编码后数据缓存步骤,音视频数据在进行编码之后,会进入缓存阶段。此阶段中对每一个音视频轨的编码后数据分别建立队列进行缓存,并根据格式封装的参数以及数据的时间戳,来确定队列中的数据进入数据封装步骤的顺序。当IL=1时,进度缓存阶段的数据帧可立即进入封装步骤中;当IL=0时,进入缓存阶段的音视频数据帧,首先需要分别进入视频和音频的两个缓存队列;当两个队列中都存在数据时,开始进行比较:比较音频帧缓存队列与视频帧缓存队列中的队列头部的数据帧的时间戳,将音频帧缓存队列与视频帧缓存队列中时间戳较小的帧从队列中取出,进入封装步骤,以此类推直到其中一个队列为空;再等待新的数据到达缓存阶段。
优选地,属性信息包括客户端的操作系统和操作系统对应的版本号,检测客户端的属性信息包括:检测客户端的操作系统和操作系统对应的版本号,由属性信息确定客户端对应的封装参数包括:如果检测出操作系统为iOS系统且iOS系统的版本号为iOS3.0及iOS3.0以上版本,则确定客户端不支持音视频交织、支持动态码率、支持音频数据截断、支持视频数据截断、支持音频帧聚合以及支持视频帧聚合;如果检测出操作系统为Android系统且Android系统的版本号为Android4.0及Android4.0以上版本,则确定客户端不支持音视频交织、支持动态码率、支持音频数据截断、支持视频数据截断、支持音频帧聚合以及支持视频帧聚合;以及如果检测出操作系统为Android系统且Android系统的版本号低于Android4.0,则确定客户端支持音视频交织、不支持动态码率、不支持音频数据截断、不支持视频数据截断、不支持音频帧聚合以及不支持视频帧聚合。
具体地,当客户端为iOS3.x、4.x、5.x、6.x、7.x以及更高版本号的设备或4.x、5.x以及更高版本的Android设备,且请求为HLS协议时,封装参数为IL=0、VR=1、AU=1、VU=0、AT=1、VT=1,如果此时音频平均码率和视频平均码率满足音频平均码率加上视频平均码率低于1Mbps时,可进一步令封装参数VU=1。当客户端为1.6、1.7、2.x版本的Android设备,且请求为RTSP协议,则封装参数为IL=1、VR=1、AU=0、VU=0、AT=0、VT=0。
优选地,在对多媒体数据进行封装的过程中,当AU=0、VU=0、AT=0且VT=0时,表示数据封装无优化的空间,直接按封装协议的标准流程进行封装。令当前待封装的数据为D(k),D(k)可能是第i个视频帧VF(i),也可能是第j个音频帧AF(j)。D(k)对应的数据长度为DS(k),D(k)对应的解码时间戳为D(k)_DTS,D(k)对应的展示时间戳为D(k)_PTS。当封装格式为HLS时,则参考ISO/IEC 13818-1协议中的2.4章节进行数据封装,首先按2.4.3.6的定义,将D(k)封装为PES数据包D(k)_PES,然后再根据2.4.3.1和2.4.3.2的定义,将D(k)_PES封装为一组TS数据包。当封装格式为RTP时,则参考RFC 3550:RTP:A Transport Protocolfor Real-Time Applications中的第5章节,将D(k)封装为若干个RTP数据包。当封装格式为HDS或者RTMP时,则参考adobe的HTTP Dynamic Streaming协议中的C.3章节和RealtimeMultimedia protocol的协议中的第六章节,将数据封装为Chunk,其中HDS协议要进一步提取控制信息,多帧数据的控制信息构成一个Fragment。
优选地,根据封装参数对多媒体数据进行封装包括:由第五参数判断客户端是否支持音频帧聚合;如果判断出客户端支持音频帧聚合,则获取音频数据中按顺序排列的多个音频帧;获取多个音频帧中第一个音频帧的数据包头信息;以第一个音频帧的数据包头信息作为音频帧集合的数据包头信息对多个音频帧进行聚合,得到音频帧集合;以及对音频帧集合进行封装。
具体地,通过第五参数判断出客户端支持音频帧聚合即当封装参数AU=1时,令第b个音频帧集合为UAF(b)={AF(j),AF(j+1),AF(j+2),…,AF(j+m-1)},其中AF(j)表示第j帧音频,m为音频帧集合的最大基数。并令UAF(b)的数据包头的信息等于第j个音频帧的数据包头信息,除了数据长度变更为帧集合的总数据长度,之后将UAF(b)作为一个音频帧按封装协议的标准流程进行封装,将聚合后的音频帧集合作为一个音频帧进行封装。
可选地,根据封装参数对多媒体数据进行封装包括:由第六参数判断客户端是否支持视频帧聚合;如果判断出客户端支持视频帧聚合,则获取视频数据中按顺序排列的多个视频帧;获取多个视频帧中第一个视频帧的数据包头信息;以第一个视频帧的数据包头信息作为视频帧集合的数据包头信息对多个视频帧进行聚合,得到视频帧集合;以及对视频帧集合进行封装。
具体地,通过第六参数判断出客户端支持视频帧聚合即当封装参数VU=1时,令第a个视频帧集合为UVF(a)={VF(i),VF(i+1),VF(i+2),…,VF(i+n-1)},其中VF(i)表示第i个视频帧,n为视频帧集合的最大基数。并令UVF(a)的数据包头的信息等于第i个视频帧的数据包头信息,除了数据长度变更为帧集合的总数据长度,之后将UVF(a)作为一个视频帧按封装协议的标准流程进行封装,将聚合后的视频帧集合作为一个音频帧进行封装。
需要说明的是,对于对多媒体数据进行封装还可以是对音频帧和视频帧同时进行聚合,然后将聚合后的音频帧集合作为一个音频帧,将视频帧集合作为一个视频帧进行封装。
优选地,对多个音频帧进行聚合,得到音频帧集合包括:判断客户端接收的封装后的数据包的数据长度是否为固定数据长度;如果判断出客户端接收的封装后的数据包的数据长度为固定数据长度,则确定客户端接收的封装后的数据包的固定负荷和数据包的封包包头数据长度;确定用于进行聚合的音频帧的个数k,个数k满足以下公式
其中,z为预设的比例值,Truncate((S(k)+SH+L-1)/L)表示(S(k)+SH+L-1)/L的整数部分的数值,S(k)表示固定数据长度,L表示固定负荷,SH表示封包包头数据长度;以及选取k个音频帧进行音频帧聚合,得到音频帧集合。
具体地,在当封装参数AU=1即客户端支持音频帧聚合时,如果在封装格式要求每个数据包是固定数据长度时,那么集合的实际基数可根据实际有效负荷比例来决定。以上述音频帧集合UAF(b)为例,令每个数据包的固定负荷为L,数据包的封包包头数据长度为SH,UAF(b)={AF(j),AF(j+1),AF(j+2),…,AF(j+k-1)},UAF(b)的实际基数为k,此时UAF(b)的数据长度为S(k),则当k为最小的满足其中,Z设定的比例值条件的正整数时,即可停止音频帧的集合,之后将UAF(b)作为一个音频帧按数据封装协议的标准流程进行封装。其中Truncate(X)表示将X小数部分完全截断后留下的整数部分。
优选地,根据封装参数对多媒体数据进行封装包括:由第三参数判断客户端是否支持音频数据截断;如果判断出客户端支持音频数据截断,则确定音频帧集合的数据截断位置;基于音频帧集合的数据截止位置将音频帧集合截断成第一数据块和第二数据块;以第一数据块中第一个字节所属的音频帧的包头信息作为第一数据块的包头信息对第一数据块进行封装;以及以第二数据块中第一个字节所属的音频帧的包头信息作为第二数据块的包头信息对第二数据块进行封装。
音频帧集合的数据截断位置可以是音频帧集合中任一个音频帧的数据结尾位置,也可以是任一个音频帧的数据开始位置,以该位置为数据截断位置,将音频帧集合截断成第一数据块和第二数据块这两个数据块,对两个数据块分别进行封装。由于音频帧集合包括多个音频帧,将音频帧截断成两个数据块后,每个数据块中均包含有音频帧,以数据块中第一个音频帧的包头信息作为该数据块的包头信息,对数据块进行封装。
具体地,以上述中音频帧集合UAF(b)为例对音频帧截断进行描述:当AT=0即客户端支持数据截断时,可在一音频帧UAF(b)中选择一个位置x(b)即音频帧集合的数据截断位置,UAF(b)的数据长度为S(b),0<x(b)<=S(b),当AU=0时,UAF(b)的集合基数为1,即仅包含一个音频帧(AF)。将UAF(b)中位于x(b)之前不包含x(b)的数据定义为RUAF(b)[0,x(b)],将UAF(b)中位于x(b)之后且包含x(b)的数据定义为RUAF(b)[x(b),S(b)],那么UAF(b)=RUAF(b)[0,x(b)]+RUAF(b)[x(b),S(b)],当x(b)=S(b)时,RUAF(b)[x(b),S(b)]数据长度为0,是空数据,相当于UAF(b)=RUAF(b)[0,x(b)]。同理,对于UAF(b-1)可选择x(b-1),UAF(b+1)选择x(b+1),得到UAF(b-1)=RUAF(b-1)[0,x(b-1)]+RUAF(b-1)[x(b-1),S(b-1)]和UAF(b+1)=RUAF(b+1)[0,x(b+1)]+RUAF(b+1)[x(b+1),S(b+1)]。具体封装过程中,首先RUAF(b)[0,x(b)]与RUAF(b-1)[x(b-1),S(b-1)]进行联合构成一个数据块,再将该数据块看作一个音频帧,该音频帧的封装包头信息等于数据块中第一个bit所属的音频帧集合(UAF)的封装包头信息,除了数据长度域等于数据块的实际长度,最后按按封装协议的标准流程进行封装。
可选地,根据封装参数对多媒体数据进行封装包括:由第四参数判断客户端是否支持视频数据截断;如果判断出客户端支持视频数据截断,则确定视频帧集合的数据截断位置;基于视频帧集合的数据截止位置将视频帧集合截断成第三数据块和第四数据块;以第三数据块中第一个字节所属的视频帧的包头信息作为第三数据块的包头信息对第三数据块进行封装;以及以第四数据块中第一个字节所属的视频帧的包头信息作为第四数据块的包头信息对第四数据块进行封装。
视频帧集合的数据截断位置可以是视频帧集合中任一个视频帧的数据结尾位置,也可以是任一个视频帧的数据开始位置,以该位置为数据截断位置,将视频帧集合截断成第三数据块和第四数据块这两个数据块,对两个数据块分别进行封装。由于视频帧集合包括多个视频帧,将视频帧截断成两个数据块后,每个数据块中均包含有视频帧,以数据块中第一个视频帧的包头信息作为该数据块的包头信息,对数据块进行封装。
具体地,以上述中视频帧集合UVF(a)为例进行描述:当封装参数VT=1时,可在一视频帧UVF(a)中选择一个位置x(a)即音频帧集合的数据截断位置,UVF(a)的数据长度为S(a),0<x(a)<=S(a),当VU=0时,UVF(a)的集合基数为1,即仅包含一个视频帧(VF)。将UVF(a)中位于x(a)之前不包含x(a)的数据定义为RUVF(a)[0,x(a)],将该帧数据中位于x(a)之后且包含x(a)的数据定义为RUVF(a)[x(a),S(a)],那么UVF(a)=RUVF(a)[0,x(a)]+RUVF(a)[x(a),S(a)],当x(a)=S(a)时,RUVF(a)[x(a),S(a)]数据长度为0,是空数据,相当于UVF(a)=RUVF(a)[0,x(a)]。同理,对于UVF(a-1)可选择x(a-1),UVF(a+1)选择x(a+1),得到UVF(a-1)=RUVF(a-1)[0,x(a-1)]+RUVF(a-1)[x(a-1),S(a-1)]和UVF(a+1)=RUVF(a+1)[0,x(a+1)]+RUVF(a+1)[x(a+1),S(a+1)]。具体封装过程中,首先RUVF(a)[0,x(a)]与RUVF(a-1)[x(a-1),S(a-1)]进行联合构成一个数据块,再将该数据块看作一个视频帧,该视频帧的封装包头信息等于数据块中第一个bit所属的UVF的封装包头信息,除了数据长度域等于数据块的实际长度,最后按按封装协议的标准流程进行封装。
需要说明的是,本发明实施例中,可以是对音频帧集合和视频帧集合分别同时进行截断操作,这里不做赘述。
优选地,根据封装参数对多媒体数据进行封装包括:由第三参数判断客户端是否支持音频数据截断;如果判断出客户端支持音频数据截断,则确定音频数据中音频帧的数据截断位置;基于音频帧的数据截止位置将音频帧截断成第五数据块和第六数据块;以音频帧的包头信息作为第五数据块的包头信息对第五数据块进行封装;以及以音频帧的包头信息作为第六数据块的包头信息对第六数据块进行封装。
对与音频数据截断,还可以是将音频帧截断,形成两个数据块,由于一个音频帧只包含有一个包头信息,因此,以该音频帧的包头信息作为截断后的两个数据块的包头信息对截断后的两个数据块进行封装。其他的截断原理与对音频帧集合截断的原理相同,这里不做赘述。
可选地,根据封装参数对多媒体数据进行封装包括:由第四参数判断客户端是否支持视频数据截断;如果判断出客户端支持视频数据截断,则确定视频数据中视频帧的数据截断位置;基于视频帧的数据截止位置将视频帧截断成第七数据块和第八数据块;以视频帧的包头信息作为第七数据块的包头信息对第七数据块进行封装;以及以视频帧的包头信息作为第八数据块的包头信息对第八数据块进行封装。
对与视频数据截断,还可以是将视频帧截断,形成两个数据块,由于一个视频帧只包含有一个包头信息,因此,以该视频帧的包头信息作为截断后的两个数据块的包头信息对截断后的两个数据块进行封装。其他的截断原理与对视频帧集合截断的原理相同,这里不做赘述。
本发明实施例还提供了一种面向多屏的场景自适应的数据封装装置。该装置可以通过计算机设备实现其功能。需要说明的是,本发明实施例的数据封装装置可以用于执行本发明实施例所提供的面向多屏的场景自适应的数据封装方法,本发明实施例的面向多屏的场景自适应的数据封装方法也可以通过本发明实施例所提供的面向多屏的场景自适应的数据封装装置来执行。
图3是根据本发明实施例的数据封装装置的示意图。如图3所示,该数据封装装置包括:检测单元101、确定单元102、封装单元103和输出单元104。
检测单元101用于检测客户端的属性信息,属性信息用于反映客户端对多媒体数据封装的解析能力,多媒体数据包括音频数据和/或视频数据。
客户端可以包括一个或者多个,多个客户端可以是多个采用不同操作系统的客户端,其中,操作系统可以是例如Android操作系统、iOS操作系统或者windows phone系统等,客户端可以是个人电脑或者移动终端(包括手机、平板电脑、笔记本电脑等)。客户端的该属性信息为用于反映客户端对多媒体数据封装的解析能力的信息其中,多媒体数据包括音频数据、视频数据和音视频混合数据等。该属性信息包括客户端的类型和型号,以及该客户端支持的封装协议、传输协议等信息。例如,PC上Flash播放器可以接收的RTMP格式和HDS格式,iOS以及Android高于4.0版本的手机和平板可以接收HTTP Live Streaming(HLS)格式,Android低于4.0版本的手机和平板可以接收RTP格式。
用于对多媒体数据进行封装的服务器接收到客户端的数据请求,基于该请求检测客户端的属性信息,以便于对针对于客户端的解析能力对多媒体数据进行封装。
具体地,检测客户端的属性信息可以是判断接收音视频流的客户端的类别和型号,在HTTP请求中时,可基于HTTP-request包中包含的User-Agent信息;在RTSP请求中,可基于OPTIONS/DESCRIBE和SETUP包中包含的User-Agent信息。
确定单元102用于由属性信息确定客户端对应的封装参数,封装参数包括以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,其中,第一参数用于反映客户端是否支持音视频交织,第二参数用于反映客户端是否支持动态码率,第三参数用于反映客户端是否支持音频数据截断,第四参数用于反映客户端是否支持视频数据截断,第五参数用于反映客户端是否支持音频帧聚合,第六参数用于反映客户端是否支持视频帧聚合。
封装参数为用于根据客户端的解析能力设置的封装参数,该封装参数包括以下至少之一:第一参数IL、第二参数VR、第三参数AT、第四参数VT、第五参数AU、第六参数VU,其中,第一参数IL用于反映客户端是否支持音视频交织、第二参数VR用于反映客户端是否支持动态码率、第三参数AT用于反映客户端接收的音频是否支持数据截断,第四参数VT用于反映客户端接收的视频是否支持数据截断,第五参数AU用于反映客户端接收的音频是否支持帧集合,第六参数VU用于反映客户端接收的视频是否支持帧集合。需要说明的是,封装参数包括但不限于上述参数。
由于检测的客户端属性信息能够反映出客户端的对封装数据的解析能力,基于该属性信息确定封装参数即为根据客户端对封装数据的解析能力来确定用于对多媒体数据进行封装的参数,这样,可以针对不同的客户端采用预期解析能力相应的封装参数。
封装单元103用于根据封装参数对多媒体数据进行封装。
根据确定的封装参数对多媒体数据进行封装,由于封装参数为通过客户端的属性信息确定的,利用该封装参数进行多媒体数据封装,封装后的数据能够适应于客户端的解析能力,因此,客户端可以充分利用自身的解析能力来解析封装数据,提高客户端数据解析的效率。
具体地,由于封装参数以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,每一种参数对应有一种对数据进行封装的方式,不同参数的封装方式不同,对于同一多媒体数据请求,可以采用多种封装参数对多媒体数据进行封装。
输出单元104用于将封装后的数据输出至客户端。
将数据封装好之后,对数据封装步骤输出的封装数据包进行网络或文件输出,将封装后的数据输出至客户端,供客户端进行解析,并展示相应的音视频。
音视频数据封装会导致传输带宽的增高,且现有的常用封装方法,往往会导致传输带宽的较大增加。例如,HLS是目前移动终端最为流行的封装协议,其音视频数据的封装标准采用TS封装,即ISO/IEC 13818-1协议。对于一段音视频码流,其中视频带宽为436kbps的H.264流,音频为64kbps的48000Hz的AAC-LC流,那么原始编码后的数据流带宽为500kbps,但是封装成TS后,因为TS补齐数据(stuffing_byte,见ISO/IEC 13818-1协议第2.4.3.5章节)、Adaptation PCR数据和PES包头的插入,最后TS流的带宽将达到588kbps,相比500kbps增高了17.6%。这在传输过程中是一笔非常高的额外开销,而且当音视频的编码带宽进一步降低时,这个比例还会增大。
根据本发明实施例,通过检测客户端的属性信息,由属性信息确定客户端对应的封装参数,其中,封装参数包括以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,其中,第一参数用于反映客户端是否支持音视频交织,第二参数用于反映客户端是否支持动态码率,第三参数用于反映客户端是否支持音频数据截断,第四参数用于反映客户端是否支持视频数据截断,第五参数用于反映客户端是否支持音频帧聚合,第六参数用于反映客户端是否支持视频帧聚合,根据封装参数对多媒体数据进行封装,将封装后的数据输出至客户端,从而解决了无法针对不同的客户端进行数据封装的问题,达到了针对不同的客户端的解析能力对多媒体数据进行封装减少数据封装引起的额外开销的效果。在保证不同类型的客户端对码流可正常解析和解码的前提下,减少码流中格式封装引起的额外开销,使得在同样的传输带宽下,可传输更多的音视频数据。
另外,本发明实施例的数据封装方案可以应对易变的场景及多样化的终端类型,可以面向互联网、面向多屏播放的应用场景。
优选地,第一参数用IL表示、第二参数用VR表示、第三参数用AT表示、第四参数用VT表示、第五参数用AU表示、第六参数用VU表示,如果客户端支持音视频交织,则第一参数IL为1,反之则为0;如果客户端支持动态码率,则第二参数VR为1,反之则为0;第三参数AT、第四参数VT、第五参数AU、第六参数VU同理,不再赘述。本发明实施例中的每个封装参数均有其预先设定的缺省值即(默认值),当某一场景下,或针对某一终端,没有设置某个封装参数值时,则该数值由缺省值决定。
进一步优选地,由属性信息确定封装参数包括:根据与客户端通讯中获得的信息,判断接收音视频流的客户端的类别和型号,及希望收到的流格式协议,根据此信息判断出客户端对封装的解析能力,从而选择最优化的封装参数,以达到封装效率最大化。当格式封装系统无法自动判断客户端的具体类型时,可由系统手动设定客户端的封装解析能力,从而决定最优化的封装参数。在部分场景下,可以不检测客户端的类型,按预先设置的缺省参数进行封装。
优选地,数据封装装置还包括:获取单元,用于在根据封装参数对多媒体数据进行封装之前,获取对多媒体数据进行编码后的数据;缓存单元,用于通过预先建立的缓存队列对编码后的数据进行缓存,封装单元还用于根据封装参数对缓存队列中缓存的数据进行封装。
在接收到客户端的数据请求之后,编码服务器对请求的数据进行编码,其中,编码服务器为用于对数据进行编码的服务器,用于对数据进行封装的服务器获取编码后的数据,音视频数据在进行编码之后,会进入缓存阶段。此阶段中对每一个音视频轨的编码后数据分别建立队列进行缓存,并根据格式封装的参数以及数据的时间戳,来确定队列中的数据进入数据封装步骤的顺序。
图4是根据本发明实施例优选的数据封装装置的示意图。该实施例的数据封装装置可以作为上述实施例的数据封装装置的一种优选实施方式。如图4所示,该数据封装装置包括:检测单元101、确定单元102、封装单元103和输出单元104。其中,封装单元103包括第一判断模块1031、缓存模块1032、比较模块1033和第一封装模块1034。
第一判断模块301用于由第一参数判断客户端是否支持音视频交织。
第一参数IL为用于反映客户端是否支持音视频交织的参数,在确定客户端的封装参数之后,根据第一参数判断客户端是否支持音视频交织。
缓存模块302用于当判断出客户端不支持音视频交织时,将音频数据缓存至音频缓存队列,将视频数据缓存至视频缓存队列。
优选地,音视频交织为对音视频数据交织封装,缓存队列包括音频缓存队列和视频缓存队列,当第一参数IL=0时即在客户端不支持音视频交织的情况下,将音频数据缓存至音频缓存队列,将视频数据缓存至视频缓存队列。
比较模块303用于比较音频缓存队列的队列头部的数据帧的时间戳与视频缓存队列的队列头部的数据帧的时间戳。
第一封装模块304用于获取音频缓存队列和视频缓存队列中时间戳较小的数据帧进行封装。
具体地,编码后数据缓存步骤,音视频数据在进行编码之后,会进入缓存阶段。此阶段中对每一个音视频轨的编码后数据分别建立队列进行缓存,并根据格式封装的参数以及数据的时间戳,来确定队列中的数据进入数据封装步骤的顺序。当IL=1时,进度缓存阶段的数据帧可立即进入封装步骤中;当IL=0时,进入缓存阶段的音视频数据帧,首先需要分别进入视频和音频的两个缓存队列;当两个队列中都存在数据时,开始进行比较:比较音频帧缓存队列与视频帧缓存队列中的队列头部的数据帧的时间戳,将音频帧缓存队列与视频帧缓存队列中时间戳较小的帧从队列中取出,进入封装步骤,以此类推直到其中一个队列为空;再等待新的数据到达缓存阶段。
优选地,属性信息包括客户端的操作系统和操作系统对应的版本号,检测单元包括:检测模块,用于检测客户端的操作系统和操作系统对应的版本号,确定单元包括:第一确定模块,用于当检测出操作系统为iOS系统且iOS系统的版本号为iOS3.0及iOS3.0以上版本时,确定客户端不支持音视频交织、支持动态码率、支持音频数据截断、支持视频数据截断、支持音频帧聚合以及支持视频帧聚合;第二确定模块,用于当检测出操作系统为Android系统且Android系统的版本号为Android4.0及Android4.0以上版本时,确定客户端不支持音视频交织、支持动态码率、支持音频数据截断、支持视频数据截断、支持音频帧聚合以及支持视频帧聚合;以及第三确定模块,用于当检测出操作系统为Android系统且Android系统的版本号低于Android4.0时,确定客户端支持音视频交织、不支持动态码率、不支持音频数据截断、不支持视频数据截断、不支持音频帧聚合以及不支持视频帧聚合。
具体地,当客户端为iOS3.x、4.x、5.x、6.x、7.x以及更高版本号的设备或4.x、5.x以及更高版本的Android设备,且请求为HLS协议时,封装参数为IL=0、VR=1、AU=1、VU=0、AT=1、VT=1,如果此时音频平均码率和视频平均码率满足音频平均码率加上视频平均码率低于1Mbps时,可进一步令封装参数VU=1。当客户端为1.6、1.7、2.x版本的Android设备,且请求为RTSP协议,则封装参数为IL=1、VR=1、AU=0、VU=0、AT=0、VT=0。
优选地,在对多媒体数据进行封装的过程中,当AU=0、VU=0、AT=0且VT=0时,表示数据封装无优化的空间,直接按封装协议的标准流程进行封装。令当前待封装的数据为D(k),D(k)可能是第i个视频帧VF(i),也可能是第j个音频帧AF(j)。D(k)对应的数据长度为DS(k),D(k)对应的解码时间戳为D(k)_DTS,D(k)对应的展示时间戳为D(k)_PTS。当封装格式为HLS时,则参考ISO/IEC 13818-1协议中的2.4章节进行数据封装,首先按2.4.3.6的定义,将D(k)封装为PES数据包D(k)_PES,然后再根据2.4.3.1和2.4.3.2的定义,将D(k)_PES封装为一组TS数据包。当封装格式为RTP时,则参考RFC 3550:RTP:A Transport Protocolfor Real-Time Applications中的第5章节,将D(k)封装为若干个RTP数据包。当封装格式为HDS或者RTMP时,则参考adobe的HTTP Dynamic Streaming协议中的C.3章节和RealtimeMultimedia protocol的协议中的第六章节,将数据封装为Chunk,其中HDS协议要进一步提取控制信息,多帧数据的控制信息构成一个Fragment。
优选地,封装单元包括:第二判断模块,用于由第五参数判断客户端是否支持音频帧聚合;第一获取模块,用于当判断出客户端支持音频帧聚合时,获取音频数据中按顺序排列的多个音频帧;第二获取模块,用于获取多个音频帧中第一个音频帧的数据包头信息;第一聚合模块,用于以第一个音频帧的数据包头信息作为音频帧集合的数据包头信息对多个音频帧进行聚合,得到音频帧集合;以及第二封装模块,用于对音频帧集合进行封装。
具体地,通过第五参数判断出客户端支持音频帧聚合即当封装参数AU=1时,令第b个音频帧集合为UAF(b)={AF(j),AF(j+1),AF(j+2),…,AF(j+m-1)},其中AF(j)表示第j帧音频,m为音频帧集合的最大基数。并令UAF(b)的数据包头的信息等于第j个音频帧的数据包头信息,除了数据长度变更为帧集合的总数据长度,之后将UAF(b)作为一个音频帧按封装协议的标准流程进行封装,将聚合后的音频帧集合作为一个音频帧进行封装。
可选地,封装单元包括:第三判断模块,用于由第六参数判断客户端是否支持视频帧聚合;第三获取模块,用于当判断出客户端支持视频帧聚合时,获取视频数据中按顺序排列的多个视频帧;第四获取模块,用于获取多个视频帧中第一个视频帧的数据包头信息;第二聚合模块,用于以第一个视频帧的数据包头信息作为视频帧集合的数据包头信息对多个视频帧进行聚合,得到视频帧集合;以及第三封装模块,用于对视频帧集合进行封装。
具体地,通过第六参数判断出客户端支持视频帧聚合即当封装参数VU=1时,令第a个视频帧集合为UVF(a)={VF(i),VF(i+1),VF(i+2),…,VF(i+n-1)},其中VF(i)表示第i个视频帧,n为视频帧集合的最大基数。并令UVF(a)的数据包头的信息等于第i个视频帧的数据包头信息,除了数据长度变更为帧集合的总数据长度,之后将UVF(a)作为一个视频帧按封装协议的标准流程进行封装,将聚合后的视频帧集合作为一个音频帧进行封装。
需要说明的是,对于对多媒体数据进行封装还可以是对音频帧和视频帧同时进行聚合,然后将聚合后的音频帧集合作为一个音频帧,将视频帧集合作为一个视频帧进行封装。
优选地,第一聚合模块包括:判断子模块,用于判断客户端接收的封装后的数据包的数据长度是否为固定数据长度;第一确定子模块,用于当判断出客户端接收的封装后的数据包的数据长度为固定数据长度时,确定客户端接收的封装后的数据包的固定负荷和数据包的封包包头数据长度;第二确定子模块,用于确定用于进行聚合的音频帧的个数k,个数k满足以下公式
其中,z为预设的比例值,Truncate((S(k)+SH+L-1)/L)表示(S(k)+SH+L-1)/L的整数部分的数值,S(k)表示固定数据长度,L表示固定负荷,SH表示封包包头数据长度;以及选取模块,用于选取k个音频帧进行音频帧聚合,得到音频帧集合。
具体地,在当封装参数AU=1即客户端支持音频帧聚合时,如果在封装格式要求每个数据包是固定数据长度时,那么集合的实际基数可根据实际有效负荷比例来决定。以上述音频帧集合UAF(b)为例,令每个数据包的固定负荷为L,数据包的封包包头数据长度为SH,UAF(b)={AF(j),AF(j+1),AF(j+2),…,AF(j+k-1)},UAF(b)的实际基数为k,此时UAF(b)的数据长度为S(k),则当k为最小的满足其中,Z设定的比例值条件的正整数时,即可停止音频帧的集合,之后将UAF(b)作为一个音频帧按数据封装协议的标准流程进行封装。其中Truncate(X)表示将X小数部分完全截断后留下的整数部分。
优选地,封装单元还包括:第四判断模块,用于由第三参数判断客户端是否支持音频数据截断;第四确定模块,用于当判断出客户端支持音频数据截断时,确定音频帧集合的数据截断位置;第一截断模块,用于基于音频帧集合的数据截止位置将音频帧集合截断成第一数据块和第二数据块;第四封装模块,用于以第一数据块中第一个字节所属的音频帧的包头信息作为第一数据块的包头信息对第一数据块进行封装,并以第二数据块中第一个字节所属的音频帧的包头信息作为第二数据块的包头信息对第二数据块进行封装。
音频帧集合的数据截断位置可以是音频帧集合中任一个音频帧的数据结尾位置,也可以是任一个音频帧的数据开始位置,以该位置为数据截断位置,将音频帧集合截断成第一数据块和第二数据块这两个数据块,对两个数据块分别进行封装。由于音频帧集合包括多个音频帧,将音频帧截断成两个数据块后,每个数据块中均包含有音频帧,以数据块中第一个音频帧的包头信息作为该数据块的包头信息,对数据块进行封装。
具体地,以上述中音频帧集合UAF(b)为例对音频帧截断进行描述:当AT=0即客户端支持数据截断时,可在一音频帧UAF(b)中选择一个位置x(b)即音频帧集合的数据截断位置,UAF(b)的数据长度为S(b),0<x(b)<=S(b),当AU=0时,UAF(b)的集合基数为1,即仅包含一个音频帧(AF)。将UAF(b)中位于x(b)之前不包含x(b)的数据定义为RUAF(b)[0,x(b)],将UAF(b)中位于x(b)之后且包含x(b)的数据定义为RUAF(b)[x(b),S(b)],那么UAF(b)=RUAF(b)[0,x(b)]+RUAF(b)[x(b),S(b)],当x(b)=S(b)时,RUAF(b)[x(b),S(b)]数据长度为0,是空数据,相当于UAF(b)=RUAF(b)[0,x(b)]。同理,对于UAF(b-1)可选择x(b-1),UAF(b+1)选择x(b+1),得到UAF(b-1)=RUAF(b-1)[0,x(b-1)]+RUAF(b-1)[x(b-1),S(b-1)]和UAF(b+1)=RUAF(b+1)[0,x(b+1)]+RUAF(b+1)[x(b+1),S(b+1)]。具体封装过程中,首先RUAF(b)[0,x(b)]与RUAF(b-1)[x(b-1),S(b-1)]进行联合构成一个数据块,再将该数据块看作一个音频帧,该音频帧的封装包头信息等于数据块中第一个bit所属的音频帧集合(UAF)的封装包头信息,除了数据长度域等于数据块的实际长度,最后按按封装协议的标准流程进行封装。
可选地,封装单元还包括:第五判断模块,用于由第四参数判断客户端是否支持视频数据截断;第五确定模块,用于当判断出客户端支持视频数据截断时,确定视频帧集合的数据截断位置;第二截断模块,用于基于视频帧集合的数据截止位置将视频帧集合截断成第三数据块和第四数据块;第五封装模块,用于以第三数据块中第一个字节所属的视频帧的包头信息作为第三数据块的包头信息对第三数据块进行封装,并以第四数据块中第一个字节所属的视频帧的包头信息作为第四数据块的包头信息对第四数据块进行封装。
视频帧集合的数据截断位置可以是视频帧集合中任一个视频帧的数据结尾位置,也可以是任一个视频帧的数据开始位置,以该位置为数据截断位置,将视频帧集合截断成第三数据块和第四数据块这两个数据块,对两个数据块分别进行封装。由于视频帧集合包括多个视频帧,将视频帧截断成两个数据块后,每个数据块中均包含有视频帧,以数据块中第一个视频帧的包头信息作为该数据块的包头信息,对数据块进行封装。
具体地,以上述中视频帧集合UVF(a)为例进行描述:当封装参数VT=1时,可在一视频帧UVF(a)中选择一个位置x(a)即音频帧集合的数据截断位置,UVF(a)的数据长度为S(a),0<x(a)<=S(a),当VU=0时,UVF(a)的集合基数为1,即仅包含一个视频帧(VF)。将UVF(a)中位于x(a)之前不包含x(a)的数据定义为RUVF(a)[0,x(a)],将该帧数据中位于x(a)之后且包含x(a)的数据定义为RUVF(a)[x(a),S(a)],那么UVF(a)=RUVF(a)[0,x(a)]+RUVF(a)[x(a),S(a)],当x(a)=S(a)时,RUVF(a)[x(a),S(a)]数据长度为0,是空数据,相当于UVF(a)=RUVF(a)[0,x(a)]。同理,对于UVF(a-1)可选择x(a-1),UVF(a+1)选择x(a+1),得到UVF(a-1)=RUVF(a-1)[0,x(a-1)]+RUVF(a-1)[x(a-1),S(a-1)]和UVF(a+1)=RUVF(a+1)[0,x(a+1)]+RUVF(a+1)[x(a+1),S(a+1)]。具体封装过程中,首先RUVF(a)[0,x(a)]与RUVF(a-1)[x(a-1),S(a-1)]进行联合构成一个数据块,再将该数据块看作一个视频帧,该视频帧的封装包头信息等于数据块中第一个bit所属的UVF的封装包头信息,除了数据长度域等于数据块的实际长度,最后按按封装协议的标准流程进行封装。
需要说明的是,本发明实施例中,可以是对音频帧集合和视频帧集合分别同时进行截断操作,这里不做赘述。
优选地,封装单元包括:第六判断模块,用于由第三参数判断客户端是否支持音频数据截断;第六确定模块,用于当判断出客户端支持音频数据截断时,确定音频数据中音频帧的数据截断位置;第三截断模块,用于基于音频帧的数据截止位置将音频帧截断成第五数据块和第六数据块;第六封装模块,用于以音频帧的包头信息作为第五数据块的包头信息对第五数据块进行封装,并以音频帧的包头信息作为第六数据块的包头信息对第六数据块进行封装。
对与音频数据截断,还可以是将音频帧截断,形成两个数据块,由于一个音频帧只包含有一个包头信息,因此,以该音频帧的包头信息作为截断后的两个数据块的包头信息对截断后的两个数据块进行封装。其他的截断原理与对音频帧集合截断的原理相同,这里不做赘述。
可选地,封装单元包括:第七判断模块,用于由第四参数判断客户端是否支持视频数据截断;第七确定模块,用于当判断出客户端支持视频数据截断时,确定视频数据中视频帧的数据截断位置;第四截断模块,用于基于视频帧的数据截止位置将视频帧截断成第七数据块和第八数据块;第七封装模块,用于以视频帧的包头信息作为第七数据块的包头信息对第七数据块进行封装,并以视频帧的包头信息作为第八数据块的包头信息对第八数据块进行封装。
对与视频数据截断,还可以是将视频帧截断,形成两个数据块,由于一个视频帧只包含有一个包头信息,因此,以该视频帧的包头信息作为截断后的两个数据块的包头信息对截断后的两个数据块进行封装。其他的截断原理与对视频帧集合截断的原理相同,这里不做赘述。
本发明实施例还提供了一种面向多屏的场景自适应的数据封装系统。
如图5所示,该数据封装系统包括服务器10和客户端20,其中,服务器可以即为本发明实施例的数据封装装置。
服务器用于检测客户端的属性信息,所述属性信息用于反映所述客户端对多媒体数据封装的解析能力,所述多媒体数据包括音频数据和/或视频数据,由所述属性信息确定所述客户端对应的封装参数,根据所述封装参数对所述多媒体数据进行封装,将封装后的数据输出至所述客户端,其中,所述封装参数包括以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,其中,所述第一参数用于反映所述客户端是否支持音视频交织,所述第二参数用于反映所述客户端是否支持动态码率,所述第三参数用于反映所述客户端是否支持音频数据截断,所述第四参数用于反映所述客户端是否支持视频数据截断,所述第五参数用于反映所述客户端是否支持音频帧聚合,所述第六参数用于反映所述客户端是否支持视频帧聚合。
客户端可以包括一个或者多个,多个客户端可以是多个采用不同操作系统的客户端,其中,操作系统可以是例如Android操作系统、iOS操作系统或者windows phone系统等,客户端可以是个人电脑或者移动终端(包括手机、平板电脑、笔记本电脑等)。客户端的该属性信息为用于反映客户端对多媒体数据封装的解析能力的信息其中,多媒体数据包括音频数据、视频数据和音视频混合数据等。该属性信息包括客户端的类型和型号,以及该客户端支持的封装协议、传输协议等信息。例如,PC上Flash播放器可以接收的RTMP格式和HDS格式,iOS以及Android高于4.0版本的手机和平板可以接收HTTP Live Streaming(HLS)格式,Android低于4.0版本的手机和平板可以接收RTP格式。
用于对多媒体数据进行封装的服务器接收到客户端的数据请求,基于该请求检测客户端的属性信息,以便于对针对于客户端的解析能力对多媒体数据进行封装。
具体地,检测客户端的属性信息可以是判断接收音视频流的客户端的类别和型号,在HTTP请求中时,可基于HTTP-request包中包含的User-Agent信息;在RTSP请求中,可基于OPTIONS/DESCRIBE和SETUP包中包含的User-Agent信息。
封装参数为用于根据客户端的解析能力设置的封装参数,该封装参数包括以下至少之一:第一参数IL、第二参数VR、第三参数AT、第四参数VT、第五参数AU、第六参数VU,其中,第一参数IL用于反映客户端是否支持音视频交织、第二参数VR用于反映客户端是否支持动态码率、第三参数AT用于反映客户端接收的音频是否支持数据截断,第四参数VT用于反映客户端接收的视频是否支持数据截断,第五参数AU用于反映客户端接收的音频是否支持帧集合,第六参数VU用于反映客户端接收的视频是否支持帧集合。需要说明的是,封装参数包括但不限于上述参数。
由于检测的客户端属性信息能够反映出客户端的对封装数据的解析能力,基于该属性信息确定封装参数即为根据客户端对封装数据的解析能力来确定用于对多媒体数据进行封装的参数,这样,可以针对不同的客户端采用预期解析能力相应的封装参数。
根据确定的封装参数对多媒体数据进行封装,由于封装参数为通过客户端的属性信息确定的,利用该封装参数进行多媒体数据封装,封装后的数据能够适应于客户端的解析能力,因此,客户端可以充分利用自身的解析能力来解析封装数据,提高客户端数据解析的效率。
具体地,由于封装参数以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,每一种参数对应有一种对数据进行封装的方式,不同参数的封装方式不同,对于同一多媒体数据请求,可以采用多种封装参数对多媒体数据进行封装。
将数据封装好之后,对数据封装步骤输出的封装数据包进行网络或文件输出,将封装后的数据输出至客户端,供客户端进行解析,并展示相应的音视频。
音视频数据封装会导致传输带宽的增高,且现有的常用封装方法,往往会导致传输带宽的较大增加。例如,HLS是目前移动终端最为流行的封装协议,其音视频数据的封装标准采用TS封装,即ISO/IEC 13818-1协议。对于一段音视频码流,其中视频带宽为436kbps的H.264流,音频为64kbps的48000Hz的AAC-LC流,那么原始编码后的数据流带宽为500kbps,但是封装成TS后,因为TS补齐数据(stuffing_byte,见ISO/IEC 13818-1协议第2.4.3.5章节)、Adaptation PCR数据和PES包头的插入,最后TS流的带宽将达到588kbps,相比500kbps增高了17.6%。这在传输过程中是一笔非常高的额外开销,而且当音视频的编码带宽进一步降低时,这个比例还会增大。
根据本发明实施例,通过检测客户端的属性信息,由属性信息确定客户端对应的封装参数,其中,封装参数包括以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,其中,第一参数用于反映客户端是否支持音视频交织,第二参数用于反映客户端是否支持动态码率,第三参数用于反映客户端是否支持音频数据截断,第四参数用于反映客户端是否支持视频数据截断,第五参数用于反映客户端是否支持音频帧聚合,第六参数用于反映客户端是否支持视频帧聚合,根据封装参数对多媒体数据进行封装,将封装后的数据输出至客户端,从而解决了无法针对不同的客户端进行数据封装的问题,达到了针对不同的客户端的解析能力对多媒体数据进行封装减少数据封装引起的额外开销的效果。在保证不同类型的客户端对码流可正常解析和解码的前提下,减少码流中格式封装引起的额外开销,使得在同样的传输带宽下,可传输更多的音视频数据。
另外,本发明实施例的数据封装方案可以应对易变的场景及多样化的终端类型,可以面向互联网、面向多屏播放的应用场景。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、移动终端、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种面向多屏的场景自适应的数据封装方法,其特征在于,包括:
检测客户端的属性信息,所述属性信息用于反映所述客户端对多媒体数据封装的解析能力,所述多媒体数据包括音频数据和/或视频数据;
由所述属性信息确定所述客户端对应的封装参数,所述封装参数包括以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,其中,所述第一参数用于反映所述客户端是否支持音视频交织,所述第二参数用于反映所述客户端是否支持动态码率,所述第三参数用于反映所述客户端是否支持音频数据截断,所述第四参数用于反映所述客户端是否支持视频数据截断,所述第五参数用于反映所述客户端是否支持音频帧聚合,所述第六参数用于反映所述客户端是否支持视频帧聚合;
根据所述封装参数对所述多媒体数据进行封装;以及
将封装后的数据输出至所述客户端。
2.根据权利要求1所述的数据封装方法,其特征在于,
在根据所述封装参数对所述多媒体数据进行封装之前,所述数据封装方法还包括:获取对所述多媒体数据进行编码后的数据;通过预先建立的缓存队列对所述编码后的数据进行缓存,
根据所述封装参数对所述多媒体数据进行封装包括:根据所述封装参数对所述缓存队列中缓存的数据进行封装。
3.根据权利要求2所述的数据封装方法,其特征在于,所述缓存队列包括音频缓存队列和视频缓存队列,根据所述封装参数对所述多媒体数据进行封装包括:
由所述第一参数判断所述客户端是否支持音视频交织;
如果判断出所述客户端不支持音视频交织,则将所述音频数据缓存至所述音频缓存队列,将所述视频数据缓存至所述视频缓存队列;
比较所述音频缓存队列的队列头部的数据帧的时间戳与所述视频缓存队列的队列头部的数据帧的时间戳;以及
获取所述音频缓存队列和所述视频缓存队列中时间戳较小的数据帧进行封装。
4.根据权利要求1所述的数据封装方法,其特征在于,所述属性信息包括所述客户端的操作系统和所述操作系统对应的版本号,检测客户端的属性信息包括:检测所述客户端的操作系统和所述操作系统对应的版本号,由所述属性信息确定所述客户端对应的封装参数包括:
如果检测出所述操作系统为iOS系统且所述iOS系统的版本号为iOS3.0以上版本,则确定所述客户端不支持音视频交织、支持动态码率、支持音频数据截断、支持视频数据截断、支持音频帧聚合以及支持视频帧聚合;
如果检测出所述操作系统为Android系统且所述Android系统的版本号为Android4.0以上版本,则确定所述客户端不支持音视频交织、支持动态码率、支持音频数据截断、支持视频数据截断、支持音频帧聚合以及支持视频帧聚合;以及
如果检测出所述操作系统为Android系统且所述Android系统的版本号低于Android4.0,则确定所述客户端支持音视频交织、不支持动态码率、不支持音频数据截断、不支持视频数据截断、不支持音频帧聚合以及不支持视频帧聚合。
5.根据权利要求1所述的数据封装方法,其特征在于,根据所述封装参数对所述多媒体数据进行封装包括:
由所述第五参数判断所述客户端是否支持音频帧聚合;
如果判断出所述客户端支持音频帧聚合,则获取所述音频数据中按顺序排列的多个音频帧;
获取所述多个音频帧中第一个音频帧的数据包头信息;
以所述第一个音频帧的数据包头信息作为音频帧集合的数据包头信息对所述多个音频帧进行聚合,得到所述音频帧集合;以及
对所述音频帧集合进行封装,
和/或,根据所述封装参数对所述多媒体数据进行封装包括:
由所述第六参数判断所述客户端是否支持视频帧聚合;
如果判断出所述客户端支持视频帧聚合,则获取所述视频数据中按顺序排列的多个视频帧;
获取所述多个视频帧中第一个视频帧的数据包头信息;
以所述第一个视频帧的数据包头信息作为视频帧集合的数据包头信息对所述多个视频帧进行聚合,得到所述视频帧集合;以及
对所述视频帧集合进行封装。
6.根据权利要求5所述的数据封装方法,其特征在于,对所述多个音频帧进行聚合,得到音频帧集合包括:
判断所述客户端接收的封装后的数据包的数据长度是否为固定数据长度;
如果判断出所述客户端接收的封装后的数据包的数据长度为所述固定数据长度,则确定所述客户端接收的封装后的数据包的固定负荷和所述数据包的封包包头数据长度;
确定用于进行聚合的音频帧的个数k,所述个数k满足以下公式
其中,z为预设的比例值,Truncate((S(k)+SH+L-1)/L)表示(S(k)+SH+L-1)/L的整数部分的数值,S(k)表示所述固定数据长度,L表示所述固定负荷,SH表示所述封包包头数据长度;以及
选取k个音频帧进行音频帧聚合,得到所述音频帧集合。
7.根据权利要求5所述的数据封装方法,其特征在于,根据所述封装参数对所述多媒体数据进行封装包括:
由所述第三参数判断所述客户端是否支持音频数据截断;
如果判断出所述客户端支持音频数据截断,则确定所述音频帧集合的数据截断位置;
基于所述音频帧集合的数据截止位置将所述音频帧集合截断成第一数据块和第二数据块;
以所述第一数据块中第一个字节所属的音频帧的包头信息作为所述第一数据块的包头信息对所述第一数据块进行封装;以及
以所述第二数据块中第一个字节所属的音频帧的包头信息作为所述第二数据块的包头信息对所述第二数据块进行封装,
和/或,根据所述封装参数对所述多媒体数据进行封装包括:
由所述第四参数判断所述客户端是否支持视频数据截断;
如果判断出所述客户端支持视频数据截断,则确定所述视频帧集合的数据截断位置;
基于所述视频帧集合的数据截止位置将所述视频帧集合截断成第三数据块和第四数据块;
以所述第三数据块中第一个字节所属的视频帧的包头信息作为所述第三数据块的包头信息对所述第三数据块进行封装;以及
以所述第四数据块中第一个字节所属的视频帧的包头信息作为所述第四数据块的包头信息对所述第四数据块进行封装。
8.根据权利要求1所述的数据封装方法,其特征在于,根据所述封装参数对所述多媒体数据进行封装包括:
由所述第三参数判断所述客户端是否支持音频数据截断;
如果判断出所述客户端支持音频数据截断,则确定所述音频数据中音频帧的数据截断位置;
基于所述音频帧的数据截止位置将所述音频帧截断成第五数据块和第六数据块;
以所述音频帧的包头信息作为所述第五数据块的包头信息对所述第五数据块进行封装;以及
以所述音频帧的包头信息作为所述第六数据块的包头信息对所述第六数据块进行封装,
和/或,根据所述封装参数对所述多媒体数据进行封装包括:
由所述第四参数判断所述客户端是否支持视频数据截断;
如果判断出所述客户端支持视频数据截断,则确定所述视频数据中视频帧的数据截断位置;
基于所述视频帧的数据截止位置将所述视频帧截断成第七数据块和第八数据块;
以所述视频帧的包头信息作为所述第七数据块的包头信息对所述第七数据块进行封装;以及
以所述视频帧的包头信息作为所述第八数据块的包头信息对所述第八数据块进行封装。
9.一种面向多屏的场景自适应的数据封装装置,其特征在于,包括:
检测单元,用于检测客户端的属性信息,所述属性信息用于反映所述客户端对多媒体数据封装的解析能力,所述多媒体数据包括音频数据和/或视频数据;
确定单元,用于由所述属性信息确定所述客户端对应的封装参数,所述封装参数包括以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,其中,所述第一参数用于反映所述客户端是否支持音视频交织,所述第二参数用于反映所述客户端是否支持动态码率,所述第三参数用于反映所述客户端是否支持音频数据截断,所述第四参数用于反映所述客户端是否支持视频数据截断,所述第五参数用于反映所述客户端是否支持音频帧聚合,所述第六参数用于反映所述客户端是否支持视频帧聚合;
封装单元,用于根据所述封装参数对所述多媒体数据进行封装;以及
输出单元,用于将封装后的数据输出至所述客户端。
10.一种面向多屏的场景自适应的数据封装系统,其特征在于,包括:服务器和客户端,其中,
服务器用于检测客户端的属性信息,所述属性信息用于反映所述客户端对多媒体数据封装的解析能力,所述多媒体数据包括音频数据和/或视频数据,由所述属性信息确定所述客户端对应的封装参数,根据所述封装参数对所述多媒体数据进行封装,将封装后的数据输出至所述客户端,其中,所述封装参数包括以下至少之一:第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,其中,所述第一参数用于反映所述客户端是否支持音视频交织,所述第二参数用于反映所述客户端是否支持动态码率,所述第三参数用于反映所述客户端是否支持音频数据截断,所述第四参数用于反映所述客户端是否支持视频数据截断,所述第五参数用于反映所述客户端是否支持音频帧聚合,所述第六参数用于反映所述客户端是否支持视频帧聚合。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410302179.6A CN104079949B (zh) | 2014-06-26 | 2014-06-26 | 面向多屏的场景自适应的数据封装方法和装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410302179.6A CN104079949B (zh) | 2014-06-26 | 2014-06-26 | 面向多屏的场景自适应的数据封装方法和装置及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104079949A CN104079949A (zh) | 2014-10-01 |
CN104079949B true CN104079949B (zh) | 2017-06-16 |
Family
ID=51600956
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410302179.6A Active CN104079949B (zh) | 2014-06-26 | 2014-06-26 | 面向多屏的场景自适应的数据封装方法和装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104079949B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104333765B (zh) * | 2014-10-23 | 2018-04-10 | 无锡天脉聚源传媒科技有限公司 | 一种视频直播流的处理方法及处理装置 |
CN104506789A (zh) * | 2014-12-19 | 2015-04-08 | 天脉聚源(北京)传媒科技有限公司 | 一种投影方法及装置 |
CN106713361A (zh) * | 2017-02-24 | 2017-05-24 | 宁波联视网络科技有限公司 | 多终端多协议流媒体发布方法 |
CN111988896B (zh) * | 2020-08-05 | 2021-06-04 | 北京东华博泰科技有限公司 | 基于边缘计算网关的物联网设备管理方法及大数据云平台 |
CN115529489A (zh) * | 2021-06-24 | 2022-12-27 | 海信视像科技股份有限公司 | 显示设备、视频处理方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101312531B (zh) * | 2007-11-02 | 2010-11-17 | 北京创毅视讯科技有限公司 | 一种广播系统中的流媒体业务传输方法及流媒体帧封装器 |
CN101453286B (zh) * | 2007-12-07 | 2011-04-20 | 中兴通讯股份有限公司 | 一种多媒体广播系统中数字音频复用传输的方法 |
CN101272500B (zh) * | 2008-05-14 | 2010-12-01 | 中兴通讯股份有限公司 | 一种视音频数据流的传输方法及系统 |
CN101924742B (zh) * | 2009-06-16 | 2014-07-30 | 华为技术有限公司 | 媒体传输方法及设备、媒体存储方法及设备 |
CN103002353B (zh) * | 2011-09-16 | 2015-09-02 | 杭州海康威视数字技术股份有限公司 | 对多媒体文件进行封装的方法及装置 |
WO2013097218A1 (zh) * | 2011-12-31 | 2013-07-04 | 华为技术有限公司 | 一种流媒体数据处理方法、装置及系统 |
CN102665140B (zh) * | 2012-05-16 | 2014-04-09 | 哈尔滨工业大学深圳研究生院 | 一种avs视频帧的rtp封装方法 |
-
2014
- 2014-06-26 CN CN201410302179.6A patent/CN104079949B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN104079949A (zh) | 2014-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11665384B2 (en) | Method and apparatus for transmitting media data in multimedia transport system | |
CN104079949B (zh) | 面向多屏的场景自适应的数据封装方法和装置及系统 | |
CN104125429B (zh) | 视频数据传输的调节方法及装置 | |
CN103929681B (zh) | 一种提升低速网络中rtp视频流处理效率的方法 | |
CN1764974B (zh) | 存储多媒体数据的存储介质和再现多媒体数据的方法和设备 | |
KR100651486B1 (ko) | 네트워크를 통해 멀티미디어 컨텐츠를 전송하는 장치 및방법 | |
CN1929422B (zh) | 通信处理设备和通信控制方法 | |
EP2448174B1 (en) | An apparatus for controlling data traffic and a method for measuring QoE | |
CN110312147A (zh) | 业务数据传输的方法、系统与存储介质 | |
CN107197340A (zh) | 使用无线局域网来传送和接收数据的无线通信装置和方法 | |
US11284135B2 (en) | Communication apparatus, communication data generation method, and communication data processing method | |
CN101009824A (zh) | 一种音/视频数据的网络传输方法 | |
CN106657143A (zh) | 一种流媒体传输方法、装置、服务器及终端 | |
Baldo et al. | RTCP feedback based transmission rate control for 3G wireless multimedia streaming | |
CN104506287A (zh) | 一种td-lte应急通信下的实时语音通信方法 | |
CN108738007B (zh) | 一种音频传输方法、设备及系统 | |
EP3096524A1 (en) | Communication apparatus, communication data generation method, and communication data processing method | |
CN108419041A (zh) | 一种视频数据处理的方法和装置 | |
CN108632679B (zh) | 一种多媒体数据传输的方法和一种视联网终端 | |
CN100464586C (zh) | 基于ip机顶盒的mpeg1文件实时播放的方法 | |
US9794143B1 (en) | Video delivery over IP packet networks | |
US10298975B2 (en) | Communication apparatus, communication data generation method, and communication data processing method | |
CN103139528B (zh) | 一种音视频数据的处理方法及装置 | |
CN112153237A (zh) | 一种水印网关的保护方法及系统 | |
KR101373414B1 (ko) | 무선망에서의 mpeg-2 ts 기반 h.264/avc 비디오 전송 품질 향상을 위한 패킷 기반 비디오 스트리밍 우선 전송 방법 및 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |