直播HLS数据生成方法及装置、处理方法及装置和控制系统与流程

文档序号:25604338发布日期:2021-06-25 13:08阅读:312来源:国知局
直播HLS数据生成方法及装置、处理方法及装置和控制系统与流程
直播hls数据生成方法及装置、处理方法及装置和控制系统
技术领域
1.本发明属于互联网多媒体技术领域,尤其是涉及一种直播hls数据生成方法及装置、处理方法及装置和直播hls数据控制系统。


背景技术:

2.hls(http live streaming)是一种由苹果公司提出的基于http的流媒体网络传输协议。它的工作原理是服务端把视频流(或视频文件)按固定时长分成多个小的切片文件,并生成m3u8文件索引。m3u8文件中包含切片文件的访问地址。客户端通过http协议获取m3u8文件,从m3u8文件中获取切片文件列表和对应的访问地址,通过http协议依次获取切片文件并播放。
3.hls主要由两部分数据组成:切片文件和m3u8文件。
4.切片文件是视频流(或者视频文件)按固定时长划分生成的小文件,每个切片文件必须能独立解码播放,因此要求每个切片文件的第一个视频帧是可以独立解码的i帧(帧内编码帧)。切片文件的封装可以有两种:ts流(mpeg

2transport stream,iso 13818定义的mpeg传输流)、fmp4(fragment mpeg

4,isobmff)。采用ts流格式时,每个ts切片文件都能独立解码播放。采用fmp4格式时,由2部分数据组成:包含媒体数据的m4s文件(包含音频和数据数据)和元数据信息文件(包含初始化媒体播放的元数据,不包含音频和数据数据),客户播放fmp4时,首先需要获取元数据信息文件初始化播放器,然后才能解码m4s中的媒体数据。
5.m3u8文件是切片文件的索引,m3u8文件的一个例子示意如下:
6.#extm3u
7.#ext

x

version:3
8.#ext

x

media

sequence:7794
9.#ext

x

targetduration:15
10.#ext

x

key:method=aes

128,uri="https://priv.example.com/key.php?r=52"
11.#extinf:2.833,
12.http://media.example.com/filesequence52

a.ts
13.#extinf:15.0,
14.http://media.example.com/filesequence52

b.ts
15.#extinf:13.333,
16.http://media.example.com/filesequence52

c.ts
17.#ext

x

key:method=aes

128,uri="https://priv.example.com/key.php?r=53"
18.#extinf:15.0,
19.http://media.example.com/filesequence53

a.ts
20.m3u8由三种数据组成,全局tag(global tag),媒体tag(media tag)和切片uri(切片文件的访问地址)。
21.其中,全局tag通常出现在m3u8文件的开始,描述全局属性,常见的全局tag有:
22.extm3u:指示当前文件是m3u8格式的文件;
23.ext

x

version:m3u8文件的版本;
24.ext

x

media

sequence:m3u8文件中一个切片文件的sequence number;每一个切片文件都有唯一的sequence number;下一个切片文件的sequence number=当前切片sequence number+1;
25.ext

x

targetduration:切片的目标时长,单位秒。
26.媒体tag出现在切片uri之前,通常用于描述接下来出现的切片的属性,常见的媒体tag有:
27.extinf:切片的实际时长,单位秒;
28.ext

x

byterange:切片可以是一个完整的文件,也可以是一个文件中的一部分数据,ext

x

byterange指示切片数据在uri指示文件中的范围;
29.ext

x

key:如果切片进行加密,ext

x

key指示解密方法;
30.ext

x

map:指示如何获取元数据信息文件,切片封装格式是fmp4时,会出现这个tag;
31.ext

x

program

date

