专利名称:一种预解码高清播放器及播放方法
技术领域:
本发明涉及一种预解码高清播放器及播放方法,属于高清视频播放领域。
背景技术:
对于多媒体数据来说,数据量是巨大的,所以多媒体能在个人电脑上播放直到个 人电脑技术运算能力发展到一定程度才能出现。对于现在高清视频,需要的硬件的运算能 力就更高了。如何让高清视频能在低端处理器中播放,已经成为降低高清IPTV机顶盒成本 的关键,并且这一技术也能让低端PC机播放超高清视频。传统的媒体播放器架构包括三个 部分数据读取模块、解码模块,播放模块。其中解码和播放的过程是非常消耗处理器运算 时间的,在通用的解决方案中,都是通过使用高性能的处理器来解决这一问题。但是,选用 高性能处理器疑会提高IPTV的总体成本,然而高成本必然会带来高价格,高价格的IPTV无 疑会降低市场的竞争力。采用预解码高清播放器,IPTV机顶盒可以使用低端处理器,不仅 能有效降低成本,更能适应未来超高清视频的播放。
发明内容
为解决上述技术问题,本发明提供一种预解码高清播放器,包括预解码模块、播放 模块、缓冲区和系统调度模块,其特征在于 预解码模块解码用于对输入的已编码数据的解码,并把解码后的已编码数据放入 缓冲区,直到所有已编码数据被解码完毕; 播放模块用于播放已解码的源数据,其受控于系统调度模块,等待接收系统调度 模块发出的调度消息,该消息包括用于指示播放模块开始播放的消息,收到开始播放的消 息后,播放模块从缓冲区中获取已解码的数据,并进行播放; 系统调度模块用于向预解码模块和播放模块发出调度消息以控制预解码模块和 播放模块的工作,并用于检测缓冲区的缓冲量,缓冲区阀值的计算;其中,所述控制预解码 模块和播放模块的工作包括预解码模块和播放模块的CPU优先级分配工作和状态检测,缓 冲区阀值的检测包括定时检测缓冲区是否达到预先计算的阀值。 更进一步,系统调度模块计算缓冲区缓冲量的阀值,并且检测缓冲区缓冲量是否 已经达到所述阀值,未达到所述阀值之前,系统调度模块为预解码模块分配最高的CPU调 度优先级; 待缓冲区的缓冲量达到所述阀值后,系统调度模块降低预解码模块的CPU调度优 先级,而把更多的CPU调度优先级分配给播放模块; 当缓冲区内的预缓存数据量低于所述阀值时,系统调度模块把预解码模块的CPU 调度优先级设为最高,而暂停播放模块的播放。 预解码模块由数据拆分器和解码器组成,拆分器的用于音视频分离,解码器用于 将拆分器分离后的音视频数据进行解码,并把解码后的数据存放到缓冲区中,如果全部数 据解码完毕则进入休眠状态。
上述播放模块由播放器和消息处理器组成,播放器的作用是到缓冲区取数据播 放,消息处理器负责接收系统调度模块发来的消息,所述消息包括开始播放,暂停播放,并 根据接收到消息来控制播放器。 所述播放器还可以包括一个控制器,用于接收从系统调度模块发送过来的调度消 息; 首先,播放器处于休眠状态,而控制器处于等待状态,控制器等待直到系统调度模 块的消息指令,当控制器收到消息指令并解析后,让播放器执行,同时控制器再次进入等到 状态,等待下一条调度信息的到来,所述调度消息进一步包括停止,快进,倒退,快退;解析 得到调度消息后,控制器唤醒播放器执行相关的调度消息。 上述系统调度模块包括阀值计算,消息处理,系统检测和CPU调度四个单元,
其中阀值计算单元是根据解码速度和影片长度来计算出来的一个能保证缓冲区 始终有足够多的数据供播放模块播放的数据量; 系统检测单元是根据所获得的阀值来定时检测缓冲区的缓冲量及其他模块的状 态,其中预解码模块的状态包括正在解码和休眠,播放模块的状态包括正在播放和休眠;
消息处理单元根据系统检测的结果来向相应的模块发送消息指令,以及CPU的调
度指示,对预解码模块而言,其发送的消息指令可以是解码指令,对于播放模块而言,其发 送的消息指令包括开始播放和暂停播放。 CPU调度单元受系统调度检测单元的控制,实施CPU调度,包括增加CPU调度优先 级和降低CPU调度优先级,在另一个可选的实施方式中,CPU调度包括调整解码模块和播放 模块的CPU分配比例。 更进一步,所述缓冲区阀值由以下公式计算得到
n = len_(lds*pt); 其中n为缓冲区阀值,len为影片大小,Ids为降低CPU调度优先级后的解码速度, pt为播放时间。 上述系统调度模块在以下情况触发开始播放消息和降低预解码模块增加播放模 块CPU调度的优先级 1.当缓冲量达到阀值且播放模块还未开始播放;
2.当缓冲量还未达到阀值但是预解码模块已经开始休眠而且播放模块还未开始 播放的时候。 本发明还提供一种预解码高清播放方法,其特征在于包括以下步骤 (1)将编码后的数据被分割成为视频数据和音频数据,经解码器解码后放入缓冲
区中; (2)计算一个缓冲区阀值,并增加用于解码器的CPU优先级,同时判断缓冲区的缓 冲量是否达到阀值;如果达到该阀值,则降低用于解码器的CPU的优先级,并为播放器增加 CPU优先级。 所述阀值的设定可以采用以下公式
阀值n = len_(lds*pt); 其中len为影片大小,Ids为降低CPU调度优先级后的解码速度,pt为播放时间。
图1是预解码高清播放器的示意图 图2是预解码模块的示意图 图3是播放模块的示意图 图4是播放模块的另一实施方式的示意图 图5是系统调度模块的示意图 图6是系统调度模块、预解码模块和播放模块的工作协助示意图 图7是系统调度模块触发消息的示意图
具体实施例方式
如图1所示,本发明提供的预解码高清播放器由四个部分组成,分别是预解码模 块、播放模块、缓冲区和系统调度模块。 其中,预解码模块解码用于对输入的源数据(已编码数据)的解码,并把解码后的 源数据放入缓冲区,直到所有源数据被解码。 播放模块用于播放已解码的源数据,其受控于系统调度模块,等待接收系统调度 模块发出的调度和消息,该消息包括用于指示播放模块开始播放的消息,收到开始播放的 消息后,播放模块从缓冲区中获取已解码的数据,并进行播放。 系统调度模块用于向预解码模块和播放模块发出调度消息以控制预解码模块和
播放模块的工作,并用于检测缓冲区的缓冲量,缓冲区阀值的计算。其中,控制预解码模块
和播放模块的工作包括预解码模块和播放模块的CPU优先级分配工作(或者资源分配)和
状态检测,缓冲区阀值的检测包括定时检测缓冲区是否达到预先计算的阀值。 在一个实施方式中,如图2所示,预解码模块由数据拆分器和解码器组成。拆分器
的用于音视频分离,解码器用于将拆分器分离后的音视频数据进行解码,并把解码后的数
据存放到缓冲区中,如果全部数据解码完毕则进入休眠状态。 播放模块的结构如图3所示,播放模块由播放器和消息处理器组成。播放器的作 用是到缓冲区取数据播放。消息处理器负责接收系统调度模块发来的消息(包括开始播 放,暂停播放),根据接收到消息来控制播放器。 在另一个实施方式中,播放器还包括一个控制器,用于接收从系统调度模块发送 过来的调度消息,如图4所示,首先,播放器处于休眠状态,而控制器处于等待状态。控制器 等待直到系统调度模块的消息指令,当控制器收到消息指令并解析后,让播放器执行,同时 控制器再次进入等到状态,等待下一条调度信息的到来。在另一个可选的实施方式中,调度 消息包括暂停,播放,停止,快进,倒退,快退等。解析得到调度消息后,控制器唤醒播放器执 行相关的调度消息。 系统调度模块的结构如图5所示,整个模块分为阀值计算,消息处理,系统检测和 CPU调度四个单元。阀值计算单元是根据解码速度和影片长度来计算出来的一个能保证缓 冲区始终有足够多的数据供播放模块播放的数据量。 系统检测单元是根据所获得的阀值来定时检测缓冲区的缓冲量及其他模块的状 态,其中预解码模块的状态包括正在解码和休眠,播放模块的状态包括正在播放和休眠。
消息处理单元根据系统检测的结果来向相应的模块发送消息指令,以及CPU的调度指示,对预解码模块而言,其发送的消息指令可以是解码指令,对于播放模块而言,其发 送的消息指令包括开始播放和暂停播放。 CPU调度单元受系统调度检测单元的控制,实施CPU调度,包括增加CPU调度优先
级(或者分配更多的CPU资源)和降低CPU调度优先级(或者减少CPU资源),在另一个可
选的实施方式中,CPU调度包括调整解码模块和播放模块的CPU分配比例。 更进一步,如图6所示,系统调度模块计算缓冲区阀值,预解码模块和播放模块同
时开始工作,并且系统调度模块开始定时检测缓冲区缓冲量是否已经达到阀值,未达到阀
值之前系统调度模块为预解码模块分配最高的CPU调度优先级,或者分配最多的CPU资源,
使之以最快的速度解码,随着解码的数据量的增加,缓冲区的缓冲量将达到阀值。 播放模块开始等待系统调度模块的开始播放消息,待缓冲量达到阀值后,系统调
度模块可以立刻检测出,这时系统调度模块则把预解码模块的CPU调度优先级将为最低,
然后给播放模块发送开始播放消息,并把更多的CPU调度优先级分配给播放模块,使之更
为流畅的播放。假如某一时刻缓冲区内的预缓存数据量低于阀值且预解码模块还没完成全
部解码工作,系统模块则通知播放模块暂停播放,系统调度模块把预解码模块的CPU调度
优先级设为最高,以便以最快的速度使缓冲量达到阀值供播放模块播放。系统调度模块使
预解码模块和播放模块之间达到一种"互斥"的效果。 在一个可选但非限制性的实施方式中,所述缓冲区阀值是根据影片长度和解码速 度来计算出来的一个值,用来保证播放模块正常的数据供给。预解码模块在低CPU优先级 的情况时,其解码速度一般会慢于播放模块的播放速度,为了使得预解码模块的解码速度 足够快,以使得在缓冲区的已解码数据播放完毕之前不落后于播放速度,需要设定阀值n,
n = len_(lds*pt); 其中len为影片大小,lds为降低CPU调度优先级后的解码速度,其可以表示为解 码速率M和所分配的CPU的百分比(1%的乘积,即Ids = M*d%, pt为播放时间。
如果阀值n为负数则可以进一步降低预解码模块的CPU调度优先级。
例如一部120分钟(pt)的高清电影未解码前大小为8. 13G(len)字节,尺寸为 1080 X 960,码流1306Kbps,帧数率为29. OOfps。假设当前的CPU频率为296MHZ,解码速度 为36. 67M/s (M),并且只分配给预解码模块3% (d% )的CPU频率。那么解码速度为1. 1MB/ s(M*d% ) 根据公式缓存阀值的为影片大小8325. 12M-1. 1MB/S承7200秒二 405. 12M字节。 此时,从解码到播放所需要等到的时间为405. 12/36. 67 = ll秒,便可以流畅的观看该高清 电影。首先,系统把预解码模块的CPU优先级设定为最高,待预处理完成后,系统调度模块 同时也已经检测到缓存量,当其到阀值则通知播放模块开始播放。这个时候CPU调度模块 就可以把更多的CPU优先级分配给播放模块,预解码模块只需要很低的CPU优先级。
更进一步,如图7所示,系统调度模块在以下情况触发开始播放消息和降低预解 码模块增加播放模块CPU调度的优先级
1)冲量达到阀值且播放模块还未开始播放; 2)缓冲量还未达到阀值但是预解码模块已经开始休眠而且播放模块还未开始播 放的时候。 系统调度模块在当缓冲量低于阀值预解码模块并未休眠播放模块已经开始播放 的时候,触发暂停播放消息和增加预解码模块降低播放模块的CPU调度优先级。
本发明同时还提供一种预解码高清播放方法,首先编码后的数据被分割成为视频 数据和音频数据,经解码器解码后放入缓冲区中,直到全部解码工作进行完毕进入休眠状 态。 接着计算一个缓冲区阀值,并增加用于解码器的CPU优先级,或者分配更多的CPU 资源,同时判断缓冲区的缓冲量是否达到阀值;如果达到该阀值,则降低用于解码器的CPU 的优先级或者分配更少的CPU资源,并为播放器增加CPU优先级或者分配更多的CPU资源。 所述阀值的设定可以采用以下公式
阀值n = len_(lds*pt); 其中len为影片大小,Ids为降低CPU调度优先级后的解码速度其可以表示为解 码速率M和所分配的CPU的百分比(1%的乘积,即Ids = M*d%, pt为播放时间。
本发明将解码器解码后的数据暂时存储在缓冲区中,播放模块定时检测缓冲区中 的数据是否已经达到伐值,一旦检测到缓冲量达到伐值就开始播放,同时通过降低解码模 块的CPU优先级来把更多的CPU分给播放模块。并解决了缓冲区中缓存到多少数据的时候 去通知渲染模块的问题。其实缓存数据量是跟渲染模块开始工作后预解码模块所获得的 CPU优先级成反比的,也就是说预处理的数据越多渲染模块开始工作后分配给解码模块的 CPU优先级就越少。比如说,一部编码后700M字节的影片渲染完毕需要1个小时,预解码模 块已经完成40%的预解码工作通知渲染模块,这个时候系统分配给预解码模块的CPU优先 级只要满足在一个小时之内能够把剩下的60 %的数据解码完毕就可以了 。在一些解码速度 很快(如H.264)的视频编码格式中这种优势是相当明显的。实践表明,通过本发明提供的 预解码高清播放器及播放方法可以使高清视频能在低端处理器中进行流畅播放。
权利要求
一种预解码高清播放器,包括预解码模块、播放模块、缓冲区和系统调度模块,其特征在于预解码模块,并把解码后的数据放入缓冲区,直到缓冲数据达到阀值,;播放模块用于播放已解码的源数据,其受控于系统调度模块,等待接收系统调度模块发出的调度消息,该消息包括用于指示播放模块开始播放的消息,收到开始播放的消息后,播放模块从缓冲区中获取已解码的数据,并进行播放;系统调度模块用于向预解码模块和播放模块发出调度消息以控制预解码模块和播放模块的工作,并用于检测缓冲区的缓冲量,缓冲区阀值的计算;其中,所述控制预解码模块和播放模块的工作包括预解码模块和播放模块的CPU优先级分配工作和状态检测,缓冲区阀值的检测包括定时检测缓冲区是否达到预先计算的阀值。
2. 如权利要求1所述的预解码高清播放器,其特征在于系统调度模块计算缓冲区缓冲量的阀值,并且检测缓冲区缓冲量是否已经达到所述阀值,未达到所述阀值之前,系统调度模块为预解码模块分配更高的CPU调度优先级;待缓冲区的缓冲量达到所述阀值后,系统调度模块降低预解码模块的CPU调度优先级,而把更多的CPU调度优先级分配给播放模块;当缓冲区内的预缓存数据量低于所述阀值时,系统调度模块把预解码模块的CPU调度优先级设为最高,而暂停播放模块的播放。
3. 如权利要求1所述的预解码高清播放器,其特征在于预解码模块由数据拆分器和解码器组成,拆分器的用于音视频分离,解码器用于将拆分器分离后的音视频数据进行解码,并把解码后的数据存放到缓冲区中,如果全部数据解码完毕则进入休眠状态。
4. 如权利要求1所述的预解码高清播放器,其特征在于播放模块由播放器和消息处理器组成,播放器的作用是到缓冲区取数据播放,消息处理器负责接收系统调度模块发来的消息,所述消息包括开始播放,暂停播放,并根据接收到消息来控制播放器。
5. 如权利要求4所述的预解码高清播放器,其特征在于所述播放器还包括一个控制器,用于接收从系统调度模块发送过来的调度消息;首先,播放器处于休眠状态,而控制器处于等待状态,控制器等待直到系统调度模块的消息指令,当控制器收到消息指令并解析后,让播放器执行,同时控制器再次进入等到状态,等待下一条调度信息的到来,所述调度消息进一步包括停止,快进,倒退,快退;解析得到调度消息后,控制器唤醒播放器执行相关的调度消息。
6. 如权利要求1所述的预解码高清播放器,其特征在于系统调度模块包括阀值计算,消息处理,系统检测和CPU调度四个单元,其中阀值计算单元是根据解码速度和影片长度来计算出来的一个能保证缓冲区始终有足够多的数据供播放模块播放的数据量;系统检测单元是根据所获得的阀值来定时检测缓冲区的缓冲量及其他模块的状态,其中预解码模块的状态包括正在解码和休眠,播放模块的状态包括正在播放和休眠;消息处理单元根据系统检测的结果来向相应的模块发送消息指令,以及CPU的调度指示,对预解码模块而言,其发送的消息指令可以是解码指令,对于播放模块而言,其发送的消息指令包括开始播放和暂停播放。CPU调度单元受系统调度检测单元的控制,实施CPU调度,包括增加CPU调度优先级和降低CPU调度优先级,或者调整解码模块和播放模块的CPU分配比例。
7. 如权利要求1所述的预解码高清播放器,其特征在于所述缓冲区阀值由以下公式计算得到<formula>formula see original document page 3</formula>其中n为缓冲区阀值,len为影片大小,Ids为降低CPU调度优先级后的解码速度,pt为播放时间。
8. 如权利要求1所述的预解码高清播放器,其特征在于系统调度模块在以下情况触发开始播放消息和降低预解码模块增加播放模块CPU调度的优先级(1) 当缓冲量达到阀值且播放模块还未开始播放;(2) 当缓冲量还未达到阀值但是预解码模块已经开始休眠而且播放模块还未开始播放的时候。
9. 一种预解码高清播放方法,其特征在于包括以下步骤(1) 将编码后的数据被分割成为视频数据和音频数据,经解码器解码后放入缓冲区中;(2) 计算一个缓冲区阀值,并增加用于解码器的CPU优先级,同时判断缓冲区的缓冲量是否达到阀值;如果达到该阀值,则降低用于解码器的CPU的优先级,并为播放器增加CPU优先级。
10. 如权利要求9所述的预解码高清播放器,其特征在于所述阀值的设定可以采用以下公式阀值n = len-(lds*pt);其中len为影片大小,Ids为降低CPU调度优先级后的解码速度,pt为播放时间。
全文摘要
本发明提供一种预解码高清播放器及播放方法,通过对整个播放过程进行比较独立的分阶段流程处理,并对每个处理流程进行独立使用处理器进行调度,调度依据处理器速度、影片长度等数据来计算缓冲区缓冲量的阀值,并且检测缓冲区缓冲量是否已经达到所述阀值,缓冲量未达到所述阀值之前,为预解码模块分配最高的处理器调度优先级;待缓冲区的缓冲量达到所述阀值后,系统调度模块降低预解码模块对处理器的使用量,而把更多的处理器时间优先级分配给播放模块;当缓冲区内的预缓存数据量低于所述阀值时,系统调度模块把预解码模块的处理器调度优先级设为更高,而暂停播放模块的播放。并解决了缓冲区中缓存到多少数据的时候去通知播放模块的问题,可以使高清视频能在低端处理器中进行流畅播放。
文档编号H04N7/26GK101710992SQ200910223439
公开日2010年5月19日 申请日期2009年11月16日 优先权日2009年11月16日
发明者李茗, 杨永强, 祝晓光 申请人:乐视网信息技术(北京)股份有限公司