发明内容
本发明实施例的目的在于提出一种视频播放的方法,旨在解决现有技术中因解码某帧视频帧时间过长,而导致显示输出延迟、显示不均匀的问题,同时本发明可应用CPU运行频率低又能处理高码率高帧率的终端嵌入式终端设备。
本发明实施例是这样实现的,一种视频解码的方法,包括以下步骤:
读取视频帧和相对时间戳,对视频帧解码并生成图像帧;
判断缓冲区是否已满,如果否,存储未写入的图像帧和相对时间戳到缓冲区,并继续读取视频帧和相对时间戳;
如果是,休眠一个等待周期;
等待周期期满,休眠被唤醒,再次判断缓冲区是否已满。
本发明实施例的另一目的在于提出一种视频解码装置,所述装置包括:
解码模块,与第一判断模块相连,用于获取视频帧和相对时间戳,对视频帧进行解码并生成图像帧,向第一判断模块发送解码完成的指令,接收第一判断模块的存储指令;
第一判断模块,与解码模块、缓冲模块和第一休眠模块相连,用于接收解码模块的解码完成的指令,请求获取缓冲模块的存储状态,根据缓冲模块的存储状态向解码模块发送存储指令或向第一休眠模块发送休眠指令;并根据第一休眠模块发送的休眠期满指令,判断所述缓冲模块的存储状态为未满或已满,如果存储状态为未满,则向解码模块发送存储指令,如果存储状态为已满,第一休眠模块发送休眠指令;
缓冲模块,与第一判断模块相连,用于接收第一判断模块的获取缓冲模块的存储状态的请求,并向第一判断模块发送缓冲模块的存储状态,同时接收解码模块发送的图像帧和相对时间戳,并存储;
第一休眠模块,与第一判断模块相连,用于接收第一判断模块发送的休眠指令,进入一个等待周期的休眠状态,接收操作系统发送的唤醒指令,向第一判断模块发送休眠期满指令。
本发明实施例的另一目的在于提出一种视频播放方法,包括以下步骤:
读取缓冲区的图像帧和相对时间戳;
判断相对系统时间是否小于相对时间戳,如果否,显示图像帧,并继续读取缓冲区的图像帧和相对时间戳;
如果是,休眠一个等待周期;
等待周期期满,休眠被唤醒,再次判断相对系统时间是否小于相对时间戳。
本发明实施例的另一目的在于提出一种视频播放装置,所述装置包括:
读取模块,与第二判断模块相连,用于读取缓存区的图像帧和相对时间戳,向第二判断模块发送读取完成指令,接收第二判断模块的显示指令,发送图像帧;
第二判断模块,与读取模块、显示模块和第二休眠模块相连,用于接收读取模块的读取完成指令和接收第二休眠模块发送的休眠期满指令,根据相对系统时间与相对时间戳的对比结果,向读取模块和显示模块发送显示指令或向第二休眠模块发送休眠指令;
显示模块,与第二判断模块相连,用于接收第二判断模块的显示指令,获取图像帧并显示;
第二休眠模块,与第二判断模块相连,用于接收第二判断模块发送的休眠指令,进入一个等待周期的休眠状态;接收操作系统发送的唤醒指令,向第二判断模块发送休眠期满指令。
本发明实施例的另一目的在于提出一种视频解码和播放系统,所述的系统包括:解码装置和播放装置;
解码模块,与第一判断模块相连,用于获取视频帧和相对时间戳,视频帧解码,生成图像帧,向第一判断模块发送解码完成的指令,接收第一判断模块的存储指令;
第一判断模块,与解码模块、缓冲模块和第一休眠模块相连,用于接收解码模块的解码完成的指令,请求获取缓冲模块的存储状态,根据缓冲模块的存储状态向解码模块发送存储指令或向第一休眠模块发送休眠指令;并根据第一休眠模块发送的休眠期满指令,判断所述缓冲模块的存储状态为未满或已满,如果存储状态为未满,则向解码模块发送存储指令,如果存储状态为已满,第一休眠模块发送休眠指令;
缓冲模块,与第一判断模块相连,用于接收第一判断模块的获取缓冲模块的存储状态的请求,并向第一判断模块发送缓冲模块的存储状态,同时接收解码模块发送的图像帧和相对时间戳,并存储;
第一休眠模块,与第一判断模块相连,用于接收第一判断模块发送的休眠指令,进入一个等待周期的休眠状态,接收操作系统发送的唤醒指令,向第一判断模块发送休眠期满指令;
读取模块,与第二判断模块相连,用于读取缓存区的图像帧和相对时间戳,向第二判断模块发送读取完成指令,接收第二判断模块的显示指令,发送图像帧;
第二判断模块,与读取模块、显示模块和第二休眠模块相连,用于接收读取模块的读取完成指令和接收第二休眠模块发送的休眠期满指令,根据相对系统时间与相对时间戳的对比结果,向读取模块和显示模块发送显示指令或向第二休眠模块发送休眠指令;
显示模块,与第二判断模块相连,用于接收第二判断模块的显示指令,获取图像帧并显示;
第二休眠模块,与第二判断模块相连,用于接收第二判断模块发送的休眠指令,进入一个等待周期的休眠状态;并用于接收操作系统发送的唤醒指令,向第二判断模块发送休眠期满指令。
本发明实施例的另一目的在于提出一种包括所述视频解码和播放系统的终端设备。
本发明的有益效果:
通过操作系统控制解码与播放的工作线程的优先级,解码视频帧生成图像帧后,根据缓冲区的存储状态控制图像帧的存储或者解码线程的休眠,播放的工作线程读取缓冲区中的图像帧和相对时间戳,根据相对系统时间与相对时间戳的对比结果控制图像帧的显示或者播放线程的休眠。即使在解码某一帧占用CPU时间过高时,并不影响播放装置显示图像帧,可以准确的把缓冲区里的图像按时显示。在解码和显示过程中,设定的休眠时间,确保工作线程无需工作的情况下进入休眠状态,避免占用CPU,兼容CPU运行频率低又能处理高码率高帧率的终端嵌入式终端设备,适用无音频的视频解码和播放。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图和实施例,对本发明进行进一步详细说明,为了便于说明,仅示出了与本发明实施例相关的部分。应当理解,此处所描写的具体实施例,仅仅用于解释本发明,并不用以限制本发明。
本发明通过操作系统控制解码与播放的工作线程的优先级,确保播放的工作线程高于解码的工作线程的优先级,达到图像帧的顺畅显示;解码的工作线程在解码视频帧生成图像帧后,把图像帧存储到缓冲区,即使在解码某一帧占用CPU时间过高时,并不影响播放装置显示图像帧,可以准确的把缓冲区里的图象按时显示;在解码和显示过程中,设定不同的休眠时间,确保工作线程无需工作的情况下进入休眠状态,避免占用CPU。
实施例一
图1是本发明实施例一种视频解码方法流程图。所述方法包括以下步骤:
S101,读取视频帧和相对时间戳,对视频帧进行解码并生成图像帧;
所述的步骤相对时间戳可替换为相对音频时间;
读取视频帧和相对时间戳时,操作系统创建所对应的工作线程;
所述的相对时间戳为每个图像帧所对应的被相对显示时间点,所述显示时间点是以0ms开始的时间偏移量,在开始显示时以0ms记录显示起点时间;
S102,判断缓冲区是否已满,是则进入步骤S104,否则进入步骤S103;
S103,存储未写入的图像帧和相对时间戳到缓冲区,进入步骤S101;
此处的“相对时间戳”也可替换为“相对音频时间”。
S104,休眠一个等待周期;
所述的一个等待周期是1000ms*[(缓冲区所能容纳的帧数/2)/帧率],即在等待周期内所述工作线程不再占用CPU;
S105,唤醒休眠,进入步骤S102再次判断缓冲区是否已满;
所述的唤醒休眠是操作系统再继续响应所述工作线程;
本发明实施例中解码生成图像帧存储到缓冲区,避免了因解码耗时过长,导致丢帧和图像播放的不均匀,如果缓冲区已满,则进入休眠状态,从而减少CPU的消耗,只有在等待周期期满才被操作系统唤醒重新判断缓冲区;等待周期的时间取决于缓冲区的大小和帧率,缓冲区里的图像帧被消耗到一半时才被唤醒继续存储图像帧。
实施例二
图2是本发明实施例一种视频解码装置结构示意图。
所述解码装置包括:解码模块、第一判断模块、缓冲模块、第一休眠模块;
解码模块,与第一判断模块相连,用于获取视频帧和相对时间戳,对视频帧进行解码并生成图像帧,向第一判断模块发送解码完成的指令,接收第一判断模块的存储指令;
第一判断模块,与解码模块、缓冲模块和第一休眠模块相连,用于接收解码模块的解码完成的指令,请求获取缓冲模块的存储状态,根据缓冲模块的存储状态向解码模块发送存储指令或向第一休眠模块发送休眠指令;并根据第一休眠模块发送的休眠期满指令,判断所述缓冲模块的存储状态为未满或已满,如果存储状态为未满,则向解码模块发送存储指令,如果存储状态为已满,第一休眠模块发送休眠指令;
缓冲模块,与第一判断模块相连,用于接收第一判断模块的获取缓冲模块的存储状态的请求,并向第一判断模块发送缓冲模块的存储状态,同时接收解码模块发送的图像帧和相对时间戳,并存储;
第一休眠模块,与第一判断模块相连,用于接收第一判断模块发送的休眠指令,进入一个等待周期的休眠状态,接收操作系统发送的唤醒指令,向第一判断模块发送休眠期满指令;
所述的等待周期是1000ms*[(缓冲区所能容纳的帧数/2)/帧率];
所述的休眠状态是指解码装置的工作线程不再占用CPU。
本发明实施例中解码模块生成图像帧,第一判断模块判断通过判断缓冲模块的存储状态,来控制是否存储到缓冲模块或者进入休眠状态;如果缓冲模块的存储状态为未满,图像帧存储到缓冲模块,避免了因解码耗时过长,导致丢帧和图像输出的不均匀;如果缓冲模块已满,则发送休眠指令到第一休眠模块进入一个等待周期的休眠状态,从而减少CPU的消耗,只有在等待周期期满才被操作系统唤醒重新启动;等待周期的时间取决于缓冲模块的大小和帧率,缓冲模块里的图像帧被消耗到一半时才被唤醒继续存储图像帧。
实施例三
图4是本发明实施例一种视频播放方法流程图。所述方法包括以下步骤:
S301,读取缓冲区的图像帧和相对时间戳;
读取缓冲区开始时,操作系统创建所对应的工作线程;
所述的相对时间戳为每个图像帧所对应的被相对显示时间点,是以0ms开始的时间偏移量,在开始显示时以0ms记录显示起点时间;
S302,判断相对系统时间是否小于相对时间戳,是则进入步骤S304,否则进入步骤S303;
所述的相对系统时间是开始显示时以0ms为基准的时间偏移量;
S303,显示图像帧,进入步骤S301;
S304,休眠一个等待周期;
所述的一个等待周期是1000ms/(帧率*2)(取整数),在等待周期内工作线程不再占用CPU;
S305,唤醒休眠,进入步骤S302;
所述的相对系统时间可替换为相对音频时间;
所述的唤醒休眠是操作系统继续响应工作线程;
所述“相对时间戳”也可替换为相对“音频时间”。
本发明实施例中通过比对相对系统时间与小于相对时间戳来控制图像帧的显示,能够完全按照节目源所给定的每帧相对时间戳进行实时显示,确保一秒内的图像帧显示的均匀性,同样适用于没有音频的视频的流畅播放。
实施例四
图4是本发明实施例一种视频播放装置结构示意图。
所述播放装置包括:读取模块、第二判断模块、显示模块、第二休眠模块;
读取模块,与第二判断模块相连,用于读取缓存区的图像帧和相对时间戳,向第二判断模块发送读取完成指令,接收第二判断模块的显示指令,发送图像帧;
所述的相对时间戳为每个图像帧所对应的被相对显示时间点,是以0ms开始的时间偏移量,在开始显示时以0ms记录显示起点时间;
第二判断模块,与读取模块、显示模块和第二休眠模块相连,用于接收读取模块的读取完成指令和接收第二休眠模块发送的休眠期满指令,根据相对系统时间与相对时间戳的对比结果,向读取模块和显示模块发送显示指令或向第二休眠模块发送休眠指令;
所述的对比结果是指相对系统时间是否小于相对时间戳的判断结果,如果所述的对比结果为否,则向读取模块和显示模块发送显示指令,如果所述的对比结果为是,则向第二休眠模块发送休眠指令;
显示模块,与第二判断模块相连,用于接收第二判断模块的显示指令,获取图像帧并显示;
第二休眠模块,与第二判断模块相连,用于接收第二判断模块发送的休眠指令,进入一个等待周期的休眠状态;并用于接收操作系统发送的唤醒指令,向第二判断模块发送休眠期满指令;
所述的等待周期是1000ms/(帧率*2)(取整数);
所述的休眠状态是指播放装置的工作线程不再占用CPU。
本发明实施例中第二判断模块通过比对相对系统时间与小于相对时间戳来控制显示模块的显示,能够完全按照节目源所给定的每帧相对时间戳进行实时显示,确保一秒内的图像帧显示的均匀性,同样适用于没有音频的视频的流畅播放,同时,第二休眠模块的休眠周期定义为1000ms/(帧率*2),有效控制播放装置与操作系统和CPU之间的高效协作。
实施例五
图5是本发明实施例一种视频解码和播放系统结构示意图。
所述视频解码和播放系统包括:解码装置和播放装置;
解码装置,与播放装置相连,包括:解码模块、第一判断模块、缓冲模块、第一休眠模块;
解码模块,与第一判断模块相连,用于获取视频帧和相对时间戳,视频帧解码,生成图像帧,向第一判断模块发送解码完成的指令,接收第一判断模块的存储指令;
所述的图像帧包括图像和每帧图像对应的时间戳;
第一判断模块,与解码模块、缓冲模块和第一休眠模块相连,用于接收解码模块的解码完成的指令和接收第一休眠模块发送的休眠期满指令,请求获取缓冲模块的存储状态,根据所述的存储状态向解码模块发送存储指令或向第一休眠模块发送休眠指令;
所述的存储状态为未满或已满,如果存储状态为未满,则向解码模块发送存储指令,如果存储状态为已满,第一休眠模块发送休眠指令;
缓冲模块,与第一判断模块相连,用于接收第一判断模块的获取缓冲模块的存储状态的请求,并向第一判断模块发送缓冲模块的存储状态,同时接收解码模块发送的图像帧和相对时间戳,并存储;
第一休眠模块,与第一判断模块相连,用于接收第一判断模块发送的休眠指令,进入一个等待周期的休眠状态,接收操作系统发送的唤醒指令,向第一判断模块发送休眠期满指令;
所述的等待周期是1000ms*[(缓冲区所能容纳的帧数/2)/帧率];
所述的休眠状态是指解码装置的工作线程不再占用CPU;
播放装置,与解码装置相连,包括:读取模块、第二判断模块、显示模块、第二休眠模块;
读取模块,与第二判断模块相连,用于读取缓存区的图像帧和相对时间戳,向第二判断模块发送读取完成指令,接收第二判断模块的显示指令,发送图像帧;
所述的相对时间戳为每个图像帧所对应的被相对显示时间点,是以0ms开始的时间偏移量,在开始显示时以0ms记录显示起点时间;
第二判断模块,与读取模块、显示模块和第二休眠模块相连,用于接收读取模块的读取完成指令和接收第二休眠模块发送的休眠期满指令,根据相对系统时间与相对时间戳的对比结果,向读取模块和显示模块发送显示指令或向第二休眠模块发送休眠指令;
所述的对比结果是指相对系统时间是否小于相对时间戳的判断结果,如果所述的对比结果为否,则向读取模块和显示模块发送显示指令,如果所述的对比结果为是,则向第二休眠模块发送休眠指令;
显示模块,与第二判断模块相连,用于接收第二判断模块的显示指令,获取图像帧并显示;
第二休眠模块,与第二判断模块相连,用于接收第二判断模块发送的休眠指令,进入一个等待周期的休眠状态;接收操作系统发送的唤醒指令,向第二判断模块发送休眠期满指令;
所述的等待周期是1000ms/(帧率*2)(取整数);
所述的休眠状态是指播放装置的工作线程不再占用CPU;
所述的视频解码和播放系统的工作过程如下:
解码装置和播放装置启动时,操作系统设定解码装置与播放装置的优先级,播放装置的优先级高于解码装置的优先级;解码模块对视频帧解码生成图像帧;第一判断模块获取缓冲模块的存储状态,如果未满,第一判断模块向解码模块发送存储指令,解码模块存储图像帧到缓冲模块;如果已满,第一判断模块向第一休眠模块发送休眠指令,解码装置进入一个等待周期的休眠状态;播放装置读取缓冲模块的图像帧,第二判断模块判断相对系统时间是否小于相对时间戳,如果否,第二判断模块向读取模块和显示模块发送显示指令,读取模块向显示模块发送图像帧并显示;如果是,第二判断模块向第二休眠模块发送休眠指令,播放装置进入一个周期的休眠状态。
本发明实施例中操作系统通过控制解码装置与播放装置的优先级,播放装置的优先级比解码装置的优先级高,确保播放装置能够顺畅播放,即使解码装置在解码某一帧占用CPU时间过高时,并不影响播放装置显示图像帧,可以准确的把缓冲区里的图象按时显示,解码装置因解码时CPU占用时间不均匀性不会影像图像的显示,只是存储到缓冲模块即可。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。