time:切片文件中第一个媒体数据对应的绝对时间。
32.切片uri是切片文件的http访问地址,uri可以是绝对地址,也可以是相对于m3u8的相对地址。
33.切片uri与之前媒体tag组成切片的完整描述。m3u8中所有切片的访问信息形成一个顺序播放的切片列表。
34.hls用于实现流媒体的点播和直播播放。在直播场景中,服务端接收输入视频流,当接收到固定时长的视频(例如10秒),生成一个切片文件,并更新m3u8文件,m3u8文件包含由最新生成的n个文件(例如3个文件)的媒体tag和切片uri组成的切片列表,每当一个新的切片文件加入到m3u8的切片列表,当前m3u8文件列表中最老的切片会被移除。客户端播放直播视频时,首先通过http协议获取m3u8文件,从m3u8文件中获取切片文件的访问地址,客户端依次下载切片文件并播放,同时,客户端周期性的获取m3u8文件,当m3u8文件的切片列表更新时,客户端获取新的切片访问地址,通过比较切片列表切片的sequence number,客户端发现新生成的切片,下载并播放。
35.但是,hls直播播放场景中,为了发现新生成的切片文件,客户端需要周期性的发起http请求以获取最新的m3u8文件。在弱网环境下,获取m3u8文件耗费额外的时间,增加播放卡顿的概率;如果大量客户端周期性的获取m3u8文件,无疑会增加服务器的压力。


技术实现要素:

