发明内容
本发明实施例提供一种流媒体数据的处理方法,用以解决现有技术将输入的原始容器文件转换为统一格式的新容器文件的过程中,处理过程复杂,占用处理资源较多的问题。
对应地,本发明实施例还提供了一种流媒体数据的播放方法、一种流媒体数据的下载方法、一种流媒体数据的处理装置、一种流媒体客户端和一种流媒体服务器。
本发明实施例提供的技术方案如下:
一种流媒体数据的处理方法,包括:
接收输入的原始容器文件,所述原始容器文件中包含原始媒体数据流;
从所述原始容器文件中解析出每一帧流媒体数据,并获得该帧流媒体数据在所述原始容器文件中的偏移位置;
将所述每一帧流媒体数据、以及该帧流媒体数据在所述原始容器文件中的偏移位置写入新容器文件的载荷部分;
在新容器文件的文件头中写入该新容器文件的元数据,以及所述原始容器文件中原始媒体数据流的元数据。
一种流媒体数据的播放方法,包括:
向流媒体服务器发送在线播放请求,所述在线播放请求中携带新容器文件的标识;
接收返回的新容器文件的文件头和索引列表,所述索引列表包含至少一个关键帧的流媒体数据在所述新容器文件中的偏移位置、各关键帧在原始容器文件所包含的原始媒体数据流中的播放时间;
根据所述索引列表中各关键帧的播放时间,选择其中一个关键帧的播放时间;
从所述索引列表中,查找到选择出的关键帧的播放时间对应的关键帧在所述新容器文件中的偏移位置;
向所述流媒体服务器发送数据获取请求,所述数据获取请求携带查找到的偏移位置,用于获取以该偏移位置为起始点,至少1帧的流媒体数据;
根据所述文件头中的数据格式,播放流媒体服务器返回的流媒体数据。
一种流媒体数据的播放方法,包括:
接收流媒体客户端发送的在线播放请求,所述在线播放请求中携带新容器文件的标识;
发送所述新容器文件的标识对应的新容器文件的文件头和索引列表,所述索引列表包含关键帧的流媒体数据在所述新容器文件中的偏移位置和关键帧在原始容器文件所包含的原始媒体数据流中的播放时间;
接收数据获取请求,所述数据获取请求中携带有偏移位置,该偏移位置是所述流媒体客户端根据所述索引列表确定出的一个关键帧的流媒体数据在所述新容器文件中的偏移位置;
根据所述获取请求中的偏移位置,向流媒体客户端返回新容器文件中以该偏移位置为起始点,至少1帧的流媒体数据。
一种流媒体数据的下载方法,包括:
流媒体服务器接收流媒体客户端发送的下载请求,所述下载请求中携带新容器文件的标识;
流媒体服务器根据所述新容器文件的标识对应的新容器文件中,每帧流媒体数据在原始容器文件中的偏移位置,将该帧流媒体数据写入一个文件中,从而生成还原的容器文件;
流媒体服务器将所述还原的容器文件发送给所述流媒体客户端。
一种流媒体数据的下载方法,包括:
流媒体服务器接收流媒体客户端发送的下载请求,所述下载请求中携带新容器文件的标识;
判断所述新容器文件标识对应的新容器文件中是否包含原始容器文件;
若是,从所述新容器文件中读取原始容器文件,并将所述原始容器文件发送给流媒体客户端;
否则,流媒体服务器根据所述新容器文件的标识对应的新容器文件中,每帧流媒体数据在原始容器文件中的偏移位置,将该帧流媒体数据写入一个文件中,从而生成还原的容器文件;将所述还原的容器文件发送给所述流媒体客户端。
一种流媒体数据的处理装置,包括:
第一接收单元,用于接收输入的原始容器文件,所述原始容器文件中包含原始媒体数据流;
解析单元,用于从所述原始容器文件中解析出每一帧流媒体数据,并获得该帧流媒体数据在所述原始容器文件中的偏移位置;
第一写入单元,用于将所述每一帧流媒体数据、以及该帧流媒体数据在所述原始容器文件中的偏移位置写入新容器文件的载荷部分;
第二写入单元,用于在新容器文件的文件头中写入该新容器文件的元数据,以及所述原始容器文件中原始媒体数据流的元数据。
一种流媒体客户端,包括:
第一发送单元,用于向流媒体服务器发送在线播放请求,所述在线播放请求中携带新容器文件的标识;
第二接收单元,用于接收返回的新容器文件的文件头和索引列表,所述索引列表包含至少一个关键帧的流媒体数据在所述新容器文件中的偏移位置、各关键帧在原始容器文件所包含的原始媒体数据流中的播放时间;
选择单元,用于根据第二接收单元接收的所述索引列表中各关键帧的播放时间,选择其中一个关键帧的播放时间;
查找单元,用于从所述索引列表中,查找到选择单元选择出的关键帧的播放时间对应的关键帧在所述新容器文件中的偏移位置
第二发送单元,用于向所述流媒体服务器发送数据获取请求,所述数据获取请求携带查找到的偏移位置,用于获取以该偏移位置为起始点,至少1帧的流媒体数据;
播放单元,用于根据第二接收单元接收到的所述文件头中的数据格式,播放流媒体服务器返回的流媒体数据。
一种流媒体服务器,包括:
第三接收单元,用于接收流媒体客户端发送的在线播放请求,所述在线播放请求中携带新容器文件的标识;
第三发送单元,用于发送所述新容器文件的标识对应的新容器文件的文件头和索引列表,所述索引列表包含关键帧的流媒体数据在所述新容器文件中的偏移位置和关键帧在原始容器文件所包含的原始媒体数据流中的播放时间;
第四接收单元,用于接收数据获取请求,所述数据获取请求中携带有偏移位置,该偏移位置是所述流媒体客户端根据所述索引列表确定出的一个关键帧的流媒体数据在所述新容器文件中的偏移位置;
第四发送单元,用于根据所述获取请求中的偏移位置,向流媒体客户端返回以该偏移位置为起始点,至少1帧的流媒体数据。
一种流媒体服务器,包括:
第五接收单元,用于接收流媒体客户端发送的下载请求,所述下载请求中携带新容器文件的标识;
第二还原单元,用于根据所述新容器文件的标识对应的新容器文件中,每帧流媒体数据在原始容器文件中的偏移位置,将该帧流媒体数据写入一个文件中,从而生成还原的容器文件;
第五发送单元,用于将所述第二还原单元还原的容器文件发送给所述流媒体客户端。
一种流媒体服务器,包括:
第五接收单元,用于接收流媒体客户端发送的下载请求,所述下载请求中携带新容器文件的标识;
判断单元,用于判断第五接收单元接收到得所述新容器文件标识对应的新容器文件中是否包含原始容器文件;
读取单元,用于判断单元判断出包含原始容器文件时,从所述新容器文件中读取原始容器文件,触发第五发送单元将读取的原始容器文件发送给流媒体客户端;
第二还原单元,用于判断单元判断出未包含原始容器文件时,根据所述新容器文件的标识对应的新容器文件中,每帧流媒体数据在原始容器文件中的偏移位置,将该帧流媒体数据写入一个文件中,从而生成还原的容器文件;触发第五发送单元将还原的容器文件发送给所述流媒体客户端。
本发明实施例提供的流媒体数据的处理方案,在将输入的原始容器文件转换为统一格式的新容器文件的过程中,在新容器文件中写入码流分析器解析出的每一帧流媒体数据、以及该帧流媒体数据在所述原始容器文件中的偏移位置。从而无需对原始流媒体文件中的流媒体数据进行解码以及重新编码,就可以将原始容器文件转换为新的容器文件,如果对多个不同格式的原始容器进行这种转换,就可以将它们转换成统一格式的新容器文件,简化了转换过程中处理的复杂性,提高了转换效率。
具体实施方式
附图1为现有技术中视频网站或者视频库对流媒体数据的处理流程示意图,要经过解码和编码两个阶段,将流媒体数据封装为预定统一的容器格式的容器文件后,基于该预定统一的容器格式的容器文件进行流媒体在线播放和下载。
由于现有技术在将原始容器文件、以及原始容器文件中的媒体数据流处理为统一格式的容器文件和媒体数据流的过程中需要经过解码和编码两个阶段,除了会占用系统大量的处理资源、延长处理时间之外,由于重新封装时只保留了视频数据和音频数据,丢失了原始容器文件中的媒体流管理信息等其他信息,因此无法还原出原始容器文件,在需要原始容器文件作为证据的场景下将无法满足要求。
下面结合各个附图对本发明实施例技术方案的主要实现原理、具体实施方式及其对应能够达到的有益效果进行详细的阐述。
如图2所示,本发明实施例的主要实现原理流程如下:
步骤10,接收输入的原始容器文件,所述原始容器文件中包含原始媒体数据流;原始媒体数据流可以为音频流、视频流等等。
步骤20,从所述原始流媒体文件中解析出每一帧流媒体数据,并获得该帧流媒体数据在所述原始容器文件中的偏移位置;
步骤30,将所述每一帧流媒体数据、以及该帧流媒体数据在所述原始容器文件中的偏移位置写入新容器文件的载荷部分;
步骤40,在新容器文件的文件头中写入该新容器文件的元数据,以及所述原始容器文件中原始媒体数据流的元数据。
下面将依据本发明上述发明原理,详细介绍几个实施例来对本发明方法的主要实现原理进行详细的阐述和说明。
实施例一
如附图3所示,本实施例提供了一个具体实例,对附图2所示的流媒体数据的处理原理进行详细说明。在本实施例中,为简明起见,具体实例仅以原始容器文件中的原始视频流为例进行说明,对其他类型以数据帧的方式存储的媒体流,如音频流等,可以采用类似原理进行处理。
步骤301,流媒体服务器接收输入的原始容器文件。
本实施例中原始容器文件可以是用户上传的容器文件、或者是具有摄像功能的视频采集设备或/和具有录音功能的音频采集设备(如摄像头、数码摄像机、录音笔)生成的容器文件、也可以是流媒体处理软件生成的容器文件。该原始容器文件中包含原始视频流。
步骤302,触发对所示原始容器文件中原始视频流的数据格式进行探测。
码流分析器是一种现有的视频分析软件,用于对输入的数据进行格式检查,输出每帧流媒体数据和每帧流媒体数据在原始容器文件中的偏移位置,如每帧视频数据在原始容器文件中的偏移位置、每帧音频数据在原始容器文件中的偏移位置。码流分析器由若干码流分析模块组成,每个码流分析模块可以分析对应的一种格式的数据。
可以依次调用码流分析器中的各码流分析模块,尝试解析原始容器文件中起始部分的少量数据,解析结果中包含数据格式。当遇到第一个码流分析器的解析结果中包含可识别的数据格式时,探测就可以结束。
步骤303,根据探测结果,判断是否支持原始视频流的数据格式,若支持,则进入步骤304,否则处理结束。
若依次调用了所有码流分析模块后,从解析结果中均无法给出可识别的数据格式时,说明不支持原始视频流的数据格式。
若任意一个码流分析模块的解析结果中包含可识别的数据格式,则说明支持原始视频流的数据格式。
步骤304,支持所述原始视频流的数据格式时,调用对应的码流分析模块,对所述原始容器文件进行数据帧解析,解析出每一帧视频数据,并获得该帧视频数据在所述原始容器文件中的偏移位置。
步骤305,将所述每一帧视频数据、以及该帧视频数据在所述原始容器文件中的偏移位置写入一个新容器文件。
在新容器文件中写入的每帧视频数据、以及该帧视频数据在所述原始容器文件中的偏移位置的目的,是用于后续在流媒体客户端请求下载视频文件时,生成还原的容器文件提供给流媒体客户端。
步骤306,写入该新容器文件中的文件头,从而生成新容器文件。
具体地,在新容器文件的文件头中写入该新容器文件的元数据,以及所述原始容器文件中原始视频流的元数据。新容器文件的元数据包括该新容器文件的标识,还可以包含生成时间、版本号、大小等其他信息。新容器文件的标识是流媒体服务器按照预定的命名规则,为该新容器文件确定出的,在一个流媒体服务器上的每个新容器文件的标识是唯一的,可以用于区分同一个流媒体服务器上的其他新容器文件。
原始视频流的元数据包括原始视频流的数据格式,可选地还可以包含提供商、视频开始时间和持续时间等等其他信息。
可选地,新容器文件的格式如图4a所示,其中文件头中还包含媒体流偏移位置,在本实施例中为视频流偏移位置,视频流偏移位置是指在整个文件中视频流初始的位置相对于整个文件初始位置的偏移量,视频流中包含步骤305写入的每帧视频数据(包含帧头信息)、每帧在所述原始容器文件中的偏移位置。可选地,文件头中还可以预留一些地址空间,以便后续扩展使用,预留地址空间的大小可以根据经验设定,如12字节、24字节等等。
通过上述步骤,在由原始容器文件转换为一个统一格式的新容器文件的过程中,没有对原始视频流进行解码以及重新编码,从而提高了转换效率。
可选地,为了能够便于用户通过流媒体客户端实现线播放功能时,能够进行播放进程的拖拽,而不是只能被动地接收流媒体服务器顺序下发的各帧的视频数据进行顺序播放,在执行步骤305之后,还包括:
步骤307,记录关键帧的视频数据在新容器文件中的偏移位置,获得关键帧的播放时间戳,该时间戳是指该关键帧在原始容器文件所包含的原始视频流中的播放时间,所述关键帧在原始视频流中的播放时间是码流分析器步骤304中解析获得的。
关键帧又被称为I帧(intra picture),是指在一组连续的画面(GOP,groupof picture)中的第一个帧,现有视频文件的不同数据格式对GOP分别给出了定义,在这里不再详述。关键帧经过适度压缩后,可作为随机访问的参考点。
关键帧的视频数据在所述新容器文件中的偏移位置是指,以新容器文件存储位置的起始点为基准,关键帧的视频数据在写入时的偏移位置。
关键帧在原始视频流中的播放时间是指,以整个原始视频流播放的起始点为基准,各帧顺序播放的情况下,关键帧播放的时间点。
步骤308,根据所述关键帧的视频数据在所述新容器文件中的偏移位置、关键帧在原始视频流中的播放时间,生成关键帧的索引列表;
索引列表包含关键帧的视频数据在所述新容器文件中的偏移位置和对应的该关键帧在原始视频流中的播放时间。表1为索引列表的一个实例。
表1
步骤309,将所述索引列表写入新容器文件中。
具体地,可以有多种写入方式,例如将索引列表写入新容器文件中第一预定偏移位置上,例如写入相对于整个文件初始位置,偏移量为1M字节的偏移位置上,或写入所述预留地址空间中偏移量为10字节的偏移位置上等等,在读取索引列表时,从所述第一预定偏移位置上读取即可;或者将索引列表写入新容器文件载荷部分中的任意空闲可用位置上,且将写入索引列表的偏移位置存储在新容器文件的文件头预留地址空间中的第二预定偏移位置的字段中(即在第二预定偏移位置的字段中存储指向索引列表的指针),在读取索引列表时,先从所述文件头预留地址空间中的第二预定偏移位置的字段中读取索引列表的偏移位置,再根据索引列表的偏移位置从容器文件中读取索引列表,采用该方案时,新容器文件的格式如附图4b所示。当然存储结构的设计可以灵活多变,这里不再一一列举。
步骤307~步骤309可以与步骤305并行执行,无先后顺序限定。
可选地,上述步骤305中在新容器文件中写入的每帧视频数据、以及该帧视频数据在所述原始容器文件中的偏移位置的目的是用于在流媒体客户端请求下载视频文件时,生成还原的容器文件提供给流媒体客户端(具体请参照实施例三中的介绍)。但是由于一些数据格式(如私有数据格式)的流媒体文件无法通过该方案得到还原的容器文件,例如一些私有格式的视频数据在码流分析器分析出每帧视频数据和该帧在原始视频容器文件中的偏移位置时,可能会出现数据丢失和差错,因此在步骤306生成新容器文件之后,还包括以下步骤:
步骤310,根据所述新容器文件中,每帧视频数据在所述原始容器文件中的偏移位置,将该帧视频数据写入一个文件中,直到写入每帧视频数据为止,从而生成还原的容器文件。
步骤311,通过不可逆加密算法,获得唯一标识所述还原的容器文件内容的第一信息摘要值。
例如,采用第五版消息摘要算法(MD5,Message Digest Algorithm 5)对所述还原的视频容器文件的内容进行计算,获得第一哈希值作为第一信息摘要值;或者采用安全散列算法(SHA,The Secure Hash Algorithm),对所述还原的视频容器文件的内容进行计算,获得第一散列值作为第一信息摘要值。
步骤312,通过所述不可逆加密算法,获得唯一标识所述原始容器文件内容的第二信息摘要值。
步骤313,比较所述第一信息摘要值和第二信息摘要值是否一致,若一致则整个处理流程结束,否则执行步骤314;
步骤314,将所述原始容器文件的内容写入新容器文件、且同时记录所述原始视频文件写入新容器文件时的存储位置。
与步骤309中存储索引列表的方式相类似,可以将原始容器文件的内容写入新容器文件中第三预定偏移位置上,在读取原始容器文件时,直接从所述第三预定偏移位置上读取即可;也可以将原始容器文件写入新容器文件中的任意空闲可用位置上,且将写入原始容器文件的偏移位置存储在所述预留地址空间中的第四预定偏移位置的字段中,在读取原始容器文件时,先从所述预留地址空间中的第四预定偏移位置的字段中读取原始容器文件的偏移位置,再根据原始容器文件的偏移位置从新容器文件中读取原始容器文件,采用该方案时,新容器文件的格式如附图4c所示。
需要说明的是,附图3的执行主体除了为流媒体服务器之外,还可以是视频网站服务器、或者视频数据库服务器等等。各步骤中出现的“第一信息摘要值”、“第二信息摘要值”并不是表示顺序关系,而是为了区别不同的信息摘要值,同理,“第一预定偏移位置”和“第二预定偏移位置”等也不是表示顺序关系,而是为了区别不同的偏移位置。以下文件中提到的第一、第二等也是为了区别不同的模块、单元等。
本发明实施例提供的流媒体数据的处理方案,在将输入的原始容器文件转换为统一格式的新容器文件的过程中,在新容器文件中写入码流分析器解析出的每一帧流媒体数据、以及该帧流媒体数据在所述原始容器文件中的偏移位置。无需对原始容器文件中的流媒体数据进行解码以及重新编码,简化了转换过程中处理的复杂性,提高了转换效率,并且能兼容多种标准或私有格式的流媒体数据。
并且按照现有技术,无法根据处理后统一格式的容器文件还原出原始流媒体文件,而按照本方案提供的处理方案,能够根据转换后得到的统一格式的容器文件,还原出原始流媒体文件,尤其适用于需要原始容器文件作为证据的场景。
实施例二
在本实施例中将对流媒体数据的在线播放方法进行描述,该在线播放方法是基于实施例一所提供的处理方法生成的新容器文件而进行的。
附图5为本发明实施例提供的流媒体数据在线播放方法的流程图,附图5从流媒体客户端的角度,以视频数据为例,对在线播放方法进行描述。该方法同样适用于除视频数据之外的其他类型的流媒体数据,如音频数据。
步骤501,流媒体客户端向流媒体服务器发送在线播放请求,所述在线播放请求中携带用户选中的新容器文件的标识。
用户可以通过流媒体客户端访问流媒体服务器,并获得流媒体服务器通过网顺等多种展示的该流媒体服务器能够提供的各容器文件的标识,以及对应的内容介绍,基于此选择自己感兴趣的容器文件的标识。
步骤502,流媒体客户端接收流媒体服务器返回的所述新容器文件的文件头和索引列表,所述索引列表包含至少一个关键帧的流媒体数据在所述新容器文件中的偏移位置、和各关键帧在原始媒体数据流中的播放时间。
所述文件头中包含原始容器文件所包含的原始媒体数据流的数据格式。
步骤503,流媒体客户端根据所述索引列表中各关键帧在原始媒体数据流中的播放时间,选择其中一个关键帧的播放时间。
可选地,流媒体客户端可以根据容器文件头中的视频持续时间,和索引列表中关键帧的播放时间,将整个视频的播放时间和关键帧的播放时间以进度条等直观的形式展示给用户,用户据此选择其中的某个关键帧的播放时间输入给流媒体客户端。例如,本实施例中选择表1中第3个关键帧的播放时间00:00:04。
步骤504,流媒体客户端从所述索引列表中,查找到选择出的关键帧的播放时间对应的关键帧在所述新容器文件中的偏移位置。
例如,在步骤503中选择第3个关键帧的播放时间00:00:04,通过查找索引列表可以获得第3个关键帧在新容器文件中的偏移位置2147200。
步骤505,流媒体客户端向所述流媒体服务器发送数据获取请求,所述数据获取请求携带查找到的偏移位置,用于获取以该偏移位置为起始点,至少1帧的视频数据。
可选地,获取请求中还可以携带偏移量信息,用于获得以所述查找到的偏移位置为起始点,长度为该偏移量的所有流媒体数据,例如一次获得选择的关键帧后10帧的流媒体数据。当然,该获取请求还可以请求获得选择的关键帧后的所有流媒体数据,流媒体数据的获取方式可以灵活设置。
步骤506,流媒体客户端接收所述流媒体服务器对应返回的流媒体数据,并根据所述文件头中的流媒体数据格式,播放接收到的流媒体数据。
附图6为本发明实施例提供的流媒体数据在线播放方法的流程图,附图6从流媒体服务器的角度对在线播放方法进行描述。
步骤601,流媒体服务器接收流媒体客户端发送的在线播放请求,所述在线播放请求中携带新容器文件的标识;
步骤602,流媒体服务器根据所述新容器文件的标识,查找到对应的新容器文件;
步骤603,流媒体服务器发送所述新容器文件的文件头和索引列表,所述索引列表包含关键帧的流媒体数据在所述新容器文件中的偏移位置和关键帧在原始容器文件所包含的原始媒体数据流中的播放时间;
步骤604,流媒体服务器接收数据获取请求,所述数据获取请求中携带有偏移位置,该偏移位置是所述流媒体客户端根据所述索引列表确定出的一个关键帧的流媒体数据在所述新容器文件中的偏移位置;
步骤605,流媒体服务器根据所述获取请求中的偏移位置,向流媒体客户端返回新容器文件中以该偏移位置为起始点,至少1帧的流媒体数据。
流媒体服务器可以向流媒体客户端返回该偏移位置上关键帧的流媒体数据,也可以返回以该偏移位置为起始点、之后10帧的流媒体数据,或者返回以该偏移位置为起始点,之后所有的流媒体数据,具体可以根据获取请求中的其他信息来确定。新容器文件的存储格式可以参照附图4a、附图4b或附图4c的描述。
本发明实施例提供了一种流媒体数据的在线播放方法,该方法基于实施例一中提供的新容器文件。用户在请求进行在线视频播放时,流媒体客户端向流媒体服务器请求下载容器文件的文件头和索引列表,并根据索引列表确定待下载视频数据在新容器文件中的偏移地址,将确定出的偏移地址发送给流媒体服务器,根据所述文件头中的数据格式,播放流媒体服务器返回的流媒体数据,从而实现播放视频时灵活拖动的效果。
实施例三
本实施例中将对流媒体数据的下载方法进行描述,该在线播放方法是基于实施例一所提供的处理方法生成的新容器文件而进行的。
附图7a为本发明实施例提供的流媒体数据的下载方法的流程图,附图7从流媒体服务器的角度对下载方法进行描述。
步骤701,流媒体服务器接收流媒体客户端发送的下载请求,所述下载请求中携带新容器文件的标识;
步骤702,流媒体服务器查找到所述新容器文件标识对应的新容器文件;
步骤703,流媒体服务器根据所述新容器文件中,每帧流媒体数据在原始容器文件中的偏移位置,将该帧流媒体数据写入一个文件中,从而生成还原的容器文件;
步骤704,流媒体服务器将所述还原的容器文件发送给所述流媒体客户端。
当个别数据格式的视频文件采用上述步骤703的方法无法得到还原的容器文件,且容器文件中存储有原始容器文件时(例如,采用附图4c所示的存储方式),可以对附图7a所示的流程进行改进,改进后的流媒体数据下载方法的流程图如附图7b所示,其中步骤711~步骤712与附图7a中的步骤701~步骤702类似:
步骤711,流媒体服务器接收流媒体客户端发送的下载请求,所述下载请求中携带新容器文件的标识;
步骤712,流媒体服务器查找到所述新容器文件标识对应的新容器文件;
步骤713,流媒体服务器判断所述新容器文件中是否包含原始容器文件,若包含原始容器文件,则进入步骤714;若未包含原始容器文件,则进入步骤715。
具体地,流媒体服务器判断是否包含原始容器文件的方式与原始容器文件在新容器文件中的存储方式有关。如果采用附图4c所示的方式存储,则流媒体服务器先读取文件头预留地址空间中第四预定偏移位置的字段中的内容,若能够读取到有效的原始容器文件的偏移位置,则根据读取到得偏移位置从新容器文件载荷部分读取原始容器文件。
所述第四预定偏移位置上未写入原始容器文件的偏移位置时,被设置为无效内容,例如全零。
步骤714,流媒体服务器从所述新容器文件中读取原始容器文件,将读取的原始容器文件发送给所述流媒体客户端。
具体的读取方式与容器文件中原始容器文件的存储方式相关,请参照实施例一步骤314中的介绍,在这里不再重复。
例如,新容器文件中原始容器文件为fileFlash.mp4,则将读取的原始流媒体文件fileFlash.mp4发送给所述流媒体客户端。
步骤715,流媒体服务器根据所述新容器文件中每帧流媒体数据在所述原始容器文件中的偏移位置,将该帧流媒体数据写入一个文件中,从而生成还原的容器文件。
例如,还原的容器文件为reverfile.mp4。
步骤716,流媒体服务器将所述还原的容器文件发送给所述流媒体客户端。例如,将还原的容器文件reverfile.mp4发送给所述流媒体客户端。
本发明实施例在用户请求下载视频文件时,根据容器文件中每帧视频数据在原始容器文件中的偏移位置、及每帧视频数据,还原出容器文件,并将还原的容器文件提供给用户。而不是像现有技术一样将统一格式的容器文件提供给用户。避免了解码、及重新编码带来的视频信息损失和误差,能够实现更佳的显示效果。
相应地,本发明实施例还提供了一种流媒体数据的处理装置,如图8所示,该装置包括第一接收单元801、解析单元802、第一写入单元803、第二写入单元804,具体如下:
第一接收单元801,用于接收输入的原始容器文件,所述原始容器文件中包含原始媒体数据流;
解析单元802,用于从所述原始容器文件中解析出每一帧流媒体数据,并获得该帧流媒体数据在所述原始容器文件中的偏移位置;
第一写入单元803,用于将所述每一帧流媒体数据、以及该帧流媒体数据在所述原始容器文件中的偏移位置写入新容器文件的载荷部分;
第二写入单元804,用于在新容器文件的文件头中写入该新容器文件的元数据,以及所述原始容器文件中原始媒体数据流的元数据。
可选地,为了能够实现在线播放时,播放进程拖曳的功能,附图8中的装置还包括:
获取单元805,用于获得关键帧的索引列表,所述索引列表包含至少一个关键帧的流媒体数据在所述新容器文件中的偏移位置、各关键帧在原始媒体数据流中的播放时间;所述关键帧是指一组连续画面中的第一个帧,作为随机访问的参考点;所述关键帧在原始媒体数据中的播放时间是解析获得的;
第三写入单元806,用于将获取单元805获取的索引列表写入新容器文件中。
可选地,为了避免个别格式的流媒体数据在还原原始容器文件时出现问题,附图8中的装置还包括:
第一还原单元807,用于在第二写入单元804写入后,根据所述新容器文件中每帧流媒体数据在所述原始容器文件中的偏移位置,将该帧流媒体数据写入一个文件中,从而生成还原的容器文件;
摘要值生成单元808,用于通过不可逆加密算法,获得唯一标识第一还原单元807生成的所述还原的容器文件内容的第一信息摘要值、以及唯一标识所述原始容器文件内容的第二信息摘要值;
比较单元809,用于比较所述第一信息摘要值和第二信息摘要值是否一致;
第四写入单元810,用于在比较单元809的比较结果不一致时,将所述原始容器文件的内容写入新容器文件、且同时记录所述原始容器文件写入新容器文件时的存储位置。
请参照附图9,本发明实施例还提供了一种流媒体数据的在线播放装置,可以集成于流媒体客户端中,包括:
第一发送单元901,用于向流媒体服务器发送在线播放请求,所述在线播放请求中携带新容器文件的标识;
第二接收单元902,用于接收返回的新容器文件的文件头和索引列表,所述索引列表包含至少一个关键帧的流媒体数据在所述新容器文件中的偏移位置、各关键帧在原始容器文件所包含的原始媒体数据流中的播放时间;
选择单元903,用于根据第二接收单元902接收的所述索引列表中各关键帧的播放时间,选择其中一个关键帧的播放时间;
查找单元904,用于从所述索引列表中,查找到选择单元902选择出的关键帧的播放时间对应的关键帧在所述新容器文件中的偏移位置
第二发送单元905,用于向所述流媒体服务器发送数据获取请求,所述数据获取请求携带查找单元904查找到的偏移位置,用于获取以该偏移位置为起始点,至少1帧的流媒体数据;
播放单元906,用于根据第二接收单元902接收到的所述文件头中的数据格式,播放流媒体服务器返回的流媒体数据。
请参照附图10,本发明实施例还提供了另一种流媒体数据的在线播放装置,可以集成于流媒体服务器中,包括:
第三接收单元101,用于接收流媒体客户端发送的在线播放请求,所述在线播放请求中携带新容器文件的标识;
第三发送单元102,用于发送所述新容器文件的标识对应的新容器文件的文件头和索引列表,所述索引列表包含关键帧的流媒体数据在所述新容器文件中的偏移位置和关键帧在原始容器文件所包含的原始媒体数据流中的播放时间;
第四接收单元103,用于接收数据获取请求,所述数据获取请求中携带有偏移位置,该偏移位置是所述流媒体客户端根据所述索引列表确定出的一个关键帧的流媒体数据在所述新容器文件中的偏移位置;
第四发送单元104,用于根据所述获取请求中的偏移位置,向流媒体客户端返回以该偏移位置为起始点,至少1帧的流媒体数据。
请参照附图11a,本发明实施例还提供了一种流媒体数据的下载装置,可集成于流媒体服务器中,具体包括第五接收单元111、第二还原单元112、第五发送单元113,其中:
第五接收单元111,用于接收流媒体客户端发送的下载请求,所述下载请求中携带新容器文件的标识;
第二还原单元112,用于根据所述新容器文件的标识对应的新容器文件中,每帧流媒体数据在原始容器文件中的偏移位置,将该帧流媒体数据写入一个文件中,从而生成还原的容器文件;
第五发送单元113,用于将所述第二还原单元112还原的容器文件发送给所述流媒体客户端。
可选地,为了提高下载效率,附图11a所示的装置可以进行进一步改进,如附图11b所示,包括:
第五接收单元111,用于接收流媒体客户端发送的下载请求,所述下载请求中携带新容器文件的标识;
判断单元114,用于判断第五接收单元111接收到得所述新容器文件标识对应的新容器文件中是否包含原始容器文件;
读取单元115,用于在判断单元114判断结果为包含原始容器文件时,从所述新容器文件中读取原始容器文件;触发第五发送单元113将读取的原始容器文件发送给流媒体客户端;
第二还原单元112,用于判断单元114判断出未包含原始容器文件时,根据所述新容器文件的标识对应的新容器文件中,每帧流媒体数据在原始容器文件中的偏移位置,将该帧流媒体数据写入一个文件中,从而生成还原的容器文件;触发第五发送单元113将还原的容器文件发送给所述流媒体客户端。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读取存储介质中,如:ROM/RAM、磁碟、光盘等。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。