本申请涉及网络通信技术领域,特别地,涉及一种流媒体数据的切片下载方法和装置、流媒体系统。
背景技术:
流媒体(streamingmedia)技术是一种新兴的网络传输技术,用于在网络中传输音频、视频或多媒体文件等连续时基媒体。流式传输技术就是把连续的声音和图像信息经过压缩处理后放到网络服务器上,让用户一边下载一边收听观看,而不需要等待整个文件下载到自己的机器后才可以观看的网络传输技术,只需经过几秒或几十秒的启动时延即可播放,之后边接收边播放。
以基于超文本传输协议(http,hypertexttransferprotocol)的动态流媒体传输协议(hls,httplivestreaming)为例,其工作原理是把整个流媒体数据划分成一个个小的基于http的传输流(ts,transportstream)文件来下载,每次只下载部分ts文件。在开始一个流媒体会话时,客户端会下载一个包含元数据的extendedm3u(m3u8)文件,用于寻找可用的媒体流。
基于hls的常见技术方案为:
流媒体服务:使用流媒体服务引擎提供http服务,如apache,iis,nginx等。
格式转化:使用ffmpeg等格式转换软件将flv、mp4、mp3等格式的音视频文件转换为系统能够支持的格式。
切片:使用ffmpeg或segmenter完成对音视频文件的切割,生成m3u8格式文件及ts文件。
但上述方案中,由于音视频文件会被切分为大量的小的ts文件,导致在流媒体服务器的磁盘上存储大量的文件碎片,不仅会影响磁盘的存储性能及文件读取性能,还会降低磁盘的使用寿命、降低服务器运行的稳定性。
技术实现要素:
本申请提供一种流媒体数据的切片下载方法和装置、流媒体系统,用于解决现有流媒体服务器硬盘中因存储有大量文件碎片而影响服务性能、降低系统稳定性的问题。
本申请公开的一种流媒体数据的切片下载方法,在流媒体系统的服务器侧,所述方法包括:对存储在服务器上的音视频文件进行虚拟切片处理,生成所述音视频文件的切片信息文件和切片列表文件;所述切片信息文件包括有服务器实时切片所需的信息,所述切片列表文件包括有客户端请求下载虚拟切片数据所需的信息;在收到客户端发出的音视频文件播放请求时,将对应的所述切片列表文件返回客户端;针对所述客户端根据所述切片列表文件请求下载的虚拟切片数据,根据所述切片信息文件对所述音视频文件进行实时切片,生成预设封装格式的切片文件,并返回客户端。
优选的,所述客户端请求下载虚拟切片数据所需的信息具体包括:每个虚拟切片数据对应的url地址;所述服务器实时切片所需的信息具体包括:每个虚拟切片数据对应的音视频帧起止编号以及每个音视频帧在所述音视频文件的位置、长度和时间戳;所述对存储在服务器上的音视频文件进行虚拟切片处理,生成所述音视频文件的切片信息文件和切片列表文件,具体包括:对所述音视频文件进行解封装,获取所述音视频文件的音视频编码信息、音视频采样率信息和总时长信息;根据预设的切片时长,获取每个虚拟切片数据对应的音视频帧起止编号;计算所述音视频文件的虚拟切片数据的总个数,确定并在所述切片信息文件中记录每个虚拟切片数据对应的音视频帧起止编号以及每个音视频帧在所述音视频文件的位置、长度和时间戳,确定并在所述切片列表文件中记录每个虚拟切片数据的url地址。
优选的,根据所述切片信息文件对所述音视频文件进行实时切片,生成预设封装格式的切片文件,具体包括:读取所述切片信息文件中请求下载的虚拟切片数据对应的音视频帧起止编号以及每个音视频帧在所述音视频文件的位置、长度和时间戳;从所述音视频文件的上述位置读取相应长度的媒体数据,以预设的格式封装成切片文件。
优选的,所述切片文件为传输流文件,由能够被客户端解码展现的数据包组成,所述数据包的长度为188字节,前4个字节为包头,后面184字节为音视频帧数据;所述服务器以数据包为单位向客户端返回切片文件。
优选的,所述音视频文件为mp3、mp4、mkv或flv格式的多媒体文件。
优选的,所述虚拟切片处理采用离线方式。
本申请公开的一种流媒体数据的切片下载装置,在流媒体系统的服务器侧,所述装置包括:预处理模块,用于对存储在服务器上的音视频文件进行虚拟切片处理,生成所述音视频文件的切片信息文件和切片列表文件;所述切片信息文件包括有服务器实时切片所需的信息,所述切片列表文件包括有客户端请求下载虚拟切片数据所需的信息;下载服务模块,用于在收到客户端发出的音视频文件播放请求时,将对应的所述切片列表文件返回客户端;实时切片模块,用于针对所述客户端根据所述切片列表文件请求下载的虚拟切片数据,根据所述切片信息文件对所述音视频文件进行实时切片,生成预设封装格式的切片文件,并返回客户端。
优选的,所述客户端请求下载虚拟切片数据所需的信息具体包括每个虚拟切片数据对应的url地址;所述服务器实时切片所需的信息具体包括每个虚拟切片数据对应的音视频帧起止编号以及每个音视频帧在所述音视频文件的位置、长度和时间戳;所述预处理模块包括:文件解析子模块,用于对所述音视频文件进行解封装,获取所述音视频文件的音视频编码信息、音视频采样率信息和总时长信息;帧数量计算子模块,用于根据预设的切片时长,获取每个虚拟切片数据对应的音视频帧起止编号;文件生成子模块,用于计算所述音视频文件的虚拟切片数据的总个数,确定并在所述切片信息文件中记录每个虚拟切片数据对应的音视频帧起止编号以及每个音视频帧在所述音视频文件的位置、长度和时间戳,确定并在所述切片列表文件中记录每个虚拟切片数据的url地址。
优选的,所述实时切片模块具体包括:信息读取子模块,用于针对所述客户端根据所述切片列表文件请求下载的虚拟切片数据,从相应的切片信息文件中读取该虚拟切片数据对应的音视频帧起止编号以及每个音视频帧在所述音视频文件的位置、长度和时间戳;文件生成子模块,用于从所述音视频文件的上述位置读取相应长度的媒体数据,以预设的格式封装成切片文件,并返回给客户端。
本申请公开的一种流媒体系统,包括通过网络连接的服务器和客户端,所述服务器设置有上述流媒体数据的切片下载装置。
与现有技术相比,本申请具有以下优点:
本申请优选实施例方案中,对存储在服务器中的多媒体数据只是进行了预处理,生成的切片信息文件只记录了一些音视频帧序号以及每个音视频帧的位置、长度等信息,而没有包含媒体数据,所以只会占用极小的磁盘空间,可有效解决现有流媒体服务器硬盘中因存储有大量文件碎片而影响服务性能、降低系统稳定性的问题;相应的,由于切片信息文件的存在,服务器在根据客户端的分片下载请求进行实时切片的过程中不会占用过多的cpu等资源,对系统性能不会有明显的影响。
附图说明
图1为本申请流媒体数据的切片下载方法第一实施例的流程图;
图2为本申请流媒体数据的切片下载方法第二实施例的时序图;
图3为本申请流媒体数据的切片下载装置一实施例的结构示意图;
图4为本申请流媒体系统一实施例的结构示意图;
图5为本申请实施例中音视频文件与ts文件之间的结构关系示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
参照图1,示出了本申请流媒体数据的切片下载方法第一实施例的流程,执行所述方法的流媒体系统包括通过网络连接的服务器2和多个客户端1,如图4所示。其中,在服务器一侧,所述方法包括:
步骤s101:对存储在服务器上的音视频文件进行虚拟切片处理,生成所述音视频文件的切片信息文件和切片列表文件;
本优选实施例中,上述的音视频文件可以是mp3、mp4、mkv或flv等媒体封装格式的文件。
上述的切片信息文件包括有服务器实时切片所需的信息,具体包括:每个虚拟切片数据对应的音视频帧起止编号(或音视频帧序号范围)以及每个音视频帧在所述音视频文件的位置、长度、时间戳、封装后的切片文件大小等信息;如,第一个切片数据的音视频帧的序号范围可以为0~99共100个音频帧,或0~49共50个视频帧;
上述的切片列表文件包括有客户端请求下载虚拟切片数据所需的信息,具体可以是每个虚拟切片数据对应的能够确定该切片数据在服务器上的位置以及该切片对应的音视频范围的url地址等;切片列表文件的形式可以采用m3u文件或m3u8文件等。
在具体实施时,上述虚拟切片处理过程可以采用如下步骤进行:
步骤s101-1:对需要预处理的音视频文件进行解封装,获取该音视频文件的音视频编码、音视频采样率、总时长等基本信息;
步骤s101-2:根据预设的切片时长(一般设置为5秒或10秒),获取每个虚拟切片数据包括的音视频帧的起止编号;
步骤s101-3:计算所述音视频文件的虚拟切片数据的总个数,确定并在所述切片信息文件中记录每个虚拟切片数据对应的音视频帧起止编号以及每个音视频帧在所述音视频文件的位置、长度、时间戳等信息,以及,确定并在所述切片列表文件中记录每个虚拟切片数据的url地址等信息。
不同媒体封装格式的解析过程也不一样,将上述信息记录到切片信息文件后,可以在后续的实时切片过程中,不再需要对原音视频文件进行解析,直接从切片信息文件中即可获取,减少实际切片时对cpu等系统资源的占用,进而尽可能降低实际切片过程对服务器性能的影响。
为了使客户端能够以切片文件为单位进行解码播放,本优选实施例可以采用能够支持hls播放协议的ts切片文件对音视频文件进行切片封装,也可以采用其他能够以切片文件为单位进行解码播放的文件封装方式,本申请对此不予限制。
相应的,切片列表文件优选m3u8格式的文件,切片信息文件(假定音视频文件有n个ts切片)可以采用如下格式:
文件说明,版本号等信息;
文件头信息;
ts切片1对应的音视频帧音视频信息;
ts切片2对应的音视频帧音视频信息;
……
ts切片n对应的音视频帧音视频信息;
上述各切片对应的音视频信息可以为该切片数据对应的音视频帧起止编号,每个音视频帧在音视频文件中对应的位置、长度、时间戳等,以及封装后ts包的大小等信息。
m3u8文件示例如下:
#extm3u
#ext-x-targetduration:5220
#extinf:10,
http://media.example.com/1.ts?start=0&end=10
#extinf:10,切片文件2
http://media.example.com/2.ts?start=10&end=20
#ext-x-endlist
其中,
“#extm3u”表示该m3u8文件属于扩展的m3u文件;
“#ext-x-targetduration”标签指定了媒体文件持续时间(单位:秒)的最大值,上述示例中5220表示最大持续时间为5220秒;
“#extinf”标签指定后续url所对应的切片文件以秒为单位的持续时间和切片文件标题信息,用“,”隔开;如果“,”后面为空,表示没有标题信息;该持续时间必须小于或者等于标签“#ext-x-targetduration”指定的持续时间,上述示例中的10表示切片文件1.ts的持续时间为10秒;“切片文件2”是切片文件2.ts的标题。
“http://media.example.com/1.ts?start=0&end=10”表示“#extinf”标签后面的url地址;
“#ext-x-endlist”表示切片文件列表的结束,后面不会再添加切片文件信息。
步骤s102:在收到客户端发出的音视频文件播放请求时,将对应的切片列表文件返回客户端;
客户端收到m3u8文件后会获得每个切片的下载地址,如示例中的http://media.example.com/1.ts?start=0&end=10。
步骤s103:针对所述客户端根据所述切片列表文件请求下载的虚拟切片数据,根据所述切片信息文件对所述音视频文件进行实时切片,生成预设封装格式的切片文件,并返回客户端。
本优选实施例的上述实时切片过程具体可以包括:
步骤s103-1:读取所述切片信息文件中该请求下载的虚拟切片数据对应的音视频帧起止编号,每个音视频帧在所述音视频文件的位置、长度、时间戳,以及封装包(如ts包)的大小等信息;
步骤s103-2:从所述音视频文件的上述位置读取相应长度的媒体数据,以预设的格式封装成切片文件。
上述优选实施例中,当切片文件为传输流(ts)文件时,切片文件由能够被客户端解码展现的数据包组成。以mp4文件为例,上述音视频文件以及ts文件的格式如图5所示。mp4文件由文件头(mp4头)和多个视频帧数据组成,生成的ts文件由多个ts数据包组成,每个ts数据包的长度为188字节,前4个字节为包头,后面184字节为音视频帧数据。所述服务器以ts数据包为单位向客户端返回切片文件,客户端能够以ts数据包为单位进行解码、播放操作。
在本申请的上述实现方案中,由于切片信息文件只记录了一些音视频帧序号以及每个音视频帧在音视频文件中的位置、长度等信息,而没有包含实际的媒体数据(此时服务器的存储介质中没有实际存储分片文件),所以只会占用极小的磁盘空间。另外,由于信息文件的存在,服务器在实时切片过程中也不会占用过多的cpu的资源,对性能不会有明显的损耗。
参照图2,示出了本申请流媒体数据的切片下载方法第二实施例的时序图,本优选实施例中,以ts切片方式为例进行说明,执行主体包括客户端和服务器,其中:首先由服务器对音视频文件进行预处理;之后,服务器接收客户以hls协议发出的ts播放请求,将客户端需要的ts文件实时切片封装后返回给客户端。所述方法包括:
步骤s201:服务器将存储在硬盘等存储介质中的音视频文件进行虚拟切片处理,生成对应的切片信息文件和m3u文件。
本优选实施例中,为了降低虚拟切片处理过程对系统性能的影响,提高系统的反馈速度,上述虚拟切片处理过程优选采用离线方式完成。
步骤s202:客户端要通过hls协议请求流媒体播放服务(如指定播放某个音视频文件)。
步骤s203:服务器首先返回对应的m3u文件(即步骤s201预生成的m3u文件)。
步骤s204:客户端根据m3u文件记载的内容,顺序向服务器发出ts文件的下载请求。
步骤s205:服务器根据切片信息文件对音视频文件以在线方式进行实时切片,并按预设格式生成ts切片文件。
由于服务器上实际没有存储对应的分片文件,此时需要实时生成,具体过程包括:首先查找该音视频文件对应的切片信息文件,然后读取该切片信息文件中对应该切片的数据,如该分片对应的媒体数据在原音视频文件中的位置、长度、时间戳等;媒体数据是指经过音频或视频编码的数据,如h264编码的视频帧,或aac编码的音频数据。然后,根据上述数据从原音视频文件中读取媒体数据,以ts封装格式进行封装,生成切片文件。
步骤s206:服务器将生成的ts切片文件返回给客户端。
步骤s207:客户端将收到的ts切片文件进行解码、播放。
对于前述的各方法实施例,为了描述简单,故将其都表述为一系列的动作组合,但是本领域的技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为根据本申请,某些步骤可以采用其他顺序或同时执行;其次,本领域技术人员也应该知悉,上述方法实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
参照图3,示出了本申请流媒体数据的切片下载装置一实施例的结构框图,本实施例装置配置在流媒体系统的服务器一侧,包括预处理模块211、下载请听模块212和实时切片模块213等,其中:
预处理模块211,用于对存储在服务器上的音视频文件进行虚拟切片处理,生成所述音视频文件的切片信息文件和切片列表文件;
该优选实施例中的切片信息文件包括有每个虚拟切片数据对应的音视频帧起止编号以及每个音视频帧在所述音视频文件的位置、长度、时间戳等服务器实时切片时所需的信息;切片列表文件(可以采用m3u8格式)包括有每个虚拟切片数据对应的url地址等客户端请求下载虚拟切片数据时所需的信息。
下载服务模块212,用于在收到客户端发出的音视频文件播放请求时,将上述预处理模块211生成的对应切片列表文件返回客户端;
客户端收到上述切片列表文件(如m3u8文件)后,可以根据该列表文件记载的每个虚拟切片数据的url地址等信息,顺序向服务器发出下载各切片数据文件的请求。
实时切片模块213,用于针对所述客户端根据所述切片列表文件请求下载的虚拟切片数据,根据所述切片信息文件对所述音视频文件进行实时切片,生成预设封装格式的切片文件,并返回客户端解码播放。
在进一步的优选实施例中,上述预处理模块211具体可以包括:
文件解析子模块,用于对需要预处理的音视频文件进行解封装,以获取该音视频文件的音视频编码信息、音视频采样率信息和总时长信息等;
帧数量计算子模块,用于根据预设的切片时长(如5秒或10秒等),获取每个虚拟切片数据对应的音视频帧起止编号;
文件生成子模块,用于计算上述音视频文件的虚拟切片数据的总个数,确定并在所述切片列表文件中记录每个虚拟切片数据的url地址等信息,以及,确定并在所述切片信息文件中记录每个虚拟切片数据对应的音视频帧起止编号以及每个音视频帧在所述音视频文件的位置、长度、时间戳等信息。
本申请通过上述手段,可以在后续的实时切片过程中,不再需要对原音视频文件进行解析,可以直接从信息文件中获取,减少实际切片时对cpu等系统资源的占用,提高系统处理效率。
另外,实时切片模块213具体可以包括:
信息读取子模块,用于针对客户端根据所述切片列表文件请求下载的虚拟切片数据,从相应的切片信息文件中读取该虚拟切片数据对应的音视频帧起止编号以及每个音视频帧在所述音视频文件的位置、长度、时间戳等信息;
其工作过程具体包括:首先查找到该音视频文件对应的切片信息文件,然后读取该切片信息文件中对应该切片的数据(称为metadata),该metadata存储了生成切片文件所需的详细信息,包括该切片数据对应的媒体数据在原音视频文件中的位置、长度、时间戳等;上述媒体数据是指经过音频或视频编码的数据,如h264编码的视频帧,或aac编码的音频数据。
文件生成子模块,用于从所述音视频文件的上述位置读取相应长度的媒体数据,以预设的格式(如ts封装格式)封装成切片文件,并返回给客户端解码、播放。
参照图4,示出了本申请流媒体系统一实施例的结构框图,包括通过网络连接的服务器2和多个客户端1,其中的服务器2设置图3所示的流媒体数据的切片下载装置21。
本申请系统通过上述手段,可避免在服务器的磁盘上存储大量切片数据(ts)文件,极大减小了服务器的磁盘压力,且支持常见的各种格式的音视频文件通过流媒体播放协议(如hls协议)播放,而无需对媒体文件在服务器上进行切片存储。
需要说明的是,上述装置和系统实施例属于优选实施例,所涉及的单元和模块并不一定是本申请所必须的。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于本申请的装置和系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本申请所提供的一种流媒体数据的切片下载方法和装置、流媒体系统,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。