36.针对现有技术中存在的上述缺陷,本发明的目的是,提供一种直播hls数据生成的方法及装置、直播hls数据的处理方法及装置,以缓解现有技术中为了维持直播ts数据的播放,客户端需要反复向服务端请求获取最新的m3u8文件,造成卡顿及服务器压力大和硬件资源耗费大的技术问题。
37.本发明的第一方面,提供了一种直播hls数据生成方法,所述的生成方法应用于服务器侧的服务端,该生成方法包括:
38.实时接收输入的直播流数据,得到当前周期的当前切片文件,并生成下一周期的切片文件的访问信息;
39.将当前周期的当前切片文件和下一个周期的切片文件的访问信息按照预设规则相应存储于第一存储区域中;
40.根据当前周期的当前切片文件的内容更新m3u8,生成新的m3u8文件,并将所述新的m3u8文件相应存储于第二存储区域中;
41.当接收到来自客户端的播放请求时,从所述第二存储区域中提取m3u8文件并返回给客户端,以使所述客户端能够获取当前切片文件的信息并下载切片,其中,在所述客户端下载当前切片时,还从所述第一存储区域中提取下一个周期的切片文件的访问信息并返回给客户端。
42.进一步地,下一个周期的切片文件的访问信息包括如下数据:媒体tag、切片uri、切片可用时间和切片sequence number(序号),每种数据根据预设的规则生成。
43.进一步地,所述m3u8文件的更新包括:将当期周期的切片文件的媒体tag和切片uri更新到m3u8中,同时,m3u8中扩展一个全局tag,并设置为m3u8切片列表中最后一个切片的可用时间。
44.进一步地,按预设的切片时长和切片封装格式对直播传输流数据进行切片,得到当前周期的切片文件,当切片使用fmp4封装时,在产生第一个切片之前根据码流信息生成初始化文件。
45.本发明的第二方面,还提供了一种直播hls数据的处理方法,所述的处理方法应用于服务器侧的客户端,该处理方法包括:
46.向所述服务器发送播放请求,以使所述服务器根据所述直播请求返回m3u8文件,其中,所述的m3u8文件根据预设规则存储在服务器中;
47.当接收到所述m3u8文件时,解析所述m3u8文件,基于预设的规则获取当前切片文件的信息后下载切片,在下载当前切片时,还从所述服务器中获取下一个周期的切片文件的访问信息。
48.进一步地,客户端解析m3u8文件的过程包括:
49.对m3u8文件进行解析,得到包括:切片文件时长、切片文件的解密方式、切片文件的初始化数据、切片文件的uri、切片文件的sequence number(序号)、计时时间基准、切片文件的可用时间在内的切片信息,客户端维护下载切片链表,其中,链表中每一个元素包含如下信息:切片文件的媒体tag、切片文件的uri、切片文件的sequence number、切片文件的可用时间;
50.在客户端完成m3u8文件解析后,将m3u8中的切片信息依次加入到下载切片链表中,根据计时器依次下载。
51.进一步地,客户端下载切片文件的过程包括:
52.客户端启动下载,判断是否存在初始化文件,如果存在初始化文件,首先通过http请求下载初始化文件,并将初始化文件送入解码器;
53.从所述下载切片链表中头部获取元素,每获取到一个元素,执行以下操作:如果到
达当前切片的可用时间,则跳转到下一步,如果没有到达当前切片的可用时间,等待直到到达当前切片的可用时间为止;
54.通过http请求下载切片;
55.接收直播服务器返回的http响应,从http的响应正文中获取切片数据,并将切片数据送入解码缓存中;
56.从http的响应标头中获取下一个切片的访问信息,包括媒体tag、切片文件uri、切片文件sequence number和切片文件的可用时间;
57.如果当前下载的切片是下载切片链表中最后一个元素,则将下一个切片信息加入到下载切片链表尾部,否则,丢弃下一个切片信息;
58.客户端从解码缓存中获取切片数据,解码并播放。
59.本发明的第三方面,还提供了一种直播hls数据的生成装置,所述装置应用于服务器侧的服务端,该装置包括:
60.接收模块,用于实时接收输入的直播流数据;
61.切片模块,用于根据预设时长和切片封装格式对直播流数据进行切片,得到当前周期的当前切片文件,同时,还生成下一周期的切片文件的访问信息;
62.第一存储模块,用于当前周期的当前切片文件和下一个周期的切片文件的访问信息按照预设规则相应存储于第一存储区域中;
63.第二存储模块,用于根据当前周期的当前切片文件的内容更新m3u8,生成新的m3u8文件,并将所述新的m3u8文件相应存储于第二存储区域中;
64.发送模块,用于接收到来自客户端的播放请求时,从所述第二存储区域中提取m3u8文件并返回给所述客户端,以使所述客户端能够获取当前切片文件的内容并下载,其中,在所述客户端下载当前切片时,从所述第一存储区域中提取下一个周期的切片文件的访问信息并返回给所述客户端。
65.本发明的第四方面,还提供了一种直播hls数据的处理装置,所述处理装置应用于服务器侧的客户端,该处理装置包括:
66.请求模块,用于向所述服务器发送播放请求,以使所述服务器根据所述直播请求返回m3u8文件,其中,所述m3u8文件根据预设规则存储在服务器中;
67.下载模块,用于当接收到所述m3u8文件时,解析所述m3u8文件,并基于预设的规则获取当前切片文件的信息后下载切片,在下载当前切片时,还从所述服务器中获取下一个周期的切片文件的访问信息。
68.本发明的第五方面,提供了一种直播hls数据控制系统,所述控制系统包括直播服务器,以及与所述直播服务器交互的直播hls数据的生成装置和处理装置,其中,所述生成装置用以执行本发明第一方面的直播hls数据的生成方法,所述的处理装置用以执行本发明第二方面的直播hls数据的处理方法。
69.与现有技术相比,本发明所述的一种直播hls数据生成方法及装置、处理方法及装置和控制系统,通过实时接收输入直播流数据;按预设的切片时长和切片封装格式对直播传输流数据进行切片;当前周期的切片文件和下一个周期切片的访问信息按预设规则存储于对应存储区域;生成m3u8文件,将m3u8文件存储于预设存储区域;当直播服务器接收客户端的http播放请求,返回m3u8文件;客户端获取切片的访问信息并下载切片;直播服务器返
回切片内容的同时,将下一个切片的访问信息放到http响应标头中,一并返回给客户端;客户端能从切片的http响应中获取新的切片访问信息,无需通过周期性的访问m3u8发现新切片信息,这减少了客户端与直播服务器的交互次数,降低了客户端播放卡顿的概率,减轻了服务端的压力。
附图说明
70.图1是本发明实施例一中的直播hls数据的生成方法的流程示意图。
71.图2是本发明实施例二中的直播hls数据的生成装置的架构图。
72.图3是本发明实施例三中的直播hls数据的处理方法的流程示意图。
73.图4是本发明实施例四中的直播hls数据的处理装置的架构图。
74.图5是本发明实施例三中的直播hls数据的处理方法的逻辑示意图。
75.图6是本发明实施例五中的客户端与直播服务器交互的示意图。
76.图7是本发明实施例五中的直播hls数据控制系统的架构图。
具体实施方式
77.下面详细描述本发明的实施例,所述实施例的示例在附图中示出。其中,下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
78.实施例一
79.本实施例提供了一种直播hls数据的生成方法,参照图1所示,该生成方法应用于服务器侧的服务端,该方法主要包括如下步骤:
80.步骤s101、实时接收输入的直播流数据;
81.上述直播流数据主要是ts流数据格式,ts流数据中包含pat、pmt、视频数据、音频数据,直播流数据来源于数据的提供方或加工方通过ts over udp方式传输得到,当接收到输入的直播流数据后,对数据进行解析,解析码流信息。
82.步骤s102、对直播数据流进行切片,得到当前周期的当前切片文件;
83.按预设的切片时长和切片封装格式对直播传输流数据进行切片,预设切片时长可以设置范围为2秒至15秒,预设切片封装格式可以是ts或者fmp4。其中,如果切片使用fmp4封装,在产生第一个切片之前根据码流信息生成初始化文件。由于fmp4格式,由2部分数据组成:包含媒体数据的m4s文件(包含音频和视频数据)和元数据信息文件(包含初始化媒体播放的元数据,不包含音频和视频数据),客户播放fmp4时,首先需要获取元数据信息文件初始化播放器,然后才能解码m4s中的媒体数据。当采用ts流格式时,每个ts切片文件都能独立解码播放。
84.举例来说,预设切片时长设置为6秒,预设切片封装格式设置为fmp4。由于封装格式为fmp4,直播hls数据生成装置接收到直播流数据时,首先解析直播流的音频数据和视频数据,并按预设规则(文件名规则为:init${初始化文件number})生成初始化信息文件init0.mp4;初始化文件描述了视频/音频流的个数,视频编码/音频编码的参数。直播hls数据生成装置按预设时长每6秒生成一个fmp4格式的切片,切片名称按预设规则生成(切片文件名规则:live

${sequencenumber}.m4s),例如生成的第3个切片名称为live

