CN102664806A - 一种流媒体分发方法和装置 - Google Patents
一种流媒体分发方法和装置 Download PDFInfo
- Publication number
- CN102664806A CN102664806A CN2012101258581A CN201210125858A CN102664806A CN 102664806 A CN102664806 A CN 102664806A CN 2012101258581 A CN2012101258581 A CN 2012101258581A CN 201210125858 A CN201210125858 A CN 201210125858A CN 102664806 A CN102664806 A CN 102664806A
- Authority
- CN
- China
- Prior art keywords
- flow
- source
- index
- course
- judges whether
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种流媒体分发方法和装置,针对现有技术中的分发效率低,一路目标流出现异常而影响其他目标流的缺陷而发明,包括以下步骤:步骤S101,判断源流是否已经创建,如果未创建,转步骤S201;如果已创建,转步骤S301;步骤S201,创建源流,转步骤301,步骤S301,创建目标流,步骤S401,将源流添加至该目标流,步骤S501,该目标流进行分发,步骤S601,该目标流接收指示,停止分发,步骤S701,源流删除该目标流,步骤S801,销毁该目标流,步骤S901,判断源流中所有目标流是否已经删除,如果已删除,转步骤S1001;如果未删除,流程结束,步骤S1001,销毁所述源流,流程结束。
Description
技术领域
本发明涉及无线数据传输领域,特别涉及一种流媒体分发方法和装置。
背景技术
目前对流媒体进行转发时,一般都会用一定的方法对流媒体进行分发。分发时主要有两种形式,一种形式是将单播协议的源流转换为组播协议的目标流进行分发,该种方法需要路由对组播的支持所以主要用于局域网的分发。第二种形式为转发服务器将源流复用后使用单播协议分发成多路目标流。该方法需要转发服务器采取一定方法对源流进行复用。移动前端设备一般都采用广域网与服务器进行通讯,因此移动流媒体的分发将主要采取第二种形式。该分发形式的实现步骤主要为:每个源流创建一个源流缓冲区队列;为队列设定一个缓冲区大小阈值;源产生数据后判断该数据加入缓冲区后是否超过缓冲区的阈值,如果没有超过则将数据写入该缓冲区队列,否则将缓冲区队列中最先进入队列的数据取出并删除,直到可以向队列中加入当前源产生的新数据,而缓冲区大小不超过设置的阈值为止,然后将源产生的新数据写入缓冲区队列。
目标流对源缓冲区的使用可以采用两种策略,策略1:检测源流缓冲区中是否有数据,如果有则进入b,如果没有等待一段时间后再次进入a进行检测;从源流缓冲区中取出最先进入源流缓冲区中的数据,进入c;取出的数据每个目标流依次使用,所有目标流使用完成后进入d;对该数据进行删除,进入a。策略2:为每个目标流也创建一个缓冲区队列;检测源流缓冲区中是否有数据,如果有则进入b如果没有等待一段时间后再次进入a进行检测;从源流缓冲区中取出最先进入源流缓冲区中的数据,进入d;将取出数据进行复制n份,分别加入目标流缓冲区队列,无需等待进入e,以后目标流使用数据直接从自己的缓冲队列中进行读取;对该数据进行删除,进入a。
对于策略1源数据只有一份,占用内存少,实现简单。弊端为当其中一路目标流出现网络拥塞或处理速度过慢等异常,导致源缓冲区数据过多,将出现流数据丢失,一旦数据丢失所有目标流的数据都将丢失。即一路目标流出现异常将影响其他目标流。对于策略2由于数据的复制速度一般比源数据产生速度高出多个数量级所以基本不会出现源缓冲区不够导致的数据丢失,但是数据的拷贝和重复存储将使分发效率降低。
因此,现有技术存在分发效率低,占用资源多,一路目标流出现异常而影响其他目标流的缺陷。
发明内容
本发明要解决的技术问题是提供一种流媒体分发方法和装置。
为了解决上述技术问题,本发明提供了一种流媒体分发方法,包括以下步骤:
步骤S101,判断源流是否已经创建,
如果未创建,转步骤S201;如果已创建,转步骤S301,
步骤S201,创建源流,转步骤301,
步骤S301,创建目标流,
步骤S401,将所述源流添加至该目标流,
步骤S501,该目标流进行分发,
步骤S601,该目标流接收指示,停止分发,
步骤S701,所述源流删除该目标流,
步骤S801,销毁该目标流,
步骤S901,判断所述源流中所有目标流是否已经删除,
如果已删除,转步骤S1001;如果未删除,流程结束,
步骤S1001,销毁所述源流,流程结束。
进一步地,上述实现方法还可具有以下特点:
步骤S2011,接收数据流,
步骤S2012,判断该数据流是否能生成流片,
如果能生成流片,转步骤S2013;如果不能生成流片,转步骤S2011,
步骤S2013,清理流缓冲队列,
步骤S2014,将所述流片加入该流缓冲队列,
步骤S2015,通知目标流有新流片产生,转步骤S2011。
进一步地,上述实现方法还可具有以下特点:
步骤S20131,判断该缓冲队列首流片可否立即删除,
如果能够立即删除,转步骤S20132;如果不能够立即删除,转步骤S20134,
步骤S20132,删除该缓冲队列首流片,
步骤S20133,判断当前流片缓冲队列是否为空,
如果不为空,转步骤S20131;如果为空,流程结束,
步骤S20134,判断该缓冲队列流片数量是否超过阈值,
如果超过阈值,转步骤S20135;如果未超过阈值,流程结束,
步骤S20135,判断删除流片数是否为零,当前流片是否为关键帧,
如果删除流片数不为零,且当前流片为关键帧,流程结束;其他状态,转步骤S20136,
步骤S20136,判断当前流片是否读锁定,
如果当前流片读锁定,转步骤S20137;如果当前流片非读锁定,转步骤S20139,
步骤S20137,将流片从该缓冲队列移除添加进延迟删除流片队列,转步骤S20138,
步骤S20139,将流片立即删除,转步骤S20138,
步骤S20138,判断当前流片缓冲队列是否为空,
如果不为空,转步骤S20135;如果为空,流程结束。
进一步地,上述实现方法还可具有以下特点:
步骤S4011,判断流片缓冲区中是否有关键帧,
如果有关键帧,转步骤S4013;如果没有关键帧,转步骤S4012,
步骤S4012,等待关键帧生成或请求关键帧,转步骤S4011,
步骤S4013,将最后进入缓冲区的关键帧流片及其后流片读剩余记数加1,
步骤S4014,将本目标流加入源流目标流信息链表,
步骤S4015,将该目标流的流片索引设置为该关键帧流片的索引。
进一步地,上述实现方法还可具有以下特点:
步骤S6011,查找目标流的索引号,
步骤S6012,判断目标流索引号是否在流片队列索引号有效范围内,
如果在有效范围内,转步骤S6014;如果不在有效范围内,转步骤S6013,
步骤S6013,该流队列中该索引号后的所有流片读剩余记数减1,
步骤S6014,将本目标流信息列表中信息删除。
进一步地,上述实现方法还可具有以下特点:
步骤S5011,判断前一任务是否完毕,
如果完毕,转步骤S5012;如果未完毕,流程结束,
步骤S5012,投递一个处理流片任务,
步骤S5013,处理流片任务向源流申请读流片,
步骤S5014,判断申请是否成功,
如果未成功,转步骤S5015;如果成功,转步骤S5016,
步骤S5015,设置本目标流为前一个任务已经完成,
步骤S5016,使用流片,
步骤S5017,流片解除读锁定。
进一步地,上述实现方法还可具有以下特点:
步骤S50131,判断目标流是否已经锁定一个流片,
如果没有锁定,转步骤S50132;如果已经锁定,返回申请失败,流程结束,
步骤S50132,查找目标流对应流片索引,
步骤S50133,判断流片索引是否等于当前流队列索引最大值加1,
如果不等于,转步骤S50134;如果等于,返回申请失败,流程结束,
步骤S50134,判断流片索引是否为有效索引,
如果不为有效索引,转步骤S50135;如果为有效索引,转步骤S50136,
步骤S50135,将流片索引修改为当前流队列索引最小值,
步骤S50136,将流队列中对应流片索引的流片读锁定加1,设置本目标锁定一个流片,
步骤S50137,返回成功锁定的流片。
进一步地,上述实现方法还可具有以下特点:
步骤S50171,判断目标流是否已经锁定一个流片,
如果目标流已锁定,转步骤S50172;如果未锁定,流程结束,
步骤S50172,查找目标流对应流片索引,
步骤S50173,判断对应索引是否在流队列中,
如果在流队列中,转步骤S50174;如果不在流队列中,转步骤S50175,
步骤S50174,流片读锁定记数减1,流片读剩余记数减1,目标流的流片索引加1,设置目标流未锁定流片,
步骤S50175,判断是否在延迟删除流队列中,
如果在队列中,转步骤S50176;如果不在队列中,返回错误信息,流程结束,
步骤S50176,流片读锁定记数减1,
步骤S50177,判断流片读锁定是否为0,
如果为0,转步骤S50178;如果不为0,转步骤S50179,
步骤S50178,删除流片,转步骤S50179,
步骤S50179,目标流的流片索引加1,设置目标流未锁定流片。
进一步地,上述实现方法还可具有以下特点:
所述流片还包括片信息,所述片信息包括流类型、关键帧标识、读取锁定记数和读取剩余记数。
本发明提供了一种流媒体分发装置,包括源流模块和目标流模块,
所述源流模块用于接收流数据,对所述流数据进行分片,清理流片缓冲队列,将所述流片加入所述流片缓冲队列,通知所述目标流模块有新流片生成,向所述目标流模块发送新任务,
所述目标流模块用于判断前一任务是否处理完毕,向所述源流模块申请接收所述流片,使用所述流片。
由上可知,本发明方法和装置达到具有相同源流的目标流间出现异常后互不影响,目标流出现异常可快速恢复,提高分发效率的技术效果。
附图说明
图1是本发明一较佳实施例的流媒体结构示意图,
图2是本发明一较佳实施例的流媒体分发流程示意图,
图3是本发明一较佳实施例的源流流程示意图,
图4是本发明一较佳实施例的流缓冲队列清理流程示意图,
图5是本发明一较佳实施例的源流添加一个目标流流程示意图,
图6是本发明一较佳实施例的源流删除一个目标流流程示意图,
图7是本发明一较佳实施例的目标流流程示意图,
图8是本发明一较佳实施例的源流读锁定目标流流片流程示意图,
图9是本发明一较佳实施例的源流解锁目标流流片流程示意图,
图10是本发明一较佳实施例的流媒体分发装置结构示意图。
具体实施方式
以下结合附图及较佳实施例,对依据本发明提出的其具体方法,详细说明如后。
本发明的总体思路是,流媒体分发方法:
对流数据进行分片,较佳的视频流采取每帧分一片,音频流使用相应时间长度的数据为一片;分片后的流数据有一个对应的片信息,包括该片的流类型,是否关键帧,读取锁定记数(当前被锁定使用且未使用完的记数,初始化为0),读取剩余记数(当前需要被使用但还未被使用的记数,初始化为目标流数量);分片后的流数据和对应的片信息组成一个流片;
将生成流片的对象称为源流,将使用流片的对象称为目标流;
将多个目标流对象与源流对象进行关联;
进行关联后源流和目标流将比较独立的进行工作;
源流只负责流片缓冲区的清理,目标流的添加与删除,流片的生成,有新流片生成时通知需要接收通知的目标流。
目标流只负责接收到有新流片生成的通知时,依次锁定使用流缓冲区中所有本目标流未使用过的流片,直到缓冲中无本目标流未使用过的流片后,将本目标流设置为需要接收新流片生成通知。
源流清理流片缓冲队列采用的方法为,首先将所有读取锁定记数和读取剩余记数均为0的流片立即删除,如果删除后还是未能将流片数量降到阈值以下则可以判定存在一个目标流处理流片异常,此时需要将最先进入缓冲区的流片进行判定,如果是读取锁定记数为0的进行立即删除,如果读取锁定记数不为0的进行延迟删除,直到遇到关键帧。延迟删除的流片在读取使用完成后进行立即删除。该清理流片缓冲队列方法可以保证缓冲区不会出现数据超出预先设定的阈值,而且可以让出现异常的目标流,下次获取流片时直接获取到关键帧,可以在丢失部分数据的情况下快速恢复。
源流对目添加标流与删除目标流采用的方法为,添加一个目标流时在流片缓冲区中查找最后进入缓冲区为关键帧的流片,如果存在则将该关键帧及其后进入缓冲区的流片读取剩余记数加1,并通知刚加入的目标流有新流片生成。如果缓冲队列中无关键帧流片则需等到源流中有关键帧生成后才增加以后的所有流片的读取剩余记数,并通知关联的目标流。删除一个目标流时需要查看源流缓冲区中是否存在本目标流,未使用的流片,如果存在则需将这些流片的读取剩余记数减1然后将本目标流从源流中删除。
源流流片的生成采用的方法为,有流数据生成将流进行分片,较佳的视频流采取每帧分一片,音频流使用相应时间长度的数据为一片;分片后的流数据有一个对应的片信息,包括该片的流类型,是否关键帧,读取锁定记数(当前被锁定使用且未使用完的记数,初始化为0),读取剩余记数(当前需要被使用但还未被使用的记数,初始化为目标流数量);分片后的流数据和对应的片信息组成一个流片,将流片写入源流的流片缓冲队列。
源流有新流片生成时通知需要接收通知的目标流的方法为,当有新的流片生成,加入流片缓冲区后,即判断出需要通知的目标流,并进行通知。
源流接到一个目标流锁定读取一个流片的请求后,首先查找该目标流对应的流片索引值,得到流片索引值后如果索引值为当前流片缓冲队列的索引最大值加1则返回锁定失败,如果不是则判断索引值是否为流队列的有效值范围,不在有效值范围内需要将该索引设置为队列首的索引,然后将索引对应的流片的读锁定记数加1后返回该流片给目标流使用。
源流接到一个目标流解锁定一个流片的请求后,首先查找该目标流对应的流片索引值,对应流片索引在流队列中则流片的读锁定记数和读剩余记数均减1然后本流片索引值加1,完成解读锁定;如果索引值对应流片不在流队列中,则在延迟删除流片队列中查找,查找不到则发生错误,查找到后将该流片的读锁定记数减1,如果流片的读锁定为0则将该流片删除,将本目标流的流片索引值加1完成流片解锁定。
目标流接收到源流有流片生成的通知后,对源流缓冲区中本目标流未读取过的最先生成的一个流片进行锁定使用,使用完成后对流片的读剩余记数进行减1操作,然后对下一个流片进行锁定使用,直到缓冲区中没有需要本目标流需要读取的流片为止,然后将本目标流设置为当源流有新流片产生时需要进行通知。
流媒体分发装置:
源流对象,对本源的流缓冲区管理,目标流的关联与取消关联,流片的生成,有新流片生成时通知需要接收通知的目标流,对外提供四个接口: AddTarget(Target* ptarget) DelTarget(Target* ptarget) , LockReadOneSlice(Target* ptarget), UnlockReadOneSlice(Target* ptarget) 分别对应分发方法中的添加目标流,删除目标流,锁定读流片,解锁流片。
目标流对象,接收到有新流片生成的通知时,依次锁定使用流缓冲区中所有本目标流未使用过的流片,直到缓冲中无本目标流未使用过的流片后,将本目标流设置为需要接收新流片生成通知。对外部只提供一个通知其有新流片生成的接口NewSliceReady()。对应目标流的接受新流片通知。
任务池,为源流的流片生成,目标流的流片使用,提供任务线程。对外提供接口为PushTask(ITask* ptask)
较佳的所述源流对象包括:
流片缓冲队列,对生成的流片进行缓冲保存;当有新流片进入缓冲队列时源流将调用所有与本源流关联的目标流的NewSliceReady()接口.
目标流信息链表,保存所有目标流的信息,包括每个目标流下一个该读取的流片的索引号,新流片生成后是否进行通知,以及通知的接口地址。
较佳的,目标流接收到有新流片生成的通知时,马上向任务池申请一个任务,该任务通过调用源流的LockReadOneSlice(Target* ptarget)接口锁定读一个流片,当读锁定成功则对该流片进行使用,使用完成后调用源流的UnlockReadOneSlice(Target* ptarget)解除锁定,然后马上再次向任务池申请一个相同的任务。直到任务向源流锁定读取一个流片失败,则设置本目标流再次需要接收新流片产生的通知,等待下一个新流片产生通知的到达。
源流有新流片生成时通过Target的NewSliceReady()接口通知目标流有新流片生成。
本发明一较佳实施例的流媒体结构示意图参见图1,一个源流包括一个目标流信息链表,该链表包括所有添加到该源流的目标流信息(是否已经锁定读取一个流片,下次读取或已经读取流片的索引号,目标流的流片生成通知接口);一个流片缓冲队列,缓冲队列中缓冲的为最新的流片数据(包括流片是否为关键帧,流片的类型,流片的索引号,流片读锁定记数,流片读剩余记数,流数据);和一个延迟删除流片链表,当目标流中有异常情况发生时,流缓冲队列的未读完流片会超出缓冲阈值,此时将对最陈旧的流片进行删除,当发现需要删除的陈旧流片,有目标流在读取未解锁时需要进行延迟删除,所有需要延迟删除的流片都将进入该链表,进入该链表的流片以后将无法被其他目标流锁定读取,只可解除锁定,解锁完成后再进行删除。
本发明一较佳实施例的流媒体分发流程示意图参见图2,步骤S101,判断源流是否已经创建,如果未创建,转步骤S201;如果已创建,转步骤S301,步骤S201,创建源流,转步骤301,步骤S301,创建目标流,步骤S401,将所述源流添加至该目标流,步骤S501,该目标流进行分发,步骤S601,该目标流接收指示,停止分发,步骤S701,所述源流删除该目标流,步骤S801,销毁该目标流,步骤S901,判断所述源流中所有目标流是否已经删除,如果已删除,转步骤S1001;如果未删除,流程结束,步骤S1001,销毁所述源流,流程结束。
本发明一较佳实施例的源流流程示意图参见图3,步骤S2011,接收数据流,步骤S2012,判断该数据流是否能生成流片,如果能生成流片,转步骤S2013;如果不能生成流片,转步骤S2011,步骤S2013,清理流缓冲队列,步骤S2014,将所述流片加入该流缓冲队列,步骤S2015,通知目标流有新流片产生,转步骤S2011。
源流启动后开始接收数据,当接收到一帧数据后即可生成一个流片,产生流片后先对流片队列进行一次清理,一旦清理后队列肯定可以再次放入一个流片,然后将流片放入缓冲队列即可,加入成功后通知所有目标流有新流片生成,然后继续接收数据重复上述过程。
本发明一较佳实施例的流缓冲队列清理流程示意图参见图4,步骤S20131,判断该缓冲队列首流片可否立即删除,如果能够立即删除,转步骤S20132;如果不能够立即删除,转步骤S20134,步骤S20132,删除该缓冲队列首流片,步骤S20133,判断当前流片缓冲队列是否为空,如果不为空,转步骤S20131;如果为空,流程结束,步骤S20134,判断该缓冲队列流片数量是否超过阈值,如果超过阈值,转步骤S20135;如果未超过阈值,流程结束,步骤S20135,判断删除流片数是否为零,当前流片是否为关键帧,如果删除流片数不为零,且当前流片为关键帧,流程结束;其他状态,转步骤S20136,判断当前流片是否读锁定,如果当前流片读锁定,转步骤S20137;如果当前流片非读锁定,转步骤S20139,步骤S20137,将流片从该缓冲队列移除添加进延迟删除流片队列,转步骤S20138,步骤S20139,将流片立即删除,转步骤S20138,步骤S20138,判断当前流片缓冲队列是否为空,如果不为空,转步骤S20135;如果为空,流程结束。上述“其他状态”,包括如下几种情况:如果删除流片数为零,无论当前流片是否为关键帧,转步骤S20136;如果删除流片数不为零,且当前流片不为关键帧,转步骤S20136。
开始清理流片缓冲区时首先判断流片缓冲区队列中的最陈旧流片是否有已经被所有目标流读取读取完毕且未被读锁定,肯定则进行立即删除然后再次进行上述相同操作,直到缓冲队列为空或上述判断为否定,否定则检测缓冲队列缓冲的流片数量是否超过设定阈值,没有超过清理完毕,如果超过则可确定有一个目标流出现异常或读取流片的速度低于源产生的速度,这时需要强制删除流片,强制删除流片需要对最陈旧流片进行一直删除直到遇到关键帧流片且最少强制删除一个流片,则可认为清理完毕。需要注意的是当强制删除遇到被读锁定的流片时需要将其放入延迟删除流片链表中,因为被读锁定的流片说明还有目标流在使用,当使用完成后才能进行删除,经过清理的流片缓冲队列,将最少有一个位置用来放置新生成的流片。
本发明一较佳实施例的源流添加一个目标流流程示意图参见图5,步骤S4011,判断流片缓冲区中是否有关键帧,如果有关键帧,转步骤S4013;如果没有关键帧,转步骤S4012,步骤S4012,等待关键帧生成或请求关键帧,转步骤S4011,步骤S4013,将最后进入缓冲区的关键帧流片及其后流片读剩余记数加1,步骤S4014,将本目标流加入源流目标流信息链表,步骤S4015,将该目标流的流片索引设置为该关键帧流片的索引。
该流程为需要增加分发目标时的流程图,当添加一个目标流的时候为了保证目标流得到流后可以立即解码,所以需要将关键帧流片作为第一个流片给目标流,因此首先检测流缓冲队列中是否有关键帧,如果不存在则需要将该目标流先等待到有关键帧生成的时候再加入目标流信息链表,等到关键帧产生或在流片队列中存在关键帧时将该流片和在这个流片之后加入队列的流片的读剩余记数分别加1,这是因为添加了一个目标流后所有的流片的读者都将加1,然后将目标流的信息加入目标流信息列表,将查找到的关键帧流片的索引设置为该目标流的索引。完成目标流的添加,目标流添加完成后,一旦有新流片生成新添加的目标流会得到通知,且可以正确的锁定读取流片和释放流片。
本发明一较佳实施例的源流删除一个目标流流程示意图参见图6,步骤S6011,查找目标流的索引号,步骤S6012,判断目标流索引号是否在流片队列索引号有效范围内,如果在有效范围内,转步骤S6014;如果不在有效范围内,转步骤S6013,步骤S6013,该流队列中该索引号后的所有流片读剩余记数减1,步骤S6014,将本目标流信息列表中信息删除。
当一个目标流不再需要源流数据,从源流将这个目标流删除,删除的时候需要注意就是,因为源流的流片生成时是认为目标流信息中所有的目标流都要对这个流片进行读取的,本目标流没有读取过的目标流的流片需要对其读剩余记数减1后,将本目标流的信息从目标流信息链表中删除即完成删除目标流。
本发明一较佳实施例的目标流流程示意图参见图7,步骤S5011,判断前一任务是否完毕,如果完毕,转步骤S5012;如果未完毕,流程结束,步骤S5012,投递一个处理流片任务,步骤S5013,处理流片任务向源流申请读流片,步骤S5014,判断申请是否成功,如果未成功,转步骤S5015;如果成功,转步骤S5016,步骤S5015,设置本目标流为前一个任务已经完成,步骤S5016,使用流片,步骤S5017,流片解除读锁定。
目标流接到通知后先判断前一个任务是否完成,没有完成直接退出,如果已经完成则投递一个处理流片任务,处理流片任务从流片读锁定一个流片,然后使用使用完成后解锁定,然后再次投递任务,直到锁定流片失败认为已经没有流片需要读取,将本目标流设置为前一个任务完成需要接收下一个新流片生成通知,然后退出等待下一个通知的到来。
本发明一较佳实施例的源流读锁定目标流流片流程示意图参见图8,步骤S50131,判断目标流是否已经锁定一个流片,如果没有锁定,转步骤S50132;如果已经锁定,返回申请失败,流程结束,步骤S50132,查找目标流对应流片索引,步骤S50133,判断流片索引是否等于当前流队列索引最大值加1,如果不等于,转步骤S50134;如果等于,返回申请失败,流程结束,步骤S50134,判断流片索引是否为有效索引,如果不为有效索引,转步骤S50135;如果为有效索引,转步骤S50136,步骤S50135,将流片索引修改为当前流队列索引最小值,步骤S50136,将流队列中对应流片索引的流片读锁定加1,设置本目标锁定一个流片,步骤S50137,返回成功锁定的流片。
每个目标流使用源流的流片时,均需先读锁定一个流片,该流程保证每次读锁定获取到得流片均为连续的流片,或一个关键帧流片。当锁定时,首先判断本目标流是否已经锁定过一个流片,已经锁定则直接返回锁定失败;未锁定则将目标流对应的流片索引获取到,然后判断该目标流的流片索引是否为流片缓冲队列中索引的最大值加1,是则说明已经将流队列中所有流片都已经读取过,返回申请失败,目标流等待下一个流片生成通知后再来读取流片;否则判断流片索引是否在流队列流片的有效索引范围内,如果流片索引不在有效范围且目标流没有将队列中的所有流片都读取过则可判明发生了流片丢失,此时需要将流片的索引设置到队列的头,由流片缓冲队列清理方法保证了发生流片丢失时队列头肯定是关键帧流片,这时可保证发生异常的目标流可快速恢复。索引值对应的流片可在流片缓冲区中找到时需要将该对应的流片的锁定读取记数加1并设置本目标流已经锁定一个流片,然后将该流片返回给目标流,完成流片的读取锁定。
本发明一较佳实施例的源流解锁目标流流片流程示意图参见图9,步骤S50171,判断目标流是否已经锁定一个流片,如果目标流已锁定,转步骤S50172;如果未锁定,流程结束,步骤S50172,查找目标流对应流片索引,步骤S50173,判断对应索引是否在流队列中,如果在流队列中,转步骤S50174;如果不在流队列中,转步骤S50175,步骤S50174,流片读锁定记数减1,流片读剩余记数减1,目标流的流片索引加1,设置目标流未锁定流片,步骤S50175,判断是否在延迟删除流队列中,如果在队列中,转步骤S50176;如果不在队列中,返回错误信息,流程结束,步骤S50176,流片读锁定记数减1,步骤S50177,判断流片读锁定是否为0,如果为0,转步骤S50178;如果不为0,转步骤S50179,步骤S50178,删除流片,转步骤S50179,步骤S50179,目标流的流片索引加1,设置目标流未锁定流片。
当一个目标流使用完自己锁定的流片后,需要对该流片进行读解锁,表面自己已经读取过该流片一次,下次锁定读取时需要读取下一个流片,解锁开始需要判断是否已经锁定过一个流片如果没有则返回错误,如果已经锁定一个流片则获取该目标流的索引,获取到得索引在流队列中可以找到相应的流片,则将该流片的读锁定记数、读剩余记数减1、目标流的流片索引加1,设置本目标流未锁定流片,即完成解锁;如果目标流长时间为对流片解锁可能需要解锁的流片已经被强制移出缓冲队列,此时需要在延迟删除链表中对该流片进行解锁,如果所有的锁定都解锁则还需从延迟删除链表中将流片彻底删除。然后再将本目标流的流片索引加1设置本目标流未锁定流片,完成流片的解锁。
流片还包括片信息,片信息包括流类型、关键帧标识、读取锁定记数和读取剩余记数。
本发明一较佳实施例的流媒体分发装置结构示意图参见图10,包括源流模块和目标流模块,源流模块用于接收流数据,对所述流数据进行分片,清理流片缓冲队列,将所述流片加入所述流片缓冲队列,通知所述目标流模块有新流片生成,向所述目标流模块发送新任务,目标流模块用于判断前一任务是否处理完毕,向所述源流模块申请接收所述流片,使用所述流片。
以上具体实施方式仅用于说明本发明,而非用于限定本发明。
Claims (10)
1.一种流媒体分发方法,其特征在于,包括以下步骤,
步骤S101,判断源流是否已经创建,
如果未创建,转步骤S201;如果已创建,转步骤S301,
步骤S201,创建源流,转步骤301,
步骤S301,创建目标流,
步骤S401,将所述源流添加至该目标流,
步骤S501,该目标流进行分发,
步骤S601,该目标流接收指示,停止分发,
步骤S701,所述源流删除该目标流,
步骤S801,销毁该目标流,
步骤S901,判断所述源流中所有目标流是否已经删除,
如果已删除,转步骤S1001;如果未删除,流程结束,
步骤S1001,销毁所述源流,流程结束。
2.根据权利要求1所述的流媒体分发方法,其特征在于,所述步骤S201具体为:
步骤S2011,接收数据流,
步骤S2012,判断该数据流是否能生成流片,
如果能生成流片,转步骤S2013;如果不能生成流片,转步骤S2011,
步骤S2013,清理流缓冲队列,
步骤S2014,将所述流片加入该流缓冲队列,
步骤S2015,通知目标流有新流片产生,转步骤S2011。
3.根据权利要求2所述的流媒体分发方法,其特征在于,所述步骤S2013具体为:
步骤S20131,判断该缓冲队列首流片可否立即删除,
如果能够立即删除,转步骤S20132;如果不能够立即删除,转步骤S20134,
步骤S20132,删除该缓冲队列首流片,
步骤S20133,判断当前流片缓冲队列是否为空,
如果不为空,转步骤S20131;如果为空,流程结束,
步骤S20134,判断该缓冲队列流片数量是否超过阈值,
如果超过阈值,转步骤S20135;如果未超过阈值,流程结束,
步骤S20135,判断删除流片数是否为零,当前流片是否为关键帧,
如果删除流片数不为零,且当前流片为关键帧,流程结束;其他状态,转步骤S20136,
步骤S20136,判断当前流片是否读锁定,
如果当前流片读锁定,转步骤S20137;如果当前流片非读锁定,转步骤S20139,
步骤S20137,将流片从该缓冲队列移除添加进延迟删除流片队列,转步骤S20138,
步骤S20139,将流片立即删除,转步骤S20138,
步骤S20138,判断当前流片缓冲队列是否为空,
如果不为空,转步骤S20135;如果为空,流程结束。
4.根据权利要求1所述的流媒体分发方法,其特征在于,步骤S401具体为:
步骤S4011,判断流片缓冲区中是否有关键帧,
如果有关键帧,转步骤S4013;如果没有关键帧,转步骤S4012,
步骤S4012,等待关键帧生成或请求关键帧,转步骤S4011,
步骤S4013,将最后进入缓冲区的关键帧流片及其后流片读剩余记数加1,
步骤S4014,将本目标流加入源流目标流信息链表,
步骤S4015,将该目标流的流片索引设置为该关键帧流片的索引。
5.根据权利要求4所述的流媒体分发方法,其特征在于,步骤S601具体为:
步骤S6011,查找目标流的索引号,
步骤S6012,判断目标流索引号是否在流片队列索引号有效范围内,
如果在有效范围内,转步骤S6014;如果不在有效范围内,转步骤S6013,
步骤S6013,该流队列中该索引号后的所有流片读剩余记数减1,
步骤S6014,将本目标流信息列表中信息删除。
6.根据权利要求1所述的流媒体分发方法,其特征在于,步骤S501具体为:
步骤S5011,判断前一任务是否完毕,
如果完毕,转步骤S5012;如果未完毕,流程结束,
步骤S5012,投递一个处理流片任务,
步骤S5013,处理流片任务向源流申请读流片,
步骤S5014,判断申请是否成功,
如果未成功,转步骤S5015;如果成功,转步骤S5016,
步骤S5015,设置本目标流为前一个任务已经完成,
步骤S5016,使用流片,
步骤S5017,流片解除读锁定。
7.根据权利要求6所述的流媒体分发方法,其特征在于,所述步骤S5013具体为:
步骤S50131,判断目标流是否已经锁定一个流片,
如果没有锁定,转步骤S50132;如果已经锁定,返回申请失败,流程结束,
步骤S50132,查找目标流对应流片索引,
步骤S50133,判断流片索引是否等于当前流队列索引最大值加1,
如果不等于,转步骤S50134;如果等于,返回申请失败,流程结束,
步骤S50134,判断流片索引是否为有效索引,
如果不为有效索引,转步骤S50135;如果为有效索引,转步骤S50136,
步骤S50135,将流片索引修改为当前流队列索引最小值,
步骤S50136,将流队列中对应流片索引的流片读锁定加1,设置本目标锁定一个流片,
步骤S50137,返回成功锁定的流片。
8.根据权利要求7所述的流媒体分发方法,其特征在于,所述步骤S5017具体为:
步骤S50171,判断目标流是否已经锁定一个流片,
如果目标流已锁定,转步骤S50172;如果未锁定,流程结束,
步骤S50172,查找目标流对应流片索引,
步骤S50173,判断对应索引是否在流队列中,
如果在流队列中,转步骤S50174;如果不在流队列中,转步骤S50175,
步骤S50174,流片读锁定记数减1,流片读剩余记数减1,目标流的流片索引加1,设置目标流未锁定流片,
步骤S50175,判断是否在延迟删除流队列中,
如果在队列中,转步骤S50176;如果不在队列中,返回错误信息,流程结束,
步骤S50176,流片读锁定记数减1,
步骤S50177,判断流片读锁定是否为0,
如果为0,转步骤S50178;如果不为0,转步骤S50179,
步骤S50178,删除流片,转步骤S50179,
步骤S50179,目标流的流片索引加1,设置目标流未锁定流片。
9.根据权利要求1至8中任何一项所述的流媒体分发方法,其特征在于,所述流片还包括片信息,所述片信息包括流类型、关键帧标识、读取锁定记数和读取剩余记数。
10.一种流媒体分发装置,其特征在于,包括源流模块和目标流模块,
所述源流模块用于接收流数据,对所述流数据进行分片,清理流片缓冲队列,将所述流片加入所述流片缓冲队列,通知所述目标流模块有新流片生成,向所述目标流模块发送新任务,
所述目标流模块用于判断前一任务是否处理完毕,向所述源流模块申请接收所述流片,使用所述流片。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012101258581A CN102664806A (zh) | 2012-04-26 | 2012-04-26 | 一种流媒体分发方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012101258581A CN102664806A (zh) | 2012-04-26 | 2012-04-26 | 一种流媒体分发方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102664806A true CN102664806A (zh) | 2012-09-12 |
Family
ID=46774224
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012101258581A Pending CN102664806A (zh) | 2012-04-26 | 2012-04-26 | 一种流媒体分发方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102664806A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112055231A (zh) * | 2020-08-31 | 2020-12-08 | 浙江大华技术股份有限公司 | 视频解码方法、解码装置、解码器及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101068155A (zh) * | 2006-09-20 | 2007-11-07 | 腾讯科技(深圳)有限公司 | 一种对等连接流媒体直播系统及其采集服务器 |
CN101447928A (zh) * | 2008-12-31 | 2009-06-03 | 华为技术有限公司 | 分片信息处理的方法和装置 |
CN102137278A (zh) * | 2010-12-30 | 2011-07-27 | 广州市动景计算机科技有限公司 | 基于移动终端的流媒体播放分发系统及其方法 |
US20120012561A1 (en) * | 2010-07-14 | 2012-01-19 | Illinois Tool Works Inc. | Welding parameter control |
US20120050616A1 (en) * | 2010-08-25 | 2012-03-01 | Telefonaktiebolaget Lm Ericsson (Publ) | Controlling streaming media responsive to proximity to user selected display elements |
-
2012
- 2012-04-26 CN CN2012101258581A patent/CN102664806A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101068155A (zh) * | 2006-09-20 | 2007-11-07 | 腾讯科技(深圳)有限公司 | 一种对等连接流媒体直播系统及其采集服务器 |
CN101447928A (zh) * | 2008-12-31 | 2009-06-03 | 华为技术有限公司 | 分片信息处理的方法和装置 |
US20120012561A1 (en) * | 2010-07-14 | 2012-01-19 | Illinois Tool Works Inc. | Welding parameter control |
US20120050616A1 (en) * | 2010-08-25 | 2012-03-01 | Telefonaktiebolaget Lm Ericsson (Publ) | Controlling streaming media responsive to proximity to user selected display elements |
CN102137278A (zh) * | 2010-12-30 | 2011-07-27 | 广州市动景计算机科技有限公司 | 基于移动终端的流媒体播放分发系统及其方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112055231A (zh) * | 2020-08-31 | 2020-12-08 | 浙江大华技术股份有限公司 | 视频解码方法、解码装置、解码器及电子设备 |
CN112055231B (zh) * | 2020-08-31 | 2021-10-15 | 浙江大华技术股份有限公司 | 视频解码方法、解码装置、解码器及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8762604B2 (en) | Managing buffer conditions through sorting | |
CN110674362B (zh) | 搜索推荐方法、装置、电子设备及可读存储介质 | |
CN107295425B (zh) | 一种快速拼接转码分片文件的方法 | |
CN107766129A (zh) | 一种任务处理方法、装置及系统 | |
CN102098342A (zh) | 一种基于事务级的数据同步方法、装置及系统 | |
CN106776368A (zh) | 一种数据读取时的缓存管理方法、装置及系统 | |
CN104536699B (zh) | 一种基于嵌入式文件系统的流式数据写入方法 | |
CN104750855B (zh) | 一种大数据存储优化方法和装置 | |
JP2014044677A (ja) | 送信制御プログラム、通信ノード、および送信制御方法 | |
CN106708653A (zh) | 一种基于纠删码与多副本的混合税务大数据安全保护方法 | |
Zhao et al. | FedPAGE: A fast local stochastic gradient method for communication-efficient federated learning | |
GB2529403A (en) | A Method of operating a shared nothing cluster system | |
US8131781B2 (en) | Anti-item for deletion of content in a distributed datastore | |
CN105404679A (zh) | 数据处理方法和装置 | |
CN102508902A (zh) | 云存储系统中可变分块大小的块数据分块方法 | |
WO2014135011A1 (zh) | 数据库系统以及数据同步方法 | |
CN106203916A (zh) | 一种分布式的取件码生成方法 | |
CN102664806A (zh) | 一种流媒体分发方法和装置 | |
JP5776692B2 (ja) | パケット送信制御装置、パケット送信制御方法、及びプログラム | |
CN110417705B (zh) | 一种用户账号的注册方法和装置 | |
CN103399943A (zh) | 集群数据库并行查询的通讯方法和通讯装置 | |
CN109151061B (zh) | 一种数据存储方法和装置 | |
CN103139607A (zh) | 一种实时网络监控系统及其方法 | |
CN109408477A (zh) | 一种设置集群文件锁的方法、系统及相关组件 | |
US9003018B2 (en) | System and method for data set synchronization and replication |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120912 |