一种基于http协议的流媒体协议封装方法及装置
技术领域
本发明涉及互联网通信技术领域,尤其涉及一种基于http协议的流媒体协议封装方法及装置。
背景技术
HTTP(HyperText Transfer Protocol,超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HLS(HTTP Live Streaming)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U(m3u8)playlist文件,用于寻找可用的媒体流。HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。
目前HTTP协议在网络应用中无所不在,HTTP协议能被绝大部分的路由器、服务器支持,因此使用HTTP协议作为流媒体的基础协议相对其他比如RTSP具有更好的网络兼容性和亲和性。但是,目前基于HTTP的HLS协议采用MPEG2-TS流作为封装,HLS使用的是mpeg2ts的流封装,每188个字节一个ts包,每个包包含头部,如果不足188字节,还需要填充0xff,额外增加了数据量,在hls索引文件中,每个ts都带有标识信息和绝对的路径信息(HTTP目录信息),每个.ts文件的绝对路径信息都是一样的,不同就是他们文件名字,因此存在大量的冗余信息;ts流的协议开销太大,传输效率不高,所以本发明提出一种新的基于http协议的流媒体协议,可支持流媒体数据的直播和点播。
发明内容
本发明实施例的目的在于提出一种基于http协议的流媒体协议封装方法,旨在解决现有HLS协议过于复杂,协议开销过大,传输效率不高的问题。
本发明实施例是这样实现的,一种基于http协议的流媒体协议封装方法,所述方法包括以下步骤:
预先建立媒体数据的封装文件,所述封装文件定义了媒体数据包的特定封装格式和相应的索引信息,所有视频包和音频包按照输入的时间顺序存放在所述封装文件中;
获取编码后的媒体数据,判断所述媒体数据的类型,
若媒体数据为视频数据,则将所述视频数据中的视频帧按照视频对应的特定封装格式进行封装;
若媒体数据为音频数据,则将所述音频数据中的音频帧按照音频对应的特定封装格式进行封装;若媒体数据为空,则退出;
将封装后的视频包或音频包存储到所述封装文件中;
判断所述封装后的视频包或音频包时间大小是否不小于所述切片时间大小,
若是则同步更新所述封装后的视频包或音频包相应的索引信息;
如否则返回步骤“获取编码后的媒体数据,判断所述媒体数据的类型”。
所述媒体数据包的特定封装格式具体为:
每个媒体数据包头长度为2个字节,2字节头部信息0-15位的格式如下:
第0-2位用于存储版本标记;
第3-5位用于存储负荷类型;
第6位用于存储0或1,其中0表示头后面是4字节的解码时间戳,1表示解码时间戳后面,紧跟4字节的显示时间戳;
第7位为空;
第8-15位为空;
视频帧的负荷信息结构为:每一个时间戳信息后排列一个视频帧的负荷;
音频帧的负荷信息可选择结构1或结构2:
结构1:每一个时间戳信息后排列一个音频帧的负荷;
结构2:每一个时间戳信息后排列若干个音频帧合并成的一个数据包负荷,其中每一音频帧前面2个字节为本音频帧的长度。
所述索引信息包括以下字段:
索引头标记,表示这是一个本发明协议信息;
媒体描述,表示表示该流媒体所使用的视频音频信息;
版本标记,表示当前的协议版本号;
切片时间,表示每一个切片的时间长度;
开始序号,表示该流媒体的第一个有效切片的序号;
HTTP目录信息,表示所描述的媒体数据所在的HTTP服务器位置;
段信息,表示每个切片的名字以及每个切片的具体时长;
若为点播则所述索引信息还包括:结束信息,表示流媒体结束;若为直播则不包含结束信息字段。
本发明实施例的另一目的在于提出一种基于http协议的流媒体协议封装装置,所述装置包括:
封装文件设置模块,用于预先建立媒体数据的封装文件;所述封装文件定义了媒体数据包的特定封装格式和相应的索引信息,并用于存储按照输入的时间顺序存放的所有视频包和音频包;
媒体数据获取模块,用于获取编码后的媒体数据;
数据类型判断模块,用于判断所述媒体数据的类型,若媒体数据为视频数据,则进入视频封装模块;若媒体数据为音频数据,则进入音频封装模块;若媒体数据为空,则退出;
视频封装模块,用于将所述视频数据中的视频帧按照视频对应的特定封装格式进行封装,然后进入封装数据输出模块;
音频封装模块,用于将所述音频数据中的音频帧按照音频对应的特定封装格式进行封装,然后进入封装数据输出模块;
封装数据输出模块,用于将封装后的视频包或音频包存储到所述封装文件中;
数据包大小判断模块,用于判断所述封装后的视频包或音频包时间大小是否不小于所述切片时间大小,若是则进入索引信息更新模块,如否则返回数据类型判断模块;
索引信息更新模块,用于同步更新所述封装后的视频包或音频包相应的索引信息。
本发明的有益效果
本发明定义了一种基于HTTP协议的流媒体协议,本发明协议简单实用,开销小,支持点播和直播,用普通HTTP服务器即可,便于部署,流媒体的网络使用率比HLS有提高。
附图说明
图1是本发明优选实施例一种基于http协议的流媒体协议封装方法流程图;
图2是本发明优选实施例一种基于http协议的流媒体协议封装装置结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图和实施例,对本发明进行进一步详细说明,为了便于说明,仅示出了与本发明实施例相关的部分。应当理解,此处所描写的具体实施例,仅仅用于解释本发明,并不用以限制本发明。
本发明实施例定义了一种基于HTTP协议的流媒体协议,本发明协议简单实用,开销小,支持点播和直播,用普通HTTP服务器即可,便于部署,流媒体的网络使用率比HLS有提高。
实施例一
图1是本发明优选实施例一种基于http协议的流媒体协议封装方法流程图;所述方法包括以下步骤:
S101,预先建立媒体数据的封装文件;所述封装文件定义了媒体数据包的特定封装格式和相应的索引信息;所有视频包和音频包按照输入的时间顺序存放在所述封装文件中;
所述媒体数据包(音频包或视频包)的特定封装格式具体为:
每个媒体数据包的2字节头部信息0-15位的格式如下:
每个音频包和视频包格式一样,头长度为2个字节(16bits位),目前只用了第一个字节,第二字节保留。
视频帧的负荷信息,每个视频帧单独一个负荷,紧跟在时间戳信息后面,
视频帧的负荷信息结构为:
时间戳1 |
视频帧1 |
时间戳2 |
视频帧2 |
....... |
时间戳N |
视频帧N |
音频帧的负荷信息结构有两种:
结构1:音频帧的负荷信息结构1为每个音频帧单独一个负荷,紧跟在时间戳信息后面,具体为:
时间戳1 |
音频帧1 |
时间戳2 |
音频帧2 |
....... |
时间戳N |
音频帧N |
结构2:为了进一步减少负荷,可将多个音频帧合并成一个数据包负荷,每一音频帧前面2个字节为本音频帧的长度,具体为:
时间戳1 |
音频帧1 |
音频帧2 |
....... |
音频帧N |
所述索引信息也即媒体数据的描述信息,其为文本文件,记录了整个流媒体的全局信息。所述索引信息包括如下字段:
本发明协议支持的数据格式下:
表1:
名称 |
类别 |
H264码流 |
视频 |
AAC,AAC+ |
音频 |
AMR-NB |
音频 |
AMR-WB |
音频 |
相比HLS协议,本发明协议封装的媒体数据包中减少了0xff字段,将索引文件中相同的路径信息单独提出了,减少了部分信息,这样在2G/3G网络中能减少非数据流所占用的带宽,尽可能的提高码率的利用率。
S102,获取编码后的媒体数据,判断所述媒体数据的类型,若媒体数据为视频数据,则进入步骤S103a;若媒体数据为音频数据,则进入步骤S103b;若媒体数据为空,则退出;
S103a,将所述视频数据中的视频帧按照视频对应的特定封装格式进行封装,然后进入步骤S104;
S103b,将所述音频数据中的音频帧按照音频对应的特定封装格式进行封装,然后进入步骤S104;
S104,将封装后的视频包或音频包存储到所述封装文件中;
S105,判断所述封装后的视频包或音频包时间大小是否不小于所述切片时间大小,若是则进入步骤S106,如否则返回步骤S102;
S106,封装一个切片完成,同步更新所述封装后的视频包或音频包相应的索引信息。
重复步骤S101-S106。
实施例二
图2是本发明优选实施例一种基于http协议的流媒体协议封装装置结构图,所述装置包括:
封装文件设置模块,用于预先建立媒体数据的封装文件;所述封装文件定义了媒体数据包的特定封装格式和相应的索引信息,并用于存储按照输入的时间顺序存放的所有视频包和音频包;
所述媒体数据包(音频包或视频包)的特定封装格式具体为:
每个媒体数据包的2字节头部信息0-15位的格式如下:
每个音频包和视频包格式一样,头长度为2个字节(16bits位),目前只用了第一个字节,第二字节保留。
视频帧的负荷信息,每个视频帧单独一个负荷,紧跟在时间戳信息后面,视频帧的负荷信息结构为:
时间戳1 |
视频帧1 |
时间戳2 |
视频帧2 |
....... |
时间戳N |
视频帧N |
音频帧的负荷信息结构有两种:
结构1:音频帧的负荷信息结构1为每个音频帧单独一个负荷,紧跟在时间戳信息后面,具体为:
时间戳1 |
音频帧1 |
时间戳2 |
音频帧2 |
....... |
时间戳N |
音频帧N |
结构2:为了进一步减少负荷,可将多个音频帧合并成一个数据包负荷,每一音频帧前面2个字节为本音频帧的长度,具体为:
时间戳1 |
音频帧1 |
音频帧2 |
....... |
音频帧N |
所述索引信息也即媒体数据的描述信息,其为文本文件,记录了整个流媒体的全局信息。所述索引信息包括如下字段:
媒体数据获取模块,用于获取编码后的媒体数据;
数据类型判断模块,用于判断所述媒体数据的类型,若媒体数据为视频数据,则进入视频封装模块;若媒体数据为音频数据,则进入音频封装模块;若媒体数据为空,则退出;
视频封装模块,用于将所述视频数据中的视频帧按照视频对应的特定封装格式进行封装,然后进入封装数据输出模块;
音频封装模块,用于将所述音频数据中的音频帧按照音频对应的特定封装格式进行封装,然后进入封装数据输出模块;
封装数据输出模块,用于将封装后的视频包或音频包存储到所述封装文件中;
数据包大小判断模块,用于判断所述封装后的视频包或音频包时间大小是否不小于所述切片时间大小,若是则进入索引信息更新模块,如否则返回数据类型判断模块;
索引信息更新模块,用于同步更新所述封装后的视频包或音频包相应的索引信息。
本领域的普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序指令相关硬件来完成的,所述的程序可以存储于一计算机可读取存储介质中,所述的存储介质可以为ROM、RAM、磁盘、光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。