2.m4s。
85.步骤s103、在得到当前周期的当前切片文件后,再生成下一周期的切片文件的访
问信息;
86.其中,下一个周期切片的信息,信息包括:媒体tag、切片uri、切片可用时间和切片sequence number(序号)四种数据,每种数据对应的生成规则如下:
87.一、切片的媒体tag,媒体tag包含以下tag(标签信息):
88.extinf:设置为预设的切片时长;
89.ext

x

key:如果切片进行加密,并且加密方式发生变化,生成该媒体tag;
90.ext

x

map:切片封装格式是fmp4,并且下一个切片的初始化信息发生变化,生成该媒体tag;
91.二、切片uri:根据预设的切片地址规格生成下一个切片的uri;
92.三、切片可用时间:可用时间是指客户端客户开始下载切片的起始时间,切片可用时间设置为当前切片的可用时间加上预设的切片时长,单位为毫秒(ms);直播流生成的第一个切片的可用时间为0;
93.四、切片sequence number(序号):当前切片sequence number+1,直播流生成的第一个切片的sequence number为0。
94.举例来说,假设当前生成第3个切片,第3个切片的sequence number是2,第3切片的可用时间是0+(3

1)*6*1000=12000(ms)(0表示第一个切片文件的可用时间;3

1是第3个切片与第1个切片间隔的切片;6是预设的切片时长,单位秒;1000将秒转换为毫秒),下一个切片(第4个切片)的信息如下:
95.a)extinf:6;
96.b)ext

x

key:未加密,不生成;
97.c)ext

x

map:切片的初始化信息发生变化,不生成;
98.d)切片uri:使用相对地址:live

3.m4s;
99.e)切片可用时间:12000+6*1000=18000(ms);
100.f)切片sequence number:2+1=3。
101.步骤s104、将当前周期的当前切片文件和下一个周期的切片文件的访问信息按照预设规则相应存储于第一存储区域中;
102.当前周期的切片文件和下一个周期切片的访问信息按预设规则存储于直播服务器对应的存储区域中;如果切片使用fmp4封装格式,将生成的初始化文件按预设规则存储于直播服务器对应存储区域中。
103.其中,直播服务器可以直接划分一块内存映射成内存文件系统用户存储切片,内存文件系统的挂载路径为/dev/shm,生成的切片文件直接传输到服务器内存的/dev/shm/channel目录下(如果生成初始化信息文件,也存放在相同目录),例如第3个切片的存储路径为/dev/shm/channel/live

2.m4s,下一个切片的访问信息与切片文件数据存储于同一个文件中。
104.步骤s105、根据当前周期的当前切片文件的内容更新m3u8,生成新的m3u8文件,并将所述新的m3u8文件相应存储于第二存储区域中。
105.将当期周期的切片文件的媒体tag和切片uri更新到m3u8中,同时,m3u8中扩展一个全局tag:ext

