一种分布式播放器任务调度的方法及系统的制作方法

文档序号:9399659阅读:505来源:国知局
一种分布式播放器任务调度的方法及系统的制作方法
【技术领域】
[0001]本申请涉及互联网应用技术领域,具体地说,涉及一种分布式播放器任务调度的方法及系统。
【背景技术】
[0002]当前,视频播放器,通常是指能播放以数字信号形式存储的媒体文件的软件,也指具有播放媒体文件功能的电子器件产品。除了少数波形文件外,大多数视频播放器携带视音频解码器和显示部件以还原经过压缩媒体文件,视频播放器还要内置一整套转换以及缓存的算法。当然大多数的视频播放器还能支持播放单音频文件或者单视频文件。
[0003]一般的处理过程为:
[0004]输入。从文件或网络等读取原数据,如X.avi,x.mov,rtsp://xxx,对原数据进行解析,比如文件,首先要分析文件格式,从文件中取得音视频编码参数,媒体时间长度等信息,然后要从其中取出音频编码数据和视频编码数据送到解码部分,这里暂称这种编码源数据块为 packet。
[0005]解码。初始化时,利用输入端从源数据中取得的信息调用不同的解码库初始化;然后接收输入端传送来的音视频编码数据,分别进行音频解码和视频解码,视频解码出来的数据一般是YUV或RGB数据,这里暂称为picture,音频解码出来的数据是采样数据,是声卡可以播放的数据,这里暂称为sample。解码所得的数据接下来送到输出部分。
[0006]输出。接收解码部分送来的picture和sample并显示。视频显示一般使用某个图形库,如 SDL,Xlib,DirectDraw,OpengGL,FrameBuffer 等,音频输出是把 sample 写入系统的音频驱动,由音频驱动送入声卡播放,可用的音频输出有ALSA,OSS, SDL, DirectSound,WaveOut 等。
[0007]现有技术中,原始的视频文件(无论何种格式)如果在一个客户端的播放器进行处理需要经过解复用(分离)处理,将音频、视频压缩码流进行分离,继而进行音频、视频解码处理,解码完毕后进行音频、视频同步,两者分别显示渲染,目前主流播放器对于每个处理模块进行线程处理,期间客户可能存在播放暂停、拖动等各种操作,从而造成多线程间的同步稳定性不足,需要经常性的等待和不断的同步,多线程切换带来的资源损耗、稳定性以及架构的可维护性都需要考虑。

【发明内容】

[0008]有鉴于此,本申请所要解决的技术问题是提供了一种分布式播放器任务调度的方法及系统,其能够解决现有技术中播放器播放存在的任务调度问题,任务调度分时复用,节省系统资源,同时,整体框架的可扩展性强,提高用户满意度。
[0009]为了解决上述技术问题,本申请有如下技术方案:
[0010]—种分布式播放器任务调度的方法,包括:
[0011]将移动终端上的播放器的播放过程中解复用模块、音频解码模块、音频渲染模块、视频解码模块、视频渲染模块共5个模块按照任务的复杂度以及耗时程度分为两个任务taskl和task2 ;其中taskl包含解复用模块、音频解码模块、音频清染模块,task2分为视频解码模块、视频渲染模块;
[0012]所述taskl和task2两个任务统一在一个线程池task pool中;
[0013]所述task pool执行在一个统一的线程池中,每一个任务都按照时间顺序来依次轮询执行;task pool中的每个任务执行过程中都不会出现阻塞情况,所有的休眠放入到task pool中进行;若当前时间没有可以执行的任务,则系统休眠。
[0014]所述每一个任务都按照时间顺序来依次轮询执行,包括:
[0015]计算下次取出该任务的时间:
[001 6]^next t cursystime+tsleeptime,
[0017]其中,t_t表示下次取出该任务执行的时间,t ^ystinre表示当前系统时间,t sleeptime表示此时执行过程中由于某些原因导致需要休眠的时间;
[0018]将该任务放入task pool中按照!^吣进行时间由小到大排序;
[0019]当线程轮询时,将当前系统时间与任务池中时间最小的任务时间比较,如果时间已到或者时间已过,则立刻取出当前任务进行执行,若当前时间没有任务满足,则系统进行休眠。
[0020]所述方法还包括:
[0021]播放起始时,从文件1/0中获取文件数据,进行文件头信息解析;
[0022]解析完毕后启动taskl,进行解复用操作;
[0023]若文件中包含视频,则同时启动task2,且将task I和task2任务注册在task pool中,初始task2处于休眠状态;
[0024]轮询查询视频队列是否有数据,若有数据则执行视频解码、视频渲染操作,否则继续进行休眠。
[0025]所述方法还包括:
[0026]taskl解复用出音频码流,将音频码流送入音频解码器中解码,将解码的原始音频数据放入到渲染队列中;
[0027]当渲染队列达到一定阈值,则taskl进入休眠状态;若未达到阈值,则继续解复用;
[0028]如解复用出视频码流,则放入到视频码流队列中。
[0029]所述方法还包括:
[0030]视频任务在轮询中得到执行时,判断视频码流队列中是否有数据,若有数据则取出数据进行视频解码;
[0031]在渲染过程中与音频、系统时钟进行同步,若时间与之比较已经延后则立刻播放,休眠时长为0;若时间提前到达,则计算提前的时间,用音频时间或系统时间减去视频时间,作为task2休眠的时间。
[0032]—种分布式播放器任务调度的系统,包括:任务分配模块、线程池模块和轮询模块;其中,
[0033]所述任务分配模块,用于将移动终端上的播放器的播放过程中解复用模块、音频解码模块、音频渲染模块、视频解码模块、视频渲染模块共5个模块按照任务的复杂度以及耗时程度分为两个任务taskl和task2 ;其中taskl包含解复用模块、音频解码模块、音频渲染模块,task2分为视频解码模块、视频渲染模块;
[0034]所述线程池模块,用于将所述taskl和task2两个任务统一在一个线程池taskpool 中;
[0035]所述轮询模块,用于所述task pool执行在一个统一的线程池中,每一个任务都按照时间顺序来依次轮询进行执行。
[0036]所述轮询模块还用于:
[0037]计算下次取出该任务的时间:
[0038]^next t cursystime+tsleeptime,
[0039]其中,t_t表示下次取出该任务执行的时间,t —表示当前系统时间,t sleeptine表示此时执行过程中由于某些原因导致需要休眠的时间;
[0040]将该任务放入task pool中按照tnrait进行时间由小到大排序;
[0041]当线程轮询时,将当前系统时间与任务池中时间最小的任务时间比较,如果时间已到或者时间已过,则立刻取出当前任务进行执行,若当前时间没有任务满足,则系统进行休眠。
[0042]所述轮询模块还用于:
[0043]播放起始时,从文件1/0中获取文件数据,进行文件头信息解析;
[0044]解析完毕后启动taskl,进行解复用操作;
[0045]若文件中包含视频,则同时启动task2
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1