一种直播时移数据存储方法
技术领域
本发明涉及流媒体通讯领域,特别是时移电视流媒体数据存储,及其在流媒体系统中的使用方法。
背景技术
用户观看直播节目时,可以根据自己的需要观看以往的节目,就是直播(Live)时移(Time Shift),也称作时移电视(Time Shift Television,简称TSTV)。为了满足用户的这种需求,通常的做法是在服务器存储大量的直播流媒体数据。
目前公开的时移存储技术,在不使用P2P时采用分片技术,即服务器按照时间标记为单位对进行直播时移数据进行存储,播放端以文件为单位进行时移播放。带来的后果就是文件数量多,不便于管理,时移播放最小单位受时间标记间隔限制。
现有的直播P2P(Peer to Peer)技术,需要直播数据块大小固定,为了保证播放器的播放,通常采用帧对齐,就需要进行数据填充。造成数据量激剧增长和存储空间的浪费。
已有的方案还不能同时支持P2P和非P2P,原因之一就是P2P和非P2P不能共用时移存储文件。
发明内容
本发明提供一种直播时移数据存储方法,文件大小不受时间标签的限制,同时满足时移单播、组播和P2P传输的需要。由于索引技术的采用,不需要帧对齐和数据填充,降低对存储空间要求和I/O开销。客户端时移播放请求方法除了需要指定起始时间外,和实时直播相完全一致。
本发明的技术方案是:直播时移数据存储方法,步骤如下:
1、在原始直播流中按照关键帧加入绝对时间信息和P2P数据块编号
在编码器向服务器发送的流数据中加入绝对时间信息,在编码器加时间信息是防止服务器和编码器时间不同步,如果使用时间服务器进行时间同步或其他方法保证服务器时间正确的前提下,也可以将流数据中加入时间信息的步骤移到服务器。
服务器在接收到流数据中, 按照设定的大小进行P2P数据块编号;每个P2P数据块中可以包含多帧的数据,同样地,一帧数据也可以分布到多个数据块;为了便于定位和播放,关键帧必须在一个数据块的第一帧。
客户端向服务器请求时移播放用的时移数据时,参数可以是播放开始时间,也可以是P2P起始数据块编号。
直播数据需要进行CDN(即内容分发网络)分发时,中心服务器(即直接接收编码器直播数据流的服务器)把已经加入绝对时间信息和P2P数据块编号的直播数据流数据发送到边缘服务器。时间信息和P2P数据块编号作为建立索引的依据,边缘服务器不得改变流数据中的绝对时间信息和P2P数据块编号信息,以保证整个系统的时间信息和P2P数据块编号统一。
2、服务器把加入的绝对时间信息和P2P数据块编号的直播流数据分频道生成直播时移文件
直播时移文件由文件头、媒体信息、流数据和索引组成。每个文件按照一定的时间长度分割,每个频道的时间长度可以不同,文件时间长度按照文件不跨天的原则设置。
服务器生成直播时移文件时,预留文件头位置。文件头包括频道标示、频道描述信息、起止时间、起止P2P数据块编号、流数量、每个流描述信息(编码、码率、帧率)、总帧数、媒体信息起始位置、流数据起始位置、索引位置和校验码。
服务器在文件头之后,存储媒体信息。如果在存储直播时移文件过程中,编码器的参数发生变化或者时间戳不连续,都要在文件中存储媒体编码信息。
每个频道可以设置最大时移时间。文件头中起止时间超过最大时移时间的文件为过期文件。服务器根据预先设定有两种处理过期文件的方法:一是自动删除,二是归档处理。
3、服务器在进行直播数据存储的同时建立索引
索引是实现时移的关键,索引算法决定了服务器响应时间。为了缩短响应时间,在本发明中,采用两级索引。一级索引为文件索引,二级索引为文件内数据流索引。一级索引节点内容包括路径在内的文件名、是否过期、对应的二级索引、开始时间、结束时间、开始P2P数据块编号和结束P2P数据块编号等,上述内容和文件头信息一致。二级索引节点内容包括时间、P2P数据块编号、数据块位置和媒体编码信息位置。
建立索引的步骤如下:
3-1) 服务器在生成直播时移文件存储媒体信息时,在一级索引中添加节点;
3-2) 随着服务器不断地接受流数据,服务器对流数据进行分析,在二级索引中添加节点;
3-3) 服务器在二级索引中添加节点时,同时更新一级索引当前节点的结束时间和结束P2P数据块编号;
3-4) 直播时移文件过期后,服务器根据过期文件处理方法的不同,及时处理该文件在一级索引中对应的节点:自动删除的过期文件,删除该文件对应的节点;归档处理的过期文件,变更该文件对应的节点内容;
3-5) 在预先设定的文件时间长度到达时,服务器根据一级索引节点内容更新文件头,并把二级索引存储到该时移数据文件尾。
服务器重新启动后,从已经存储时移数据文件的文件头中读出一级索引节点重建一级索引,从已经存储时移数据文件的索引部分读出二级索引数据,重新构建二级索引。
4、服务器接收到客户端请求,通过索引定位时移数据文件及文件内位置
客户端在单播传输时以开始播放时间为参数向服务器请求时移数据,服务器用时间作为关键值进行检索定位。P2P传输时以P2P数据块编号为参数向服务器请求数据,服务器用P2P数据块编号作为关键值进行检索定位。
时间作为关键值进行检索定位的步骤如下:
4-1) 根据客户端的请求时间,服务器在一级索引中查找该时间所在的一级索引节点;
4-2) 在上一步骤得到的一级索引节点对应的二级索引中,服务器继续查找该时间对应的二级索引节点;
4-3) 根据一级索引节点定位文件,根据二级索引节点定位媒体信息和直播流数据在文件中位置,服务器向客户端发送媒体信息和从被定位的数据块开始的直播流数据;
4-4) 服务器发送数据如果到达该文件数据流尾,服务器从一级索引中查找下一时移数据文件,继续发送下一个文件的数据流部分,客户端不需要任何特别的处理。
P2P数据块编号作为关键值进行检索定位的步骤如下:
4-5) 根据客户端的请求P2P数据块编号,服务器在一级索引中查找该时间所在的一级索引节点;
4-6) 在上一步骤得到的一级索引节点对应的二级索引中,服务器继续查找该P2P数据块编号对应的二级索引节点;
4-7) 根据一级索引节点定位文件,根据二级索引节点定位直播流数据在文件中位置,服务器向客户端发送从被定位的数据块开始的直播流数据;
4-8) 服务器发送数据如果到达该文件数据流尾,服务器从一级索引中查找下一时移数据文件,继续发送下一个文件的数据流部分,客户端不需要任何特别的处理。
本发明的有益效果是:本发明方案使文件大小不受时间标签的限制,同时满足时移单播、组播和P2P传输的需要。降低对存储空间要求和I/O开销。如客户端时移播放请求方法除了需要指定起始时间外,和实时直播相完全一致。
附图说明
图1 文件存储路径示意图
图2 数据块示意图
图3 时移数据索引示意图
图4 时移播放示意图。
具体实施方式
以下结合附图对本发明的数据存储、索引和播放的具体实施方式进行说明。本发明主要应用于个人计算机、机顶盒和电视机或移动电话等设备上进行交互式网络电视业务的实时和时移电视节目。
以单台服务器为例,本发明数据存储的具体实现方法如下:
1) 在服务器中每个频道有单独的目录,如图1中的CCTV1。每个频道又分为时移数据目录和归档数据目录。如图1中的Shifting为时移数据目录,CCTV1_20101001_20201010为归档数据目录。时移最大时间可以设置。归档数据目录按照指定的时间间隔,可以分为若干目录。图1中以10天为界,每月分为3个目录。服务器接收的直播流数据保存在时移数据目录;
2) 服务器检查编码器发送来的流数据中是否包含了时间信息(为了消除时区差异,采用格林威治时间。如不特别指出,下文中时间均指格林威治时间)。如果有时间信息,则用编码器的时间信息;如果没有时间信息,则加入时间信息。时间信息的间隔理论上可以精确到毫秒或更高,但无实际使用意义。建议精确到秒,就可以满足用户时移观看的要求;
3) 服务器在接收到的包括媒体编码信息在内的流数据中,按照设定的大小(如256K Bytes)进行P2P数据块编号。如图2 A.P2P数据块所示,为了减少客户端的存储空间的占用,每个P2P数据块中可以包含多帧数据,但关键帧必须在一个数据块的第一帧;
4) 服务器接收到的编码器直播流数据按照频道生成直播时移文件,文件的结构参见图3,文件由文件头、媒体信息、流数据和索引组成。每个文件按照持续时间分割,文件持续时间按照文件不跨天的原则可以设置为0.5、1、1.5、2、3、4、6、8、12和24小时,文件大小不受4G限制。如图1所示,CCTV1_201010010000_201010010400.liv是2010年10月1日0时整开始到4时整结束,持续4小时的直播时移数据文件;
5) 服务器在生成直播时移文件同时预留文件头位置。文件头包括频道标示、频道描述信息、起止时间、起止P2P数据块编号、流数量、每个流描述信息(编码、码率、帧率)、总帧数、媒体编码信息起始位置、流数据起始位置、索引位置和校验码;
6) 服务器在一级索引中添加节点,参见图3。节点内容包括路径在内的文件名、对应的二级索引、开始时间、结束时间、开始P2P数据块编号和结束P2P数据块编号等;
7) 服务器在文件头后记录媒体编码信息;
8) 服务器按照频道将接收到的编码器直播流数据和P2P编码进行存储(图2所示A.P2P数据块中阴影部分不存储,即每块数据的大小可能不同),同时生成二级索引,索引节点内容包括时间、P2P数据块编号、文件中的位置和对应的媒体编码信息在文件中的位置。服务器同时还要维护当前一级索引节点,更新结束时间和结束P2P数据块编号。为了减少索引节点数和保证播放效果,在数据流中包含视频流的情况下,只需建立视频流关键帧的索引;
9) 服务器在预先设定的时间到达时,更新文件头,并在该文件尾写入二级索引。然后从步骤4)开始循环。
以下以客户端使用单播和P2P结合的传输方式,说明本发明实现时移播放的具体实现方法,参见图4:
10) P2P客户端启动后首先通过单播协议向服务器媒体请求类型信息和从播放时间开始的一段数据;
11) 服务器根据请求时间在一级索引中查找该时间所在的一级索引节点,然后在该一级索引对应的二级索引查找该时间的二级索引节点,从而得到客户端请求时间对应关键帧和媒体信息在的文件中的位置;
12) 服务器向P2P客户端发送媒体请求类型信息和从该关键帧开始的数据;
13) P2P客户端通过单播协议从服务器接收到数据后在本地一边缓存一边通知播放器播放,在缓存到一定数据量后连接断开。P2P客户端在缓存数据时,需要数据块对齐(参见图2);
14) 在开始播放以后,P2P客户端向其他拥有本客户端所需数据的P2P客户端请求本客户端需要的数据块。此时,服务器也作为一个P2P客户端向其他P2P客户端提供数据;
15) 在快要播放到某个位置时,如果该位置的数据块还没有获取到,则P2P客户端使用单播协议向服务器发起请求,请求该数据块和后面相邻的部分数据块(如果这些数据块在本客户端都没有);
16) 服务器根据请求时间在一级索引中查找该数据块P2P数据块编号所在的一级索引节点,然后在该一级索引对应的二级索引查找该数据块的二级索引节点,从而得到客户端请求数据块在的文件中的位置;
17) 服务器向P2P客户端发送从该数据块开始的数据;
18) 如果发送完时移文件最后一个数据块时,下次从下一个文件的第一个数据块开始发送。
在只使用单播而不使用P2P时,不需要步骤14),由步骤13)直接跳到步骤15)。这种传输方式下,可以由播放器直接连接到服务器,服务器返回的直播流数据,不包括加入的时间信息和P2P信息,由播放器直接播放。
以上只是以单播和P2P结合的传输模式和单播传输为例说明了时移播放的实现方法。本发明可以应用的时移播放不仅仅限于这两种传输方式,也适用于TS组播和单纯P2P等方式,由于是较成熟的技术,不再赘述。