x

current

timestamp,设置为m3u8切片列表中最后一个切片的可用时间。将m3u8文件存储于直播服务器对应存储区域,如果存储区域已经存在m3u8文件,用新m3u8
文件覆盖之前的m3u8文件。
106.本实例中m3u8保留切片最近的3个切片,假设生成第3个切片,对应生成的m3u8内容如下:
107.#extm3u
108.#ext

x

version:3
109.#ext

x

targetduration:6
110.#ext

x

media

sequence:0
111.#ext

x

current

timestamp:12000
112.#ext

x

map:uri="init0.mp4"
113.#extinf:6,
114.live

0.m4s
115.#extinf:6,
116.live

1.m4s
117.#extinf:6,
118.live

2.m4s
119.m3u8文件存储于直播服务器/dev/shm/channel/playlist.m3u8中。
120.步骤s106、当接收到来自客户端的播放请求时,从所述第二存储区域中提取m3u8文件并返回给客户端,以使所述客户端能够获取当前切片文件的信息并下载切片,其中,在所述客户端下载当前切片时,还从所述第一存储区域中提取下一个周期的切片文件的访问信息一并并返回给客户端。
121.这样,客户端能从切片的http响应中获取新的切片访问信息,无需通过周期性的访问m3u8发现新切片信息,这减少了客户端与直播服务器的交互次数,降低了客户端播放卡顿的概率,减轻服务端的压力。
122.实施例二
123.与上述实施例一相对应地,参照图2所示,本发明的实施例二提供了一种直播hls数据的生成装置,该生成装置应用于服务器侧的服务端,该生成装置包括:
124.接收模块111,用于实时接收输入的直播流数据;
125.切片模块112,用于根据预设时长和切片封装格式对直播流数据进行切片,得到当前周期的当前切片文件,同时,还生成下一周期的切片文件的访问信息;
126.第一存储模块113,用于当前周期的当前切片文件和下一个周期的切片文件的访问信息按照预设规则相应存储于第一存储模块的第一存储区域中;
127.第二存储模块114,用于根据当前周期的当前切片文件的内容更新m3u8,生成新的m3u8文件,并将所述新的m3u8文件相应存储于第二存储模块的第二存储区域中;
128.发送模块115,用于接收到来自客户端的直播播放请求时,从第二存储区域中提取m3u8文件并返回给客户端,以使客户端能够获取当前切片文件的内容并下载,其中,在客户端下载当前切片时,从第一存储区域中提取下一个周期的切片文件的访问信息一并返回给所述客户端。
129.本实施例中,生成装置通过实时接收输入直播数据流,生成当前周期切片文件、下一个周期的切片信息和m3u8文件,将生成的数据存储于直播服务器对应的存储区域,直播
服务器则响应客户端直播的http播放请求,发送m3u8文件至客户端;响应客户端切片下载请求,将请求切片的数据和下一个切片的信息发送至客户端。在收到来自客户端的播放请求指令时,根据预设规则直接下载当前切片文件,同时还获取到下一个切片的访问信息,这样,无需通过周期性的访问m3u8发现新切片信息,减少了客户端与直播服务器的交互次数,降低了客户端播放卡顿的概率,减轻了服务端的压力。
130.上述实施例二中的各模块用于执行实施例一中的方法,未详尽之处,请参阅实施例一所述,在此不再赘述。
131.实施例三
132.参照图3所示,本发明的实施例提供了一种直播hls数据的处理方法,该处理方法应用于服务器侧的客户端,该处理方法包括如下步骤:
133.步骤s301、向所述服务器发送播放请求,以使所述服务器根据所述直播请求返回m3u8文件,其中,所述的m3u8文件根据预设规则存储在服务器中;
134.步骤s302、当接收到所述m3u8文件时,解析所述m3u8文件,基于预设的规则获取当前切片文件的信息后下载切片,在下载当前切片时,还从所述服务器中获取下一个周期的切片文件的访问信息。
135.具体来说,客户端解析m3u8文件的过程包括:
136.当接收直播服务器发送的m3u8文件,对m3u8文件进行解析,得到如下数据:
137.一、切片文件时长:从extinf中获取;
138.二、切片文件的解密方式:如果存在ext

