dash媒体流传输方法、电子设备及存储介质
技术领域
1.本发明实施例涉及通信技术领域,特别涉及一种dash媒体流传输方法、电子设备及存储介质。
背景技术:2.动态自适应流媒体(dynamic adaptive streaming over http,dash)是一种基于超文本传输协议(hyper text transfer protocol,http)自适应流式传输的流媒体传输方式。
3.dash协议的流媒体包含一个媒体演示描述(media presentation description,mpd)文件和一系列媒体分片文件。其中,mpd文件用于描述流媒体数据特征,其中包含用于存放媒体数据的所有媒体分片文件的获取方式及有效时间段。mpd文件类似于hls协议的m3u8文件,用来表示媒体文件播放清单列表,只是mpd文件采用的是标准的xml格式,其可读性更好。
4.dash协议中,媒体分片文件的格式采用mp4文件进行封装,相比于hls协议的ts文件封装,mp4文件封装更加简单,是由各个不同的box组装而成(每个box就是一个独立的结构体),且扩展性良好,所以也越来越受到更多流媒体厂商的青睐。
5.但是dash协议有一个特点是,它将音视频头解码信息分别单独放在对应的音视频初始化文件,即init.mp4文件中,这样不用每个媒体分片文件都带上音视频头解码信息,会更加轻量。但是这样的缺点是,当渲染首帧时,需要一次请求获取首个mpd文件,然后再次分别请求包含音视频头解码信息的初始化init.mp4文件,然后再次分别请求音视频媒体分片文件,这样才能开始渲染首帧,从而造成首帧渲染延时比较高,客户端播放效果较差的问题。
技术实现要素:6.本发明实施方式的目的在于提供一种dash媒体流传输方法、电子设备及存储介质,能够有效降低首帧渲染延时,改善客户端播放媒体流效果,同时可以降低对传统获取方案的改造成本。
7.为解决上述技术问题,本发明的实施方式提供了一种dash媒体流传输方法,所述方法应用于客户端,包括:
8.通过向服务端发送至多两次获取请求,从所述服务端获取待播放dash媒体流的首个mpd文件、媒体初始化文件和首个媒体分片文件;其中,所述媒体初始化文件和所述首个媒体分片文件通过一次所述获取请求获取得到;
9.根据所述首个mpd文件,向所述服务端请求后续mpd文件,并根据各次获取的mpd文件从所述服务端获取除所述首个媒体分片文件以外的其他媒体分片文件。
10.本发明实施方式相对于现有技术而言,客户端在获取dash媒体流实现直播数据播放时,先通过向服务端发送至多两次获取请求,从服务端获取待播放dash媒体流的首个mpd
文件、媒体初始化文件和首个媒体分片文件,以快速得到用于渲染dash媒体流首帧所需的文件数据,从而支持客户端对首帧媒体数据的播放操作;之后,根据首个mpd文件,向服务端请求后续mpd文件,并根据各次获取的mpd文件从服务端获取除首个媒体分片文件以外的其他媒体分片文件,以实现后续dash媒体流数据的获取过程,从而支持客户端对非首帧媒体数据的播放操作。本方案中,利用较少次数的请求过程快速请求到可以渲染dash媒体流首帧所需的全部数据,降低首帧渲染延时,改善客户端播放媒体流效果。同时,利用首个mpd文件,可以继续延用传统dash媒体流的获取方案,通过获取的mpd文件请求获取除首个媒体分片文件以外的其他媒体分片文件,从而降低对传统获取方案的改造成本。
11.另外,所述通过向服务端发送至多两次获取请求,从所述服务端获取待播放dash媒体流的首个mpd文件、媒体初始化文件和首个媒体分片文件包括:基于向所述服务端发送第一mpd请求,从所述服务端获取所述首个mpd文件;基于向所述服务端发送第一媒体初始化请求,从所述服务端获取第一初始化文件,所述第一初始化文件为包含所述媒体初始化文件和所述首个媒体分片文件的内容的mp4格式文件。通过发送两次获取请求,实现三种文件的获取。
12.另外,所述第一初始化文件包括两个box结构体,分别对应存储所述媒体初始化文件和所述首个媒体分片文件的内容。
13.另外,所述通过向服务端发送至多两次获取请求,从所述服务端获取待播放dash媒体流的首个mpd文件、媒体初始化文件和首个媒体分片文件包括:通过向所述服务端发送第二媒体初始化请求,从所述服务端获取第二初始化文件,所述第二初始化文件为包含所述首个mpd文件、所述媒体初始化文件和所述首个媒体分片文件的内容的mp4格式文件。通过发送一次获取请求,实现三种文件的获取。
14.另外,所述第二初始化文件包括三个box结构体,分别对应存储所述首个mpd文件、所述媒体初始化文件和所述首个媒体分片文件的内容。
15.另外,所述根据所述首个mpd文件,向所述服务端请求后续mpd文件,并根据各次获取的mpd文件从所述服务端获取除所述首个媒体分片文件以外的其他媒体分片文件包括:从所述首个mpd文件开始,基于当前获取的mpd文件而向所述服务端发送的第二mpd请求,从所述服务端获取下一个mpd文件;根据当前获取的mpd文件,向所述服务端发送媒体文件请求,以从所述服务器获取该mpd文件指向的除所述首个媒体分片文件以外的其他媒体分片文件。通过获取的前一个mpd文件向服务端请求获取下一个mpd文件,并根据各次获取的mpd文件获取媒体分片文件,从而完成后续待播放媒体文件的获取过程。
16.另外,在获取到所述媒体初始化文件和所述首个媒体分片文件后,基于所述媒体初始化文件对所述首个媒体分片文件执行播放操作,从而实现对首个媒体分片文件的快速播放操作。
17.另外,在获取到所述其他媒体分片文件后,基于所述媒体初始化文件对所述其他媒体分片文件执行播放操作,从而实现对非首个媒体分片文件的快速播放操作。
18.本发明的实施方式提供了另一种dash媒体流传输方法,所述方法应用于服务端,包括:
19.针对推流到所述服务端的dash媒体流,生成媒体初始化文件;
20.对所述dash媒体流进行分片,形成媒体分片文件;
21.当接收到客户端请求所述dash媒体流而发送的首个获取请求时,生成提供给所述客户端的首个mpd文件;
22.基于从客户端接收到至多两次获取请求,将所述首个mpd文件、所述媒体初始化文件和所述首个mpd文件对应的首个媒体分片文件,作为响应结果反馈给所述客户端;其中,所述媒体初始化文件和所述首个媒体分片文件作为一次所述获取请求的响应结果发出;
23.向所述客户端发送所述客户端后续基于所述首个mpd文件而请求的mpd文件,以及客户端根据各次获取的mpd文件请求的除所述首个媒体分片文件以外的其他媒体分片文件。
24.本发明实施方式相对于现有技术而言,服务端针对推流到本地的dash媒体流,生成媒体初始化文件和媒体分片文件;当接收到客户端请求dash媒体流而发送的首个获取请求时,生成提供给客户端的首个mpd文件,并基于从客户端接收到至多两次获取请求,将首个mpd文件、媒体初始化文件和首个mpd文件对应的首个媒体分片文件,作为响应结果反馈给客户端,以使客户端能够快速得到用于渲染dash媒体流首帧所需的文件数据,从而支持客户端对首帧媒体数据的播放操作;之后,向客户端发送客户端后续基于首个mpd文件而请求的mpd文件,以及客户端根据各次获取的mpd文件请求的除首个媒体分片文件以外的其他媒体分片文件,以实现向客户端提供后续dash媒体流数据的过程,从而支持客户端对非首帧媒体数据的播放操作。本方案中,基于较少次数的请求过程快速向客户端反馈可以渲染dash媒体流首帧所需的全部数据,降低首帧渲染延时,改善客户端播放媒体流效果。同时,利用首个mpd文件,可以继续延用传统dash媒体流的获取方案,通过客户端根据获取的mpd文件而发起的请求向客户端发送除首个媒体分片文件以外的其他媒体分片文件,从而降低对传统获取方案的改造成本。
25.另外,所述首个获取请求为第一mpd请求;所述基于从客户端接收到至多两次获取请求,将所述首个mpd文件、所述媒体初始化文件和所述首个mpd文件对应的首个媒体分片文件,作为响应结果反馈给所述客户端,包括:基于从所述客户端接收到所述第一mpd请求,将所述首个mpd文件作为第一次响应结果反馈给所述客户端;基于从所述客户端接收到第一媒体初始化请求,将第一初始化文件作为第二次响应结果反馈给所述客户端;所述第一初始化文件为包含所述媒体初始化文件和所述首个媒体分片文件的内容的mp4格式文件。通过接收两次获取请求,实现将三种文件提供给客户端。
26.另外,所述从所述客户端接收到第一媒体初始化请求之后还包括:构建所述第一初始化文件,所述第一初始化文件包括两个box结构体,分别对应存储所述媒体初始化文件和所述首个媒体分片文件的内容。
27.另外,所述首个获取请求为第二媒体初始化请求;所述基于从客户端接收到至多两次获取请求,将所述首个mpd文件、所述媒体初始化文件和所述首个mpd文件对应的首个媒体分片文件,作为响应结果反馈给所述客户端,包括:基于从所述客户端接收到所述第二媒体初始化请求,将第二初始化文件作为第一次响应结果反馈给所述客户端;所述第二初始化文件为包含所述首个mpd文件、所述媒体初始化文件和所述首个媒体分片文件的内容的mp4格式文件。通过接收一次获取请求,实现将三种文件提供给客户端。
28.另外,所述从所述客户端接收到第二媒体初始化请求之后还包括:构建所述第二初始化文件,所述第二初始化文件包括三个box结构体,分别对应存储所述首个mpd文件、所
述媒体初始化文件和所述首个媒体分片文件的内容。
29.另外,所述向所述客户端发送所述客户端后续请求的mpd文件,以及客户端根据各次获取的mpd文件请求的除所述首个媒体分片文件以外的其他媒体分片文件,包括:从所述首个mpd文件开始,基于接收的所述客户端基于当前获取到mpd文件而发送的第二mpd请求,向所述客户端发送下一个mpd文件;基于接收的所述客户端根据当前获取的mpd文件而发送的媒体文件请求,向所述客户端发送该mpd文件指向的除所述首个媒体分片文件以外的其他媒体分片文件。通过接收客户端基于获取的前一个mpd文件而发送的mpd请求,向客户端提供下一个mpd文件,并根据客户端各次获取的mpd文件而发送的媒体分片文件的请求,向客户端提供非首个媒体分片文件,以实现向客户端提供后续dash媒体流数据的过程。
30.本发明的实施方式还提供了一种电子设备,包括:
31.至少一个处理器;以及,
32.与所述至少一个处理器通信连接的存储器;其中,
33.所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行:
34.如上所述的一种dash媒体流传输方法,其中,所述电子设备为客户端;或者,如上所述的另一种dash媒体流传输方法,其中,所述电子设备为服务端。
35.本发明的实施方式还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的一种dash媒体流传输方法,或者,如上所述的另一种dash媒体流传输方法。
附图说明
36.一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
37.图1是现有dash媒体流传输方法的信令流程图;
38.图2是根据本发明第一实施方式的dash媒体流传输方法的具体流程图;
39.图3是根据本发明第二实施方式的dash媒体流传输方法的具体流程图;
40.图4是根据本发明第三实施方式的dash媒体流传输方法的具体流程图;
41.图5是根据本发明第四实施方式的dash媒体流传输方法的具体流程图;
42.图6是根据本发明第五实施方式的dash媒体流传输方法的具体流程图;
43.图7是根据本发明第六实施方式的dash媒体流传输方法的具体流程图;
44.图8是根据本发明第七实施方式的dash媒体流传输方法的具体流程图;
45.图9是根据本发明第八实施方式的dash媒体流传输方法的具体流程图;
46.图10是根据本发明第八实施方式的dash媒体流传输方法的信令流程图;
47.图11是根据本发明第四实施方式的电子设备的结构示意图。
具体实施方式
48.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方
式中,为了使读者更好地理解本技术而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本技术所要求保护的技术方案。
49.参照图1所示的现有dash媒体流传输方法的信令流程图,dash协议传输媒体流有一个特点是,包含音视频头解码信息的媒体初始化文件(init文件)和音视频分片文件(统称“媒体分片文件”)是分开的,即一个媒体流播放的流程是,客户端首先1.请求stream.mpd文件(即“首个mpd文件”),然后3.分两次分别请求stream_video_init.mp4文件(视频的init文件)和stream_audio_init.mp4文件(音频的init文件),之后5.再根据首个mpd文件内容,分别请求对应的视频分片文件和音频分片文件,如video
‑
1.mp4、audio
‑
1.mp4、video
‑
2.mp4、audio
‑
2.mp4
……
。这样相当于客户端需要5次http请求才能渲染dash媒体流的首帧数据,从而造成首帧渲染延时比较高,客户端播放效果较差的问题。
50.为解决该问题,本技术简化了客户端对dash媒体流的首帧数据的获取流程,客户端首次请求dash媒体流时,将请求首个mpd文件、媒体初始化文件和首个媒体分片文件的请求过程缩减为通过至多发两次获取请求完成获取过程,从而减少客户端和服务端的交互次数,使客户端能够快速获取到渲染首帧的全部数据,完成本地播放。在获取完上述三种数据之后,针对后续待获取的媒体分片文件再延用传统的媒体流的获取方法,先根据首个mpd文件获取后续mpd文件,然后利用每次获取的mpd文件获取各次对应的媒体分片文件,从而实现与传统方案的衔接,减少对传统方案的技术改造。
51.本发明第一实施方式涉及一种dash媒体流传输方法,该方法应用于客户端。如图2所示,该方法包括如下步骤:
52.步骤101:通过向服务端发送至多两次获取请求,从服务端获取待播放dash媒体流的首个mpd文件、媒体初始化文件和首个媒体分片文件;其中,媒体初始化文件和首个媒体分片文件通过一次获取请求获取得到。
53.其中,首个mpd文件为客户端请求的dash媒体流的首个mpd文件;媒体初始化文件为dash媒体流的init文件,采用mp4格式进行封装,包含用于播放媒体分片文件的必要信息,例如,音视频头解码信息;首个媒体分片文件,为客户端请求的dash媒体流的首个音视频分片文件。首个mpd文件与首个媒体分片文件对应,在首个mpd文件中至少包含首个媒体分片文件在内的至少一个媒体分片文件的媒体演示描述信息。
54.具体地,客户端在向服务端请求播放dash媒体流时,简化传统方案中发送5次http请求才能获取用于渲染首帧的全部数据的请求方案,而是采用至多发送两次获取请求,从服务端获取首个mpd文件、媒体初始化文件和首个媒体分片文件这三类文件。其中,媒体初始化文件和首个媒体分片文件通过一次获取请求获取得到。相应的,服务端根据客户端的请求,将这三类数据通过与获取请求的次数相同的响应次数,携带在响应结果中提供给客户端。例如,服务端在将媒体初始化文件和首个媒体分片文件作为一个响应结果反馈给客户端时,可将这两个文件进行拼接,然后将拼接形成后的文件携带在反馈响应中。
55.本实施例中,通过至多两次的数据获取请求,获取上述三类文件的获取顺序不做限定。在传统dash媒体流传输过程中,mpd文件采用xml格式进行封装,媒体初始化文件和媒体分片文件均是通过mp4文件进行封装。基于此,在本实施例中,可以根据这三类文件的封装格式,结合实际需求对这些文件进行拼接和重组,从而通过至多两次的获取请求所对应的响应提供给客户端。
56.实际上,客户端在获取到媒体初始化文件和首个媒体分片文件后,可以马上开始对dash媒体流的首帧进行渲染,从而降低对首帧渲染的延时,改善客户端播放效果。
57.步骤102:根据首个mpd文件,向服务端请求后续mpd文件,并根据各次获取的mpd文件从服务端获取除首个媒体分片文件以外的其他媒体分片文件。
58.具体地,客户端可以根据本地dash媒体流播放的进度,选择合适的时机根据已经获取的首个mpd文件,获取后续需要获取的mpd文件。例如,根据mpd文件中包含的媒体分片文件的名称和/或文件编号,向服务端请求获取包含后续媒体分片文件的名称和/或文件编号的mpd文件。然后,基于各次获取的mpd文件从服务端获取相应的除首个媒体分片文件以外的其他媒体分片文件。
59.与现有技术相比,本发明实施方式中客户端在获取dash媒体流实现直播数据播放时,先通过向服务端发送至多两次获取请求,从服务端获取待播放dash媒体流的首个mpd文件、媒体初始化文件和首个媒体分片文件,以快速得到用于渲染dash媒体流首帧所需的文件数据,从而支持客户端对首帧媒体数据的播放操作;之后,根据首个mpd文件,向服务端请求后续mpd文件,并根据各次获取的mpd文件从服务端获取除首个媒体分片文件以外的其他媒体分片文件,以实现后续dash媒体流数据的获取过程,从而支持客户端对非首帧媒体数据的播放操作。本方案中,利用较少次数的请求过程快速请求到可以渲染dash媒体流首帧所需的全部数据,降低首帧渲染延时,改善客户端播放媒体流效果。同时,利用首个mpd文件,可以继续延用传统dash媒体流的获取方案,通过获取的mpd文件请求获取除首个媒体分片文件以外的其他媒体分片文件,从而降低对传统获取方案的改造成本。
60.图3是根据本发明第二实施方式的dash媒体流传输方法的具体流程图,第二实施方式是在第一实施方式基础上做的改进,其改进之处在于:客户端通过发送两次获取请求,从服务端获取待播放dash媒体流的首个mpd文件、媒体初始化文件和首个媒体分片文件。
61.如图3所示,本发明实施例提供的dash媒体流传输方法中,步骤101具体包括如下子步骤:
62.子步骤1011:基于向服务端发送第一mpd请求,从服务端获取首个mpd文件。
63.具体地,客户端在向服务端请求播放dash媒体流时,先向服务端发送用于获取首个mpd文件的第一mpd请求。服务端根据第一mpd请求生成提供给客户端的针对dash媒体流的首个mpd文件。该首个mpd文件中包含用于在客户端上播放的dash媒体流的前n个媒体分片文件的媒体演示描述信息,如媒体分片文件的文件名称、文件编号等。
64.其中,首个mpd文件的封装格式可以为xml格式。
65.子步骤1012:基于向服务端发送第一媒体初始化请求,从服务端获取第一初始化文件,第一初始化文件为包含媒体初始化文件和首个媒体分片文件的内容的mp4格式文件。
66.在dash协议中,媒体初始化文件和媒体分片文件均为mp4格式文件。因此可以将媒体初始化文件和首个媒体分片文件进行拼接,形成一个新的mp4格式文件,即第一初始化文件,以方便提供给客户端。
67.其中,第一初始化文件可包括两个box结构体,分别对应存储媒体初始化文件和首个媒体分片文件的内容。关于服务端构建第一初始化文件的过程,将在后续实施方式中进行详细阐述,在此不做赘述。
68.客户端在获取到第一初始化文件后,根据媒体初始化文件对首个媒体分片文件进
行解码等处理,可以马上开始对dash媒体流的首帧进行渲染,从而降低对首帧渲染的延时,改善客户端播放效果。
69.与现有技术相比,本发明实施方式中,客户端先基于发送的第一mpd请求,从服务端获取首个mpd文件;然后,基于发送的第一媒体初始化请求,从服务端获取包含媒体初始化文件和首个媒体分片文件的第一初始化文件,从而利用两次请求过程快速请求到可以渲染dash媒体流首帧所需的全部数据,降低首帧渲染延时,改善客户端播放媒体流效果。
70.图4是根据本发明第三实施方式的dash媒体流传输方法的具体流程图,第三实施方式是在第一实施方式基础上做的改进,其改进之处在于:客户端通过发送一次获取请求,从服务端获取待播放dash媒体流的首个mpd文件、媒体初始化文件和首个媒体分片文件。
71.如图4所示,本发明实施例提供的dash媒体流传输方法中,步骤101具体包括如下子步骤:
72.子步骤1013:通过向服务端发送第二媒体初始化请求,从服务端获取第二初始化文件,第二初始化文件为包含首个mpd文件、媒体初始化文件和首个媒体分片文件的内容的mp4格式文件。
73.具体地,客户端在向服务端请求播放dash媒体流时,可只向服务端发送第二媒体初始化请求。服务端根据第二媒体初始化请求生成提供给客户端针对dash媒体流的首个mpd文件、媒体初始化文件和首个媒体分片文件的内容。其中,该首个mpd文件中包含用于在客户端上播放的dash媒体流的前n个媒体分片文件的媒体演示描述信息,如媒体分片文件的文件名称、文件编号等。
74.在dash协议中,mpd文件为xml格式。媒体初始化文件和媒体分片文件均为mp4格式文件。为了方便一次性传输,服务端可以将首个mpd文件的内容改用mp4格式文件进行封装,然后将重新封装的首个mpd文件、媒体初始化文件和首个媒体分片文件进行拼接,形成一个新的mp4格式文件,即第二初始化文件,以方便提供给客户端。
75.其中,第二初始化文件可包括三个box结构体,分别对应存储首个mpd文件、媒体初始化文件和首个媒体分片文件的内容。关于服务端构建第二初始化文件的过程,将在后续实施方式中进行详细阐述,在此不做赘述。
76.客户端在获取到第二初始化文件后,根据媒体初始化文件对首个媒体分片文件进行解码等处理,可以马上开始对dash媒体流的首帧进行渲染,从而降低对首帧渲染的延时,改善客户端播放效果。
77.与现有技术相比,本发明实施方式中,客户端基于发送的第二媒体初始化请求,从服务端获取包含首个mpd文件、媒体初始化文件和首个媒体分片文件的第二初始化文件,从而利用一次请求过程快速请求到可以渲染dash媒体流首帧所需的全部数据,降低首帧渲染延时,改善客户端播放媒体流效果。
78.图5是根据本发明第四实施方式的dash媒体流传输方法的具体流程图,第四实施方式是在以客户端为执行主体的任一实施方式基础上做的改进,其改进之处在于:对客户端获取后续媒体分片文件的过程进行细化。
79.如图5所示,本发明实施例提供的dash媒体流传输方法中,步骤102具体包括如下子步骤:
80.子步骤1021:从首个mpd文件开始,基于当前获取的mpd文件而向服务端发送的第
二mpd请求,从服务端获取下一个mpd文件。
81.具体地,基于媒体直播过程中dash媒体流的实时传输特点,服务端需要根据dash媒体流的拉流进度生成媒体切片文件,以及生成mpd文件,因此客户端是分批次获取媒体分片文件对应的mpd文件的。一个mpd文件中可以包括多个当前时间播放的媒体分片文件的媒体演示描述信息。本实施例中,客户端基于首个mpd文件所包含的媒体演示描述信息,例如媒体分片文件的名称和/或文件编号,向服务端请求获取包含已切分的后续几个媒体分片文件的名称和/或文件编号的mpd文件;接着再基于新获取的mpd文件获取下一个mpd文件,以此类推。为了与获取首个mpd文件的请求相区分,本实施例中将各次用于获取非首个mpd文件的请求均称为第二mpd请求。
82.子步骤1022:根据当前获取的mpd文件,向服务端发送媒体文件请求,以从服务器获取该mpd文件指向的除首个媒体分片文件以外的其他媒体分片文件。
83.具体地,客户端可以在每次获取到一个新的mpd文件后,马上基于该新的mpd文件向服务器发送媒体文件请求,以获取该mpd文件指向的除首个媒体分片文件以外的其他媒体分片文件。
84.与现有技术相比,本发明实施方式中,客户端在获取到首个媒体分片文件后,针对后续的媒体分片文件仍采用基于mpd文件获取的方式获取,使得在保证快速请求到可以渲染dash媒体流首帧所需的全部数据,降低首帧渲染延时,改善客户端播放媒体流效果的基础上,与基于mpd文件获取媒体分片文件的获取方式进行了很好的衔接,降低了对传统方案的改造成本。
85.此外,在以上任一实施方式提供的dash媒体流传输方法中,还包括如下步骤:
86.步骤1.在获取到媒体初始化文件和首个媒体分片文件后,基于媒体初始化文件对首个媒体分片文件执行播放操作。
87.步骤2.在获取到其他媒体分片文件后,基于媒体初始化文件对其他媒体分片文件执行播放操作。
88.通过及时对获取到的媒体分片文件,采用媒体初始化文件对其进行播放操作,从而快速、流畅的实现dash媒体流的帧数据在客户端本地进行播放,提高播放效果。
89.本发明第五实施方式涉及一种dash媒体流传输方法,该方法应用于服务端,该服务端为以上实施方式中的服务端。如图6所示,该方法包括如下步骤:
90.步骤201:针对推流到服务端的dash媒体流,生成媒体初始化文件。
91.具体地,服务端针对后台推流过来的dash媒体流,生成媒体初始化文件。其中,针对所属同一流名的dash媒体流仅生成一次媒体初始化文件。服务端将生产的媒体初始化数据采用mp4格式进行封装,以待后续使用。该媒体初始化文件可原始记录为init.mp4文件。
92.步骤202:对dash媒体流进行分片,形成媒体分片文件。
93.具体地,可以按照dash媒体流的时间节点对其进行分片,形成一系列的媒体分片文件。每个媒体分片文件对应唯一的文件名称和/或文件编号。
94.步骤203:当接收到客户端请求dash媒体流而发送的首个获取请求时,生成提供给客户端的首个mpd文件。
95.具体地,当服务器接收到客户端发送的用于请求dash媒体流的首个获取请求时,根据当前dash媒体流的直播进度,生成包含当前待播放的dash媒体流的多个媒体分片文件
对应的首个mpd文件。该mpd文件的格式可以根据客户端发送的首个获取请求的请求类型确定,而该请求类型与预先约定的客户端请求获取首个mpd文件、媒体初始化文件和首个媒体分片文件所需的请求次数有关。例如,当请求次数为两次时,即首个mpd文件是通过一次获取请求被客户端单独获取时,首个mpd文件可以为xml格式;当请求次数为一次时,即首个mpd文件是与媒体初始化文件和首个媒体分片文件通过一次获取请求被客户端整体获取时,首个mpd文件可以为mp4格式。
96.步骤204:基于从客户端接收到至多两次获取请求,将首个mpd文件、媒体初始化文件和首个mpd文件对应的首个媒体分片文件,作为响应结果反馈给所述客户端;其中,媒体初始化文件和首个媒体分片文件作为一次获取请求的响应结果发出。
97.具体地,客户端在向服务端请求播放dash媒体流时,简化传统方案中发送5次http请求才能获取用于渲染首帧的全部数据的请求方案,而是采用至多发送两次获取请求,从服务端获取首个mpd文件、媒体初始化文件和首个媒体分片文件这三类文件。其中,媒体初始化文件和首个媒体分片文件通过一次获取请求获取得到。相应的,服务端根据客户端的请求,将这三类数据通过与获取请求的次数相同的响应次数,携带在响应结果中提供给客户端。例如,服务端在将媒体初始化文件和首个媒体分片文件作为一个响应结果反馈给客户端时,可将这两个文件进行拼接,然后将拼接形成后的文件携带在反馈响应中。
98.本实施例中,服务端通过接收客户端发送的至多两次的数据获取请求,向客户端反馈上述三类文件的反馈顺序不做限定。在传统dash媒体流传输过程中,mpd文件采用xml格式进行封装,媒体初始化文件和媒体分片文件均是通过mp4文件进行封装。基于此,在本实施例中,可以根据这三类文件的封装格式,结合实际需求对这些文件进行拼接和重组,从而通过至多两次的反馈响应提供给客户端。
99.实际上,客户端在获取到媒体初始化文件和首个媒体分片文件后,可以马上开始对dash媒体流的首帧进行渲染,从而降低对首帧渲染的延时,改善客户端播放效果。
100.步骤205:向客户端发送客户端后续基于首个mpd文件而请求的mpd文件,以及客户端根据各次获取的mpd文件请求的除首个媒体分片文件以外的其他媒体分片文件。
101.具体地,服务器在向客户端提供首个mpd文件后,会接收到客户端根据首个mpd文件获取后续需要的mpd文件的请求。例如,客户端根据mpd文件中包含的媒体分片文件的名称和/或文件编号,向服务端请求获取包含后续媒体分片文件的名称和/或文件编号的mpd文件。服务器接收到获取后续mpd文件的请求后,向客户端反馈相应的mpd文件。客户端基于各次获取的mpd文件向服务端发送媒体请求,服务端接收到媒体请求后,从已生成的媒体分片文件中提取与mpd文件中相应的除首个媒体分片文件以外的其他媒体分片文件反馈给客户端。
102.与现有技术相比,本发明实施方式中,服务端针对推流到本地的dash媒体流,生成媒体初始化文件和媒体分片文件;当接收到客户端请求dash媒体流而发送的首个获取请求时,生成提供给客户端的首个mpd文件,并基于从客户端接收到至多两次获取请求,将首个mpd文件、媒体初始化文件和首个mpd文件对应的首个媒体分片文件,作为响应结果反馈给客户端,以使客户端能够快速得到用于渲染dash媒体流首帧所需的文件数据,从而支持客户端对首帧媒体数据的播放操作;之后,向客户端发送客户端后续基于首个mpd文件而请求的mpd文件,以及客户端根据各次获取的mpd文件请求的除首个媒体分片文件以外的其他媒
体分片文件,以实现向客户端提供后续dash媒体流数据的过程,从而支持客户端对非首帧媒体数据的播放操作。本方案中,基于较少次数的请求过程快速向客户端反馈可以渲染dash媒体流首帧所需的全部数据,降低首帧渲染延时,改善客户端播放媒体流效果。同时,利用首个mpd文件,可以继续延用传统dash媒体流的获取方案,通过客户端根据获取的mpd文件而发起的请求向客户端发送除首个媒体分片文件以外的其他媒体分片文件,从而降低对传统获取方案的改造成本。
103.图7是根据本发明第六实施方式的dash媒体流传输方法的具体流程图,第六实施方式是在第五实施方式基础上做的改进,其改进之处在于:基于客户端发送的两次获取请求,向客户端提供待播放dash媒体流的首个mpd文件、媒体初始化文件和首个媒体分片文件。
104.如图7所示,本发明实施例提供的dash媒体流传输方法中,所述首个获取请求为第一mpd请求;步骤204具体包括如下子步骤:
105.子步骤2041:基于从客户端接收到第一mpd请求,将首个mpd文件作为第一次响应结果反馈给客户端。
106.具体地,客户端在向服务端请求播放dash媒体流时,先向服务端发送用于获取首个mpd文件的第一mpd请求。服务端根据第一mpd请求生成提供给客户端的针对dash媒体流的首个mpd文件。该首个mpd文件中包含用于在客户端上播放的dash媒体流的前n个媒体分片文件的媒体演示描述信息,如媒体分片文件的文件名称、文件编号等。
107.其中,首个mpd文件的封装格式可以为xml格式。
108.子步骤2042:基于从客户端接收到第一媒体初始化请求,将第一初始化文件作为第二次响应结果反馈给客户端;第一初始化文件为包含媒体初始化文件和首个媒体分片文件的内容的mp4格式文件。
109.在dash协议中,媒体初始化文件和媒体分片文件均为mp4格式文件。因此服务端可以将媒体初始化文件和首个媒体分片文件进行拼接,形成一个新的mp4格式文件,即第一初始化文件,然后将第一初始化文件作为第二次响应结果反馈给客户端。
110.服务端是在从客户端接收到第一媒体初始化请求之后,构建第一初始化文件,所构建的第一初始化文件包括两个box结构体,分别对应存储媒体初始化文件和首个媒体分片文件的内容。
111.具体构建过程如下:
112.在现有mp4文件的box结构中,比如音视频初始文件init.mp4中,扩展出一个新的自定义的box,命名为wsstart
‑
box。wsstart
‑
box用来存储首个媒体分片文件的内容。这样,可以在现有的音视频初始文件init.mp4中,添加wsstart
‑
box信息。当获取到该音视频初始文件init.mp4文件的同时,也能获取到首个媒体分片文件,而不用额外一次http请求获取首个媒体分片文件的内容,省去一次http请求。本实施例中,将在原有音视频初始文件init.mp4文件中增加首个媒体分片文件的内容后的init.mp4做为上述第一初始化文件。
113.具体地,wsstart
‑
box包含5个字段type、size、filename、mediadata、mandatory。type字段表示该box的类型,值为“wsstart”,表示首个媒体分片文件;size字段表示该box的实际大小;filename字段用来存储首个媒体分片文件的文件名称;mediadata字段用来存储该媒体分片文件的内容;mandatory字段用来表示该box是否是mp4文件必须的,默认值为
false,表示不是必须的。
114.客户端在获取到第一初始化文件后,根据其中的媒体初始化文件对首个媒体分片文件进行解码等处理,可以马上开始对dash媒体流的首帧进行渲染,从而降低对首帧渲染的延时,改善客户端播放效果。
115.与现有技术相比,本发明实施方式中,服务器基于客户端先发送的第一mpd请求,向客户端提供首个mpd文件;然后,基于客户端发送的第一媒体初始化请求,向客户端提供包含媒体初始化文件和首个媒体分片文件的第一初始化文件,从而利用客户端发送的两次请求过程,快速向客户端提供可以渲染dash媒体流首帧所需的全部数据,降低首帧渲染延时,改善客户端播放媒体流效果。
116.图8是根据本发明第七实施方式的dash媒体流传输方法的具体流程图,第七实施方式是在第五实施方式基础上做的改进,其改进之处在于:基于客户端发送的一次获取请求,向客户端提供待播放dash媒体流的首个mpd文件、媒体初始化文件和首个媒体分片文件。
117.如图8所示,本发明实施例提供的dash媒体流传输方法中,所述首个获取请求为第二媒体初始化请求;步骤204具体包括如下子步骤:
118.子步骤2043:基于从客户端接收到第二媒体初始化请求,将第二初始化文件作为第一次响应结果反馈给客户端;第二初始化文件为包含首个mpd文件、媒体初始化文件和首个媒体分片文件的内容的mp4格式文件。
119.具体地,客户端在向服务端请求播放dash媒体流时,可只向服务端发送第二媒体初始化请求。服务端根据第二媒体初始化请求生成提供给客户端针对dash媒体流的首个mpd文件、媒体初始化文件和首个媒体分片文件的内容。其中,该首个mpd文件中包含用于在客户端上播放的dash媒体流的前n个媒体分片文件的媒体演示描述信息,如媒体分片文件的文件名称、文件编号等。
120.在dash协议中,mpd文件为xml格式。媒体初始化文件和媒体分片文件均为mp4格式文件。为了方便一次性传输,服务端可以将首个mpd文件的内容改用mp4格式文件进行封装,然后将重新封装的首个mpd文件、媒体初始化文件和首个媒体分片文件进行拼接,形成一个新的mp4格式文件,即第二初始化文件,以方便提供给客户端。
121.服务端是在从客户端接收到第二媒体初始化请求之后,构建第二初始化文件,所构建的第二初始化文件包括三个box结构体,分别对应存储首个mpd文件、媒体初始化文件和首个媒体分片文件的内容。
122.具体构建过程如下:
123.在现有mp4文件的box结构中,比如音视频初始文件init.mp4中,扩展出两个新的自定义的box,分别命名为wsmpd
‑
box和wsstart
‑
box。wsmpd
‑
box用来存储首个mpd文件的内容。wsstart
‑
box用来存储首个媒体分片文件的内容。这样,可以在现有的音视频初始文件init.mp4中,添加wsmpd
‑
box信息和wsstart
‑
box信息。当获取到该音视频初始文件init.mp4文件的同时,也能获取到首个mpd文件和首个媒体分片文件,而不用额外两次http请求分别获取首个mpd文件和首个媒体分片文件的内容,省去两次http请求。本实施例中,将在原有音视频初始文件init.mp4文件中增加首个mpd文件和首个媒体分片文件的内容后的init.mp4做为上述第二初始化文件。
124.具体地,wsmpd
‑
box包含4个字段type、size、content、mandatory。type字段表示该box的类型,值为“wsmpd”,表示首个mpd文件;size字段表示该box的实际大小;content字段用来存储首个mpd文件的内容,mandatory字段用来表示该box是否是mp4文件必须的,默认值为false,表示不是必须的。
125.关于wsstart
‑
box包含的字段可参考前述相关内容,在此不做赘述。
126.客户端在获取到第二初始化文件后,根据媒体初始化文件对首个媒体分片文件进行解码等处理,可以马上开始对dash媒体流的首帧进行渲染,从而降低对首帧渲染的延时,改善客户端播放效果。
127.与现有技术相比,本发明实施方式中,服务器基于客户端发送的第二媒体初始化请求,向客户端提供包含首个mpd文件、媒体初始化文件和首个媒体分片文件的第二初始化文件,从而利用客户端发送的一次请求过程,快速向客户端提供可以渲染dash媒体流首帧所需的全部数据,降低首帧渲染延时,改善客户端播放媒体流效果。
128.图9是根据本发明第八实施方式的dash媒体流传输方法的具体流程图,第八实施方式是在以服务端为执行主体的任一实施方式基础上做的改进,其改进之处在于:对服务端提供后续媒体分片文件的过程进行细化。
129.如图9所示,本发明实施例提供的dash媒体流传输方法中,步骤205具体包括如下子步骤:
130.子步骤2051:从首个mpd文件开始,基于接收的客户端当前获取到mpd文件而发送的第二mpd请求,向客户端发送下一个mpd文件。
131.具体地,基于媒体直播过程中dash媒体流的实时传输特点,服务端需要根据dash媒体流的拉流进度生成媒体切片文件,从而生成mpd文件,因此服务端是分批次提供媒体分片文件对应的mpd文件给客户端的。一个mpd文件中可以包括多个当前时间播放的媒体分片文件的媒体演示描述信息。本实施例中,服务端基于客户端在获取到首个mpd文件所包含的媒体演示描述信息,例如媒体分片文件的名称和/或文件编号,而向服务端发送mpd请求后,向客户端提供包含已切分的后续几个媒体分片文件的名称和/或文件编号的mpd文件;接着再基于客户端新获取mpd文件后发送的mpd请求,向客户端提供下一个mpd文件,以此类推。为了与获取首个mpd文件的请求相区分,本实施例中将各次用于获取非首个mpd文件的请求均称为第二mpd请求。
132.子步骤2052:基于接收的客户端根据当前获取的mpd文件而发送的媒体文件请求,向客户端发送该mpd文件指向的除首个媒体分片文件以外的其他媒体分片文件。
133.具体地,客户端可以在每次获取到一个新的mpd文件后,马上基于该新的mpd文件向服务器发送媒体文件请求,服务端基于这些媒体文件请求,向客户端提供这些mpd文件所指向的除首个媒体分片文件以外的其他媒体分片文件。
134.与现有技术相比,本发明实施方式中,服务端在向客户端提供首个媒体分片文件后,针对客户端后续请求的媒体分片文件仍采用基于mpd文件提供的方式提供给客户端,使得在保证快速向客户端提供可以渲染dash媒体流首帧所需的全部数据,降低首帧渲染延时,改善客户端播放媒体流效果的基础上,与基于mpd文件获取媒体分片文件的获取方式进行了很好的衔接,降低了对传统方案的改造成本。
135.参照图10所示,为图8所示dash媒体流传输方法的信令流程图。一个媒体流播放的
流程是,客户端首先1.请求wsstart.mp4文件(即“第二媒体初始化文件”);之后4.再根据首个mpd文件内容,分别请求对应的视频分片文件和音频分片文件,如video
‑
1.mp4、audio
‑
1.mp4、video
‑
2.mp4、audio
‑
2.mp4
……
。这样相当于客户端需要1次http请求就可以渲染dash媒体流的首帧数据,从而造成首帧渲染延时比较高,客户端播放效果较差的问题。
136.本发明第九实施方式涉及一种电子设备,如图11所示,包括至少一个处理器302;以及,与至少一个处理器302通信连接的存储器301;其中,存储器301存储有可被至少一个处理器302执行的指令,指令被至少一个处理器302执行,以使至少一个处理器302能够执行上述图2至图5任一方法实施例;其中,所述电子设备为客户端;或者,执行上述图6至图10任一方法实施例;其中,所述电子设备为服务端。
137.其中,存储器301和处理器302采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器302和存储器301的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器302处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器302。
138.处理器302负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器301可以被用于存储处理器302在执行操作时所使用的数据。
139.本发明第10实施方式涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述任一方法实施例。
140.即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read
‑
only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
141.本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。