具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明做进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1示出了本发明实施例提供的数字电视的直播回放的流程,详述如下:
在步骤S101中,采集编码电视节目。
在数字电视系统中,接收指定的频道并对该频道做采集编码,将电视频道节目转换为可以在IP网络上传输的传输流(Transport Stream,TS)数据包,并将TS数据包发送到视频服务器。
在步骤S102中,录制电视节目。
视频服务器根据设定的参数,将收到的TS数据包按一定的大小保存为一系列原始TS流的内容片段数据,并在接收TS数据包的同时,生成与内容片段数据相对应的辅助数据。录制程序预先记录各个直播频道TS流的流标识(tsid)与服务标识(serviceid),并将这两个标识信息与相应目录对应起来,这两个标识信息存放在数据库中。比如直播频道CCTV1对应的tsid与serviceid分别为1与10,则录制程序对CCTV1频道生成CCTV1的录制目录。内容片段数据相对应的辅助数据包括两种基本数据:索引信息和描述信息。
由于录制节目时TS流数据量很大,所以必须对录制数据分段存储,这样做也便于传输和其它用途的处理。视频服务器根据参数设定的大小,将收到的TS数据包依次写入一系列的TS流内容片段数据,作为回放时的原始素材,此时必须确保没有TS包丢失的现象发生。在接收TS数据包的同时,对每个TS包进行解析,以更新内容片段数据的索引信息。
每个内容片段数据对应一条索引信息,每条索引信息包括如下内容:
1、内容片段数据创建时的标准时间:以收到第一个TS包为准开始创建内容片段数据。
2、内容片段数据中第一个TS包的节目时钟基准(PCR,Program ClockReference)时间:当前TS数据包有效的PCR时间。
3、内容片段数据最终生成时的标准时间:内容片段数据的大小超过设定值时结束当前的内容片段数据。
4、内容片段数据中最后一个TS包的PCR时间:当前TS包有效的PCR时间。
5、当前内容片段数据的状态:即内容片段数据是否已经写满。
6、当前内容片段数据的标识:例如内容片段数据名。
内容片段数据的描述信息包括三类信息:必要的节目专用信息(ProgramSpecial Information,PSI)、音频信息、视频信息。其中音视频信息以帧为单位,有如下信息:
1、PID:音视频数据的TS数据包标识。
2、帧序号:从录制开始记录的逐个递增的音视频帧计数。
3、PCR:对应当前帧的有效PCR。
4、位置:对应当前帧在内容片段数据中的位置。
5、类型:对应视频帧的I、P、B类型,音频帧默认为I帧。
6、包计数:每一帧包含的TS包个数。
每当视频服务器向内容片段数据写入TS包时,就将当前内容片段数据的索引信息进行更新。
在步骤S103中,接收直播回放请求。视频服务器接收用户机顶盒发出的基于实时流传输协议(RTSP,Real Time Streaming Protocol)的直播回放请求,从请求中获取需要回放的时间位置以及所要回放的直播频道的描述。
在步骤S104中,查找相应的节目数据。
机顶盒从直播状态进入回放状态时,必须将当前直播状态的一些信息传给视频服务器,视频服务器利用该信息定位到录制目录。
当机顶盒从直播频道进入回放状态时,机顶盒获取该直播频道TS流的tsid与serviceid,并将该数据通过RTSP协议传送给视频服务器。视频服务器收到该数据后,从数据库中查找出该tsid与serviceid对应的录制目录,在该目录中找到相应的录制信息。如视频服务器收到RTSP协议中的tsid与serviceid对为1与10,则可以找到录制目录为CCTV1。从生成的索引信息中初步找到T时间对应的内容片段数据,再根据内容片段数据对应的描述信息,准确定位到T时间在内容片段数据中对应的视频帧的位置。
对指定的频道,任意给定一个标准时间,视频服务器通过读取索引信息,便可以确定该标准时间的内容在哪个内容片段数据中。假设一个内容片段数据可以播放10分钟,那么录制模块一天将记录144条索引信息,支持10天的回放也仅仅需要1440条记录,这极大的提高了视频服务器解析以及定位TS数据的效率,从而有效提高了点播过程中对用户操作的响应速度,保证了操作响应时间的连贯性。
描述信息是使视频服务器提高请求响应速度的另一个因素。对TS流内容的高效描述,可以让视频服务器根据用户的访问时间快速而准确的定位到内容片段数据中该时间所处的位置,这对于用户做快进快退,以及随意拖动的播放模式尤其重要。视频服务器实现快速定位时,除了标准时间,还需要用到TS流自身携带的PCR时间。因为根据内容片段数据的索引信息只能确定用户访问的标准时间的内容在哪个内容片段数据中,无法确定该内容在该内容片段数据中的具体位置。但是借助每个内容片段数据的起始PCR时间与标准时间的对应关系,可以计算得到当前要访问内容的PCR时间。这样通过搜索内容描述信息中的PCR时间,便能找到距离该PCR时间最近的视频帧,确定其在内容片段数据中的位置。
在步骤S105中,发送节目数据。
从找到的位置处开始发送内容到机顶盒,即使存在不同内容片段数据之间的切换,也不影响机顶盒的播放效果。
在整个数字电视的直播回放过程中,SST技术包含了如下5个关键技术:
1、利用直播频道中的信息,定位到录制目录。
2、统一的时间处理方法,为回放显示时画面的准确衔接提供时间保障。
3、对内容片段数据的索引管理,使视频服务器能够从录制了几个小时、甚至几天的内容中快速定位到具体时间所对应的内容片段数据。
4、对内容片段数据内容的高效描述,使视频服务器将请求时间对应到TS流数据中具体视频内容的时间,从而准确找到所需内容的位置。
5、内容片段数据的预读取与预切换技术,保证了视频服务器内容发送的平稳性和及时性,使内容跨越不同内容片段数据也像在播放同一个内容片段数据一样。
用户收看直播内容时,可以先暂停,然后从暂停的位置继续播放,或拖动到其它有效时间的位置开始播放;按一次快退操作,可以从直播状态切换回放状态观看刚刚直播过的内容;在回放状态按快进操作使回放内容按倍速逐渐赶上直播内容,当和直播内容同步时则自动切换到直播状态;或者一次按键从回放状态切换到直播状态,观看当前的直播内容,视频服务器对用户操作的快速响应,大大缩短了操作时状态切换带来的画面停顿时间,进而得到顺畅无缝的播放效果。
图2示出了本发明实施例提供的在统一时间处理时PCR时间与标准时间的映射关系。
要实现电视画面的无缝切换,必须统一所有子系统的时钟,并与标准时间(比如北京时间)保持同步。
统一时间处理是指在直播回放系统中,将TS流携带的PCR时间,与标准时间精确对应起来。
由于TS流中基础PCR时间是用33位二进制表示的,因此PCR时间是周期性的,周期大约为26.5小时。要实现PCR时间与标准时间的一一对应,需对PCR时间进行映射。如图2中建立一个PCR时间与标准时间的映射关系,以方便标准时间与PCR时间的转换。这种映射转换解决了准确定位的同时,也保证了长时间回放的问题,可实现长时间跨度(比如10天)的快进快退和任意拖动操作。
图3示出了本发明实施例提供的根据内容片段数据的索引信息和描述信息实现快速定位的流程,详述如下:
在步骤S301中,接收用户回放请求。视频服务器录制完节目后,等待用户发送的回放请求。用户通过用户机顶盒向视频服务器发出基于RTSP协议的直播回放请求。
在步骤S302中,交互请求,获取回放位置的标准时间T。视频服务器从接收到的回放请求信息中提取回放时间信息。此时间信息为标准时间。
在步骤S303中,根据指定频道,读取内容片段数据的索引信息。
在步骤S304中,是否找到T时刻对应的内容片段数据CF(Content File)。根据已读取的内容片段数据的索引信息查找是否有与T时刻对应的内容片段数据CF。
在步骤S305中,响应回放请求,无法播放。如果在索引信息中没有查找到与T时刻对应的内容片段数据CF,则无法进行回放,响应回放命令结束。
在步骤S306中,读取内容片段数据CF对应的描述信息CFD(Content FileDescription)。
在步骤S307中,将标准时间映射到PCR。根据标准时间与PCR之间的关系,可以将标准时间形式的回放时间映射到PCR形式的回放时间。
在步骤S308中,遍历CFD中的视频帧信息,是否找到离PCR最近的视频帧VF(Vedio Frame)。在描述信息中查找是否有与离PCR形式的回放时间最近的视频帧VF。如果没有找到则无法进行回放,响应回放命令结束。
在步骤S309中,打开CF,定位到VF开始播放。打开查找到的内容片段数据,定位到查找到的离PCR最近的视频帧VF,由VF准备开始播放。
在步骤S310中,响应回放请求,可以开始播放。
图4示出了本发明实施例提供的预读取和发送的流程,详述如下:
在步骤S401中,根据用户回放请求定位到内容片段数据中具体的视频帧。根据用户请求信息中的时间信息找到对应内容片段数据中的当前视频帧VF。
在步骤S402中,从视频帧所在位置处开始读取数据包。从当前视频帧开始读取TS数据包。
在步骤S403中,将上一数据包LastPacket清空并初始化。
在步骤S404中,响应用户回放请求,开始播放。
在步骤S405中,开始获取当前要发送的数据包。
在步骤S406中,LastPacket是否为空?判断上一数据包LastPacket是否为空。
在步骤S407中,预读取数据到LastPacket,更新CurPacket。若上一数据包LastPacket不为空时,则预读取数据包到LastPacket,更新当前数据包CurPacket。
在步骤S408中,获取CurPacket的信息。若上一数据包LastPacket为空时,直接获取CurPacket。
在步骤S409中,CurPacket是否为空?判断当前数据包CurPacket是否为空。
在步骤S410中,用CurPacket更新LastPacket。若当前数据包CurPacket不为空则用当前数据包CurPacket更新上一数据包LastPacket。若当前数据包CurPacket为空,则结束整个过程。
在步骤S411中,返回LastPacket的信息。
在步骤S412中,获取到的TS流数据包(Packet)是否需要立即发送?判断获取到的数据包是否需要立即发送。
在步骤S413中,返回期望发送的时间,暂时挂起,等待另外线程按时唤醒。如果获取到的数据包不需要立即发送则返回期望发送的时间,暂时停止处理,等待另外的命令。
在步骤S414中,将Packet发送出去,更新发送信息。
图5示出了本发明实施例提供的内容片段数据预切换和刷新的流程,详述如下:
在步骤S501中,读取内容片段数据的索引信息,构造内容片段数据的链表。根据索引信息做一个内容片段数据的链表。
在步骤S502中,根据用户请求定位到当前视频帧VF,记录VF的信息。根据用户请求信息中的时间信息找到对应内容片段数据中的当前视频帧VF。
在步骤S503中,读取当前包CurPacket。读取当前视频帧的数据包CurPacket。
在步骤S504中,是否为快进快退播放?判断当前播放状态是否为快进或快退状态。
在步骤S505中,是否读完了VF的所有TS包?若当前是快进或快退状态则再判断是否读完了VF的所有数据包。
在步骤S506中,根据快进(快退)定位到后面(前面)一个VF。若已经读完了VF中的所有数据包,则根据快进或快退定位到后面或前面的一个VF。
在步骤S507中,确定读取的起始位置。在定位到的VF中找到该读取的数据包位置,返回步骤S503进行读取当前包CurPacket。
在步骤S508中,从内容片段数据中读取TS数据包,若读到数据结尾,则根据内容片段数据的链表自动切换到下一个内容片段数据,然后打开该内容片段数据继续读取数据包。若读取当前数据包CurPacket时的播放状态不为快进或快退时,或播放状态虽然为快进或快退但没有读完VF中的所有数据包时,读取内容片段数据中的数据包。
在步骤S509中,是否读完内容片段数据链表中所有内容片段数据的数据包?判断内容片段数据的链表中所有的内容片段数据的数据包是否已经读完。
在步骤S510中,读取CurPacket完成。若没有读完内容片段数据的链表中所有的内容片段数据的数据包,则读取当前数据包CurPacket,结束整个读取过程。
在步骤S511中,刷新读取内容片段数据的索引信息。若内容片段数据的链表中所有的内容片段数据的数据包已经被读完则对索引信息进行刷新。
在步骤S512中,确定是否新增了完整的内容片段数据?根据刷新状况查找是否增加了完整的内容片段数据。
在步骤S513中,将新增内容片段数据加入到链表中,并打开供读取。若增加了完整的内容片段数据,则将新增的完整内容片段数据加入到链表中,并打开该内容片段数据,返回步骤S503进行读取当前数据包CurPacket。
在步骤S514中,是否新增未写满的内容片段数据?若没增加完整的内容片段数据则判断是否新增加了未写满的内容片段数据。
在步骤S515中,确定读取的起始位置。若增加了未写满的内容片段数据则找到该内容片段数据的读取起始位置。
图6示出了本发明实施例提供的视频服务器的功能模块。
数字电视的视频服务器包括节目信息存储模块61、直播与回放命令接收模块62和查找播放模块63。节目信息存储模块61进一步又包括节目信息保存模块611和辅助数据生成模块612。查找播放模块63进一步又包括播放位置查找模块631和内容片段播放模块632。首先,节目信息保存模块611将电视节目信息保存为一系列的内容片段数据,然后,辅助数据生成模块612根据保存的内容片段数据生成与内容片段数据对应的辅助数据。再等待接收机顶盒发出的回放请求,当直播与回放命令接收模块62接收到携带时间信息的直播与回放的命令时,播放位置查找模块631根据直播与回放的命令中的时间信息和内容片段数据对应的辅助数据查找到相应的内容片段数据和具体播放位置。最后,内容片段播放模块632从找到的位置开始播放内容片段数据。
本发明的实施例在磁盘上生成一系列的内容片段数据,同时生成与内容片段数据对应的辅助数据。视频服务器根据用户的回放请求和内容片段数据对应的辅助数据,能够比较迅速、精确地找到内容片段数据和具体的播放位置,并通过使用预读取和预切换的方式来播放内容片段数据,从而提高了数字电视的播放与回放之间的切换速度,使得播放与回放之间的切换达到了无缝切换的效果。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。