x

key,切片是被加密的,从ext

x

key中获取解码的算法和获取秘钥的uri;
139.三、切片文件的初始化数据,如果存在ext

x

map,客户端需要获取初始化文件,才能开始解码切片文件,从ext

x

map获取初始化文件的uri;
140.四、切片文件的uri:从切片文件uri中得到每个切片的下载地址;
141.五、切片文件的sequence number:ext

x

media

sequence中指定m3u8切片列表中第一个切片的sequence number,切片列表中切片的sequence number等于上一个切片的sequence number加1;第n个切片的sequence number记为:s(n);
142.六、计时时间基准t
start
:从ext

x

current

timestamp中获取时间戳,作为计时时间基准;
143.七、切片文件的可用时间:从ext

x

current

timestamp中获取时间戳,将切片列表中所有切片文件的可用时间设置为ext

x

current

timestamp中的值;第n个切片的可用时间记为:t
available
(n)。
144.客户端维护下载切片链表,其中,链表中每一个元素包含如下信息:
145.一、切片文件的媒体tag,包括切片文件时长、解密方法、初始化信息等信息;
146.二、切片文件的uri:uri(n);
147.三、切片文件的sequence number:顺序号为s(n);
148.四、切片文件的可用时间:t
available
(n)。
149.在客户端完成m3u8文件解析后,将m3u8中的切片信息依次加入到下载切片链表中,根据计时器依次下载,先启动第一个计时器,从0开始计时,逐次下载;计时器流逝的时间记为t。
150.在启动下载后,进入到切片文件的下载过程,具体包括:
151.一、客户端启动下载,如果存在初始化文件,首先通过http请求下载初始化文件,并将初始化文件送入解码器;
152.二、从下载切片链表中头部获取元素,每个获取到一个元素,执行以下操作:如果到达当前切片的可用时间(t
start
+t≥t
available
(n)),跳转到下一步骤;如果没有到达当前切片的可用时间(t
start
+t<t
available
(n)),等待直到到达当前切片的可用时间为止;
153.三、通过http请求下载切片,下载uri为uri(n);
154.四、接收直播服务器返回的http响应,从http的响应正文(body)中获取切片数据,并将切片数据送入解码缓存中;
155.五、从http的响应标头(header)中获取下一个切片的信息,包括媒体tag(需要经过base64解码)、切片文件uri、切片文件sequence number和切片文件的可用时间;
156.六、如果当前下载的切片是下载切片链表中最后一个元素,则将下一个切片信息加入到下载切片链表尾部,否则,丢弃下一个切片信息;
157.七、客户端从解码缓存中获取切片数据,解码并播放。
158.其中,如果客户端下载切片异常(例如,由于客户端网络抖动,导致下载切片速度更不上切片生成速度,客户端可能下载已经过期的切片),客户端重新通过http请求更新m3u8,客户端从m3u8中的ext

x

media

sequence中获取sequence number记为s
min
,切片下载列表中s(n)<s
min
的切片被抛弃并跳转到前面直接解析m3u8文件的步骤中。
159.配合参照图5所示,下面通过一个具体的实施例来描述客户端处理hls数据的过程。
160.1、客户端向直播服务器发起http播放请求;本实例中,请求uri为:http://live.example.com/channel/playlist.m3u8。
161.2、接收直播服务器发送的m3u8文件;本实例中,直播服务器返回的m3u8文件内容如下所示:
162.#extm3u
163.#ext

x

version:3
164.#ext

x

targetduration:6
165.#ext

x

media

sequence:0
166.#ext

x

current

timestamp:12000
167.#ext

x

map:uri="init0.mp4"
168.#extinf:6,
169.live

0.m4s
170.#extinf:6,
171.live

1.m4s
172.#extinf:6,
173.live

2.m4s。
174.3、客户端解析m3u8文件,得到以下三项信息:
175.·
初始化信息文件的访问地址:http://live.example.com/channel/init0.mp4;
176.·
有3个切片,切片的信息如下表所示:
[0177][0178]
·
计时时间基准t
start
=12000毫秒
[0179]
4、客户端维护一个下载切片链表。本实例中,在客户单内存中创建下载切片链表,为了减小直播延时,客户端从m3u8切片列表最后一个切片开始下载,因此,下载切片链表中仅加入1个切片的信息(sequence number=2,uri=http://live.example.com/channel/live

2.m4s,可用时间12000ms);客户端启动一个计时器,从0开始计时;计时器流逝的时间记为t。
[0180]
5、客户端启动下载;本实例中,客户端开启一个线程进行下载操作,由于存在初始化信息文件,下载线程首先通过http请求获取初始化文件,初始化文件uri为http://live.example.com/channel/init0.mp4,初始化信息文件送入解码器,解码器得到音频和视频的解码参数。
[0181]
6、下载线程从下载切片链表中头部获取元素,假设此时计时器t=1秒,从下载链表中获取的元素内容如下:(sequence number=2,uri=http://live.example.com/channel/live

2.m4s,可用时间12000ms),该切片已经到达可用时间(tstart+t=12000+1000=13000≥tavailable(3)=12000),开始下载切片文件。
[0182]
7、通过http请求下载切片,其中,下载的uri地址为:http://live.example.com/channel/live

2.m4s。
[0183]
8、接收直播服务器返回的http响应,从http的响应正文(body)中获取切片数据,并将切片数据送入解码缓存中;本实例中,直播服务器返回live

2.m4s内容,其中包含6秒的音视频数据。
[0184]
9、从http的响应标头(header)中获取下一个切片的信息;本实例中,获取到下一个切片的信息为:sequence number=3,切片时长=6秒,切片uri=http://live.example.com/channel/live

3.m4s,可用时间=18000ms。由于当前下载的切片是下载切片链表中最后一个元素,所以将下一个切片信息加入到下载切片链表的尾部。
[0185]
10、客户端启动解码线程,解码线程从解码缓存中获取切片数据,解码并播放。解码和下载在不同线程中运行,减少下载操作和解码操作的相互影响。
[0186]
11、下载线程再次从下载切片链表中头部获取元素,假设下载live

2.m4s耗费3秒,此时计时器t=4秒,从下载链表中获取的元素内容如下:(sequence number=3,uri=http://live.example.com/channel/live

3.m4s,可用时间18000ms),由于还未到达切片可用时间(t
start
+t=12000+4000=16000<t
available
(4)=18000),下载线程休眠2秒,开始下
载切片,后续流程在前述步骤7

11循环。
[0187]
其中,客户端与直播服务器的交互流程如图6所示。
[0188]
实施例四
[0189]
参照图4所示,本发明的实施例提供了一种直播hls数据的处理装置,该处理装置应用于服务器侧的客户端,该处理装置包括:
[0190]
请求模块311,用于向直播服务器发送直播请求,以使服务器根据该直播请求返回m3u8文件,其中,所述m3u8文件根据预设规则存储在服务器中;
[0191]
下载模块312,用于当接收到所述m3u8文件时,解析所述m3u8文件,获取当前切片文件的信息后下载切片,在下载当前切片时,还从服务器中获取下一个周期的切片文件的访问信息,返回给客户端。
[0192]
由于客户端在解析当前切片文件时,还同时获取到了下一个切片的信息,这样,无需通过周期性的访问m3u8发现新切片信息,减少了客户端与直播服务器的交互次数,降低了客户端播放卡顿的概率,减轻服务端的压力。
[0193]
上述实施例四中的各模块用于执行实施例三中的方法,未详尽之处,请参阅实施例三所述,在此不再赘述。
[0194]
实施例五
[0195]
参照图7所示,本发明的另一实施例提供了一种直播hls数据控制系统,该控制系统包括直播服务器,以及与该直播服务器交互的直播hls数据生成装置和处理装置,其中,该生成装置用以执行实施例一中的直播hls数据的生成方法,该处理装置用以执行实施例三中的直播hls数据的处理方法。
[0196]
数据生成装置用于当前周期的切片文件和下一个周期切片的访问信息按预设规则存储于直播服务器对应存储区域。需要说明的是,直播hls数据生成装置和直播服务器可以是两个逻辑单元,两个逻辑单元可以部署在同一台服务器上,直播hls数据生成装置直接将切片文件移动直播服务器的发布目录;直播hls数据生成装置和直播服务器也可以部署在不同的服务器端,直播hls数据生成装置通过ftp、nfs等文件传输协议将切片文件传输到直播服务器指定目录。本实例中,直播hls数据生成装置和直播服务器优选部署在同一台服务器上,直播服务器划分一块内存映射成内存文件系统用户存储切片,内存文件系统的挂载路径为/dev/shm,直播hls数据生成装置将切片文件传输到/dev/shm/channel目录下(如果生成初始化信息文件,也存放在相同目录)。切片名称按预设规则生成(切片文件名规则:live

${sequencenumber}.m4s),假设当前生成第3个切片,第3个切片的存储路径为/dev/shm/channel/live

2.m4s,下一个切片的信息与切片文件数据存储于同一个文件中。
[0197]
直播服务器接收客户端的http播放请求,服务器将直播uri对应的m3u8文件发送至客户端;本实例中,将直播服务器的/dev/shm目录映射为http服务的发布根目录,直播服务器的访问域名为live.example.com,当客户端向服务器发送请求http://live.example.com/channel/playlist.m3u8时,直播服务器将/dev/shm/channel/playlist.m3u8文件返回客户端。playlist.m3u8中描述了1个初始化文件信息和3个切片的信息,init0.mp4、live

0.m4s、live

1.m4s、live

2.m4s。客户端通过http请求获取初始化文件,在按顺序依次获取live

0.m4s、live

1.m4s、live

2.m4s,为了减小直播的延时,客户端可以选择从最新的切片开始下载,即live

2.m4s,放弃live

0.m4s、live

1.m4s。
[0198]
直播服务器接收客户端的http初始化文件下载请求,服务器将uri对应的初始化文件发送至客户端。直播服务器接收客户端的http切片下载请求,服务器根据http请求uri信息,从存储区域中查到对应的切片文件和下一个切片的访问信息,切片文件通过http的响应正文返回,下一个切片的信息在http响应的标头(header)中返回四种数据,并通过如下规则返回。
[0199]
http响应标头(响应标头)中扩展一个字段next

segment

media

tags,设置为下一个切片的媒体tag,由于可能存在多个媒体tag,为了适应http响应标头的规范,媒体tag数据经过base64编码后设置到next

segment

media

tags;
[0200]
http响应标头中扩展一个字段next

segment

media

sequence,设置为下一个切片的sequence number;
[0201]
http响应标头中扩展一个字段next

segment

available

timestamp,设置为下一个切片的可用时间;
[0202]
http响应标头中扩展一个字段next

segment

uri,设置为下一个切片的uri。
[0203]
为了方便说明,现假设本实施例中,直播服务器接收到客户端请求的第3个切片:http://live.example.com/channel/live

2.m4s。直播服务器读取/dev/shm/channel/live

2.m4s文件,提取第3个切片数据和第4个切片的访问信息,通过http响应返回数据,http响应内容如下:
[0204]
http/1.1 200ok
[0205]
date:mon,27jul 2020 00:59:16gmt
[0206]
content

type:video/mp4
[0207]
content

length:217328
[0208]
connection:keep

alive
[0209]
cache

control:public,max

age=60
[0210]
etag:"03a3d5b50fa7b2a7a7d38e3749f34e68"
[0211]
last

modified:mon,27jul 2020 00:59:06gmt
[0212]
next

segment

media

tags:i0vyvelorjo2la==
[0213]
next

segment

media

sequence:3
[0214]
next

segment

available

timestamp:18000
[0215]
next

segment

uri:live

3.m4s
[0216]
<live

2.m4s数据>
[0217]
其中:next

segment

media

tags由第4个切片的媒体tag(#extinf:6,)经过base64编码得到。
[0218]
本实施例所公开的一种直播hls数据控制系统,由生成装置生成m3u8文件和切片文件(含下一周期的切片文件的访问信息)并发送给直播服务器存储,直播服务器根据处理装置的请求,发送m3u8文件和切片文件(含下一周期的切片的访问信息)给处理装置,处理装置再一并返回给客户端,这样,客户端能从切片的http响应中获取新的切片访问信息,无需通过周期性的访问m3u8发现新切片信息,这减少了客户端与直播服务器的交互次数,降低了客户端播放卡顿的概率,减轻服务端的压力。
[0219]
在本申请所提供的几个实施例中,应该理解到,所揭露的方法和装置,可以通过其
它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0220]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0221]
上述说明示出并描述了本发明的若干优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1