本发明涉及智能机顶盒技术领域,尤其涉及一种机顶盒音视频同步的方法及装置。
背景技术:
随着宽带技术的普及,数字机顶盒越来越成为智能家居研究的热点。目前数字机顶盒已经被推广应用,因此,机顶盒的音视频同步效果的好坏直接影响到机顶盒用户的用户体验。
由于高清视频质量的需求和中央处理器(Center Processing Unit,CPU)的资源限制,目前的机顶盒通常采用硬件解码的方式,需要在完成解码的音视频帧送到显示模块之前对音视频帧做同步处理,即,控制当前送显帧的帧率,以确保音视频帧的播放时间差较小。然而,这种硬件解码方式对音视频帧解码后获取的时间戳存在较大的误差,音视频的同步效果不好。
技术实现要素:
有鉴于此,本发明实施例期望提供一种机顶盒音视频同步的方法及装置,以提高音视频同步的效果。
本发明实施例的技术方案是这样实现的:
一种机顶盒音视频同步的方法,包括:
确定当前同步队列中已输出所述第一帧音视频时,获取所述当前同步队列中的视频帧序列的时间戳,并对所述时间戳进行修复和预测;其中,所述第一帧音视频包括第一帧音频帧和第一帧视频帧;
计算所述视频帧序列的理想帧率和补偿帧率;
根据所述理想帧率和所述补偿帧率,获取所述视频帧序列的重复帧率;
根据所述重复帧率,对所述当前同步队列中的音频帧和视频帧进行同步处理并输出。
上述方法中,所述计算所述视频帧序列的理想帧率和补偿帧率,包括:
根据当前显示模块的刷新率和所述视频帧序列的时间戳,通过低帧率插帧算法和高帧率丢帧算法计算所述视频帧序列的理想帧率;
根据所述视频帧序列的时间戳与音频帧序列的时间戳之间的差值,计算所述视频帧序列的补偿帧率。
上述方法中,所述根据所述理想帧率和所述补偿帧率,获取所述视频帧序列的重复帧率,包括:
将所述理想帧率与所述补偿帧率相加,得到所述视频帧序列的重复帧率。
上述方法中,所述根据所述重复帧率,对所述当前同步队列中的音频帧和视频帧进行同步处理并输出,包括:
若所述重复帧率大于零,则将视频后处理模块的当前头结点入所述当前同步队列,且重复帧数等于所述重复帧率;
若所述重复帧率小于等于零,则丢弃当前视频帧,同步输出所述当前同步队列中的所述音频帧和除当前视频帧外的视频帧;
若所述重复帧率等于所述理想帧率,则以理想帧率同步输出所述当前同步队列中的所述音频帧和视频帧;
若所述重复帧率大于所述理想帧率,则向所述视频帧中插入所述补偿帧率个重复帧,以使所述当前同步队列中的所述音频帧和所述视频帧同步输出。
上述方法中,所述确定当前同步队列中已输出所述第一帧音视频之前,所述方法还包括:
根据第一帧音视频输出标识位判断所述当前同步队列中是否输出第一帧音视频;
若所述第一帧音视频输出标识位置为否,则判定输出的不是所述第一帧音视频;
若所述第一帧音视频输出标识位置为是,则判定输出的是所述第一帧音视 频。
上述方法中,所述方法还包括:
确定所述当前同步队列中未输出所述第一帧音视频时,按照预设第一帧音视频输出同步方案输出所述第一帧音视频;其中,所述预设第一帧音视频输出同步方案为慢同步方案或者快同步方案;
若所述预设第一帧音视频输出同步方案为慢同步方案,则先输出所述第一帧视频帧,再将所述同步队列中的其他视频帧与音频帧进行同步输出;
若所述预设第一帧音视频输出同步方案为快同步方案,则同时输出所述第一帧音频帧和所述第一帧视频帧。
上述方法中,所述同时输出所述第一帧音频帧和所述第一帧视频帧,包括:
若检测到所述第一帧音频帧未到,则所述第一帧视频帧等待,不进行输出;
若检测到所述第一帧音频帧已到,判断所述第一帧音频帧是否输出;
若所述第一帧音频帧未输出,且所述第一帧音频帧的时间戳与所述第一帧视频帧的时间戳的差值在预设时间差范围内,则输出所述第一帧音视频,并将第一帧音视频输出标识位置为否;
若所述第一帧音频帧未输出,且所述第一帧音频帧的时间戳与所述第一帧视频帧的时间戳的差值不在所述预设时间差范围内,则在所述第一帧视频帧比所述第一帧音频帧快时,所述第一帧视频帧等待,在所述第一帧视频帧比所述第一帧音频帧慢时,丢弃所述第一帧视频帧;
若所述第一帧音频帧已输出,则输出所述第一帧视频帧,并将第一帧音视频输出标识位置为否。
上述方法中,所述根据第一帧音视频输出标识位判断所述当前同步队列中是否输出第一帧音视频之前,所述方法还包括:
判断所述当前同步队列中的输入帧数是否满足预设帧数,并判断显示队列是否溢出;
当所述当前同步队列中的输入帧数满足所述预设帧数,且所述显示队列未溢出时,执行所述判断所述当前同步队列中的第一帧音视频是否输出的操作。
一种机顶盒音视频同步的装置,所述装置包括:
确定模块,用于确定当前同步队列中已输出所述第一帧音视频;
获取模块,用于在所述确定模块确定所述当前同步队列中已输出所述第一帧音视频时,获取所述当前同步队列中的视频帧序列的时间戳,并对所述时间戳进行修复和预测;所述第一帧音视频包括第一帧音频帧和第一帧视频帧;
计算模块,用于计算所述视频帧序列的理想帧率和补偿帧率;
所述获取模块用于根据所述理想帧率和所述补偿帧率,获取所述视频帧序列的重复帧率;根据所述重复帧率,对所述当前同步队列中的音频帧和视频帧进行同步处理并输出。
上述装置中,所述计算模块具体用于:根据当前显示模块的刷新率和所述视频帧序列的时间戳,通过低帧率插帧算法和高帧率丢帧算法计算所述视频帧序列的理想帧率;根据所述视频帧序列的时间戳与音频帧序列的时间戳之间的差值,计算所述视频帧序列的补偿帧率。
上述装置中,所述获取模块具体用于:
将所述理想帧率与所述补偿帧率相加,得到所述视频帧序列的重复帧率。
上述装置中,所述获取模块具体用于:
若所述重复帧率大于零,则将视频后处理模块的当前头结点入所述当前同步队列,且重复帧数等于所述重复帧率;
若所述重复帧率小于等于零,则丢弃当前视频帧,同步输出所述当前同步队列中的所述音频帧和除当前视频帧外的视频帧;
若所述重复帧率等于所述理想帧率,则以理想帧率同步输出所述当前同步队列中的所述音频帧和视频帧;
若所述重复帧率大于所述理想帧率,则向所述视频帧中插入所述补偿帧率个重复帧,以使所述当前同步队列中的所述音频帧和所述视频帧同步输出。
上述装置中,所述装置还包括:判断模块,用于根据第一帧音视频输出标识位判断所述当前同步队列中是否输出第一帧音视频;若所述第一帧音视频输出标识位置为否,则判定输出的不是所述第一帧音视频;若所述第一帧音视频 输出标识位置为是,则判定输出的是所述第一帧音视频。
上述装置中,所述获取模块还用于:在所述确定模块确定所述当前同步队列中未输出所述第一帧音视频时,按照预设第一帧音视频输出同步方案输出所述第一帧音视频;其中,所述预设第一帧音视频输出同步方案为慢同步方案或者快同步方案;
若所述预设第一帧音视频输出同步方案为慢同步方案,则所述获取模块先输出所述第一帧视频帧,再将所述同步队列中的其他视频帧与音频帧进行同步输出;
若所述预设第一帧音视频输出同步方案为快同步方案,则所述获取模块同时输出所述第一帧音频帧和所述第一帧视频帧。
上述装置中,所述获取模块具体用于:
若检测到所述第一帧音频帧未到,则所述第一帧视频帧等待,不进行输出;
若检测到所述第一帧音频帧已到,判断所述第一帧音频帧是否输出;
若所述第一帧音频帧未输出,且所述第一帧音频帧的时间戳与所述第一帧视频帧的时间戳的差值在预设时间差范围内,则输出所述第一帧音视频,并将第一帧音视频输出标识位置为否;
若所述第一帧音频帧未输出,且所述第一帧音频帧的时间戳与所述第一帧视频帧的时间戳的差值不在所述预设时间差范围内,则在所述第一帧视频帧比所述第一帧音频帧快时,所述第一帧视频帧等待,在所述第一帧视频帧比所述第一帧音频帧慢时,丢弃所述第一帧视频帧;
若所述第一帧音频帧已输出,则输出所述第一帧视频帧,并将第一帧音视频输出标识位置为否。
上述装置中,所述判断模块还用于:
判断所述当前同步队列中的输入帧数是否满足预设帧数,并判断显示队列是否溢出;
当所述判断模块判断所述当前同步队列中的输入帧数满足所述预设帧数,且所述显示队列未溢出时,所述处理模块执行所述判断所述当前同步队列中的 第一帧音视频是否输出的操作。
本发明实施例提供的机顶盒音视频同步的方法及装置,通过确定当前同步队列中已输出所述第一帧音视频时,获取所述当前同步队列中的视频帧序列的时间戳,并对所述时间戳进行修复和预测;所述第一帧音视频包括第一帧音频帧和第一帧视频帧;计算所述视频帧序列的理想帧率和补偿帧率;根据所述理想帧率和所述补偿帧率,获取所述视频帧序列的重复帧率;根据所述重复帧率,对所述当前同步队列中的音频帧和视频帧进行同步处理并输出;如此,能减少获取音视频帧的时间戳的误差,从而提高音视频的同步效果。
附图说明
图1为本发明实施例提供的机顶盒音视频同步的方法的流程图;
图2为本发明实施例提供的机顶盒音视频同步的装置的结构示意图。
具体实施方式
在本发明的各实施例中,以音频帧的时间戳作为时间标准,在同步过程中,主要根据音视频的时间戳差值调整视频帧的帧率,以对音频帧进行等待或丢弃视频帧,从而实现视频帧与音频帧的同步,从而减少了获取音视频帧的时间戳的误差,提高了音视频的同步效果。
图1为本发明实施例提供的机顶盒音视频同步的方法的流程图。如图1所示,本实施例提供的机顶盒音视频同步的方法具体可以包括:
步骤101、确定当前同步队列中已输出所述第一帧音视频时,获取所述当前同步队列中的视频帧序列的时间戳,并对所述时间戳进行修复和预测;所述第一帧音视频包括第一帧音频帧和第一帧视频帧。
若当前同步队列输出的不是第一帧音视频,即第一帧音视频已经输出,则需要对视频帧序列的时间戳进行修复和预测。
具体的,在播放过程中,正常的pts序列具有不断递增的特点,即pts1<pts2<pts3<pts4,如果不满足此条件的pts序列都被判断为异常pts。本实施 例中举出三种异常形态进行说明。
异常形态1:pts1<pts2,pts2>pts4>pts3,当直播频道出现回环(片源循环播,首尾连接点),会出现此种形态;这种异常下需要将同步模块一些内部变量清零,表示重新开始播放,不去修复pts;异常形态2:pts1<pts2<pts3,p3>pts4>p2;这种形态下需要修复pts3,修复方法是pts3=pts2+delay;Delay表示理想的帧间pts差;异常形态3:p3<p1<p2<p4;这种形态下需要修复pts3,修复方法是pts3=pts2+delay;其中,delay表示理想的帧间pts差,通过统计前100帧的视频前后两帧的pts差值的分布,取最大概率的pts差值作为理想delay。
对于pts预测:如果将隔行视频经过去隔行处理之后,帧率翻倍,即原来的每一场经过插值之后变成了一帧,原来的每一帧就变成两帧,一帧采用原始帧的pts作为pts,另外一帧的pts取当前原始帧与下个原始帧的pts均值作为预测的pts。
本实施例中,在确定当前同步队列中已输出第一帧音视频之前,还需要根据第一帧音视频输出标识位判断所述当前同步队列中是否输出第一帧音视频;若所述第一帧音视频输出标识位置为否,则判定输出的不是所述第一帧音视频;若所述第一帧音视频输出标识位置为是,则判定输出的是所述第一帧音视频。
例如,可以设置当第一帧音视频输出标识位置为1时,表明所述第一帧音视频已输出,此时当同步队列中即将输出的不是第一帧音视频,置为0时表明所述第一帧音视频未输出,此时当同步队列中即将输出的是第一帧音视频;或者可以设置当第一帧音视频输出标识位置为0时,表明所述第一帧音视频已输出,置为1时表明所述第一帧音视频未输出。本实施例对此不做具体限制。
在根据第一帧音视频输出标识位判断所述当前同步队列中是否输出第一帧音视频之前,还需要判断所述当前同步队列中的输入帧数是否满足预设帧数,并判断显示队列是否溢出;当所述当前同步队列中的输入帧数满足所述预设帧数,且所述显示队列未溢出时,执行所述判断所述当前同步队列中的第一帧音视频是否输出的操作。
判断当前同步队列中的输入帧数是否满足预设帧数,本实施例中,对于隔 行片源逐行输出来说,要求帧数大于等于3,其他情况下则要求帧数大于等于2。
进一步的,确定所述当前同步队列中未输出所述第一帧音视频时,按照预设第一帧音视频输出同步方案输出所述第一帧音视频,结束本次处理流程。
需要说明的是,该预设第一帧音视频输出同步方案是根据客户的具体需求预先设置好的,当判断出当前同步队列中输出第一帧音视频时,可以按照预设第一帧音视频输出同步方案对第一帧音视频进行输出。
具体的,该预设第一帧音视频输出同步方案为慢同步方案或者快同步方案;若所述预设第一帧音视频输出同步方案为慢同步方案,则先输出所述第一帧视频帧,再将所述同步队列中的其他视频帧与音频帧进行同步输出,即,慢同步方案要求第一帧视频帧立即输出,在输出第一帧视频帧后再通过同步方案将视频帧与音频帧同步;若所述预设第一帧音视频输出同步方案为快同步方案,则同时输出所述第一帧音频帧和所述第一帧视频帧,即,在快同步方案中,要求音视频同时输出且在输出时即同步。
在快同步方案中,同时输出所述第一帧音频帧和所述第一帧视频帧,具体可以包括:若检测到所述第一帧音频帧未到,则所述第一帧视频帧等待,不进行输出;若检测到所述第一帧音频帧已到,判断所述第一帧音频帧是否输出;若所述第一帧音频帧未输出,且所述第一帧音频帧的时间戳与所述第一帧视频帧的时间戳的差值在预设时间差范围内,则输出所述第一帧音视频,并将第一帧音视频输出标识位置为否;若所述第一帧音频帧未输出,且所述第一帧音频帧的时间戳与所述第一帧视频帧的时间戳的差值不在所述预设时间差范围内,则在所述第一帧视频帧比所述第一帧音频帧快时,所述第一帧视频帧等待,在所述第一帧视频帧比所述第一帧音频帧慢时,丢弃所述第一帧视频帧;若所述第一帧音频帧已输出,则输出所述第一帧视频帧,并将第一帧音视频输出标识位置为否。
另外需说明的是,如果超过1.5s音视频没有同步或者音频帧没有到来,则将第一帧视频帧强制输出。
步骤102、计算所述视频帧序列的理想帧率和补偿帧率。
本步骤中,根据当前显示模块的刷新率和所述视频帧序列的时间戳,通过低帧率插帧算法和高帧率丢帧算法计算所述视频帧序列的理想帧率idea_repeat;根据所述视频帧序列的时间戳与音频帧序列的时间戳之间的差值,计算所述视频帧序列的补偿帧率extra_repeat。
具体的,本实施例中采用的高帧率丢帧算法为:三帧跨两周期丢当前帧,以显示模块延时20ms为例:获取同步输入队列(视频后处理)顺序出来的三帧pts,记为pts0、pts1、pts2,分别对应同步输出队列尾帧pts、同步输入队列头帧pts、同步输入队列第二帧pts;若(pts2-pts0)>2*20ms,则准备丢掉pts1对应的视频帧;否则认为是低帧率片源,退出算法;若显示队列中压的帧数不够N帧(经验值),则不允许丢掉视频帧此时通过插入少量的音频数据实现音频等待视频的效果,否则丢掉当前视频帧。
具体的,本实施例中采用的低帧率插帧算法中,需要保证送显频率不能超出显示模块的刷新率,从而通过插重复帧保证每个有效帧在屏幕上停留合适的时间。
由于理想帧率只是考虑了显示模块的刷新率的影响,以确保视频的解码与播放能够流畅,并未考虑音视频之间的同步,将视频同步到音频就是根据音频的播放快慢对视频帧进行插帧或者丢帧,称为补偿帧率extra_repeat。
步骤103、根据所述理想帧率和所述补偿帧率,获取所述视频帧序列的重复帧率。
将所述理想帧率与所述补偿帧率相加,得到所述视频帧序列的重复帧率all_repeat;具体的,all_repeat=idea_repeat+extra_repeat。
步骤104、根据所述重复帧率,对所述当前同步队列中的音频帧和视频帧进行同步处理并输出。
若所述重复帧率大于零,则将视频后处理模块的当前头结点入所述当前同步队列,且重复帧数等于所述重复帧率;若所述重复帧率小于等于零,则丢弃当前视频帧,同步输出所述当前同步队列中的所述音频帧和除当前视频帧外的视频帧;若所述重复帧率等于所述理想帧率,则以理想帧率同步输出所述当前 同步队列中的所述音频帧和视频帧;若所述重复帧率大于所述理想帧率,则向所述视频帧中插入所述补偿帧率个重复帧,以使所述当前同步队列中的所述音频帧和所述视频帧同步输出。
即,若all_repeat>0,表示视频后处理模块当前头结点入同步队列,重复帧数是all_repeat,如果all_repeat=idea_repeat表示以理想帧率播放,如果all_repeat>idea_repeat表示视频比音频快,相比较于理想帧率需要另插入extra_repeat个重复帧对帧率进行补偿,确保音视频能够同步;若all_repeat<=0,表示视频比音频慢,需要将当前帧丢弃,对于当前帧可以插多个重复帧但最多能丢一帧。
在实际应用中,为防止画面出现冻结,当extra_repeat<0即判断丢为丢帧,此时显示模块的显示队列数据不足,则将extra_repeat=1;为防止画面卡顿,最多连续丢3帧;为防止重复帧过多画面顿住,对于一个帧节点入同步队列,最多插3个重复帧;为保证播放开始前几帧画面播放流畅,在播放开始的前几帧extra_repeat最多插1个重复帧进行补偿。
本实施例的技术方案,可以减少获取音视频帧的时间戳的误差,提高音视频的同步效果。
图2为本发明实施例提供的机顶盒音视频同步的装置的结构示意图。如图2所示,本实施例提供的装置可以包括:
确定模块11,用于确定当前同步队列中已输出所述第一帧音视频;
获取模块12,用于在所述确定模块确定所述当前同步队列中已输出所述第一帧音视频时,获取所述当前同步队列中的视频帧序列的时间戳,并对所述时间戳进行修复和预测;所述第一帧音视频包括第一帧音频帧和第一帧视频帧;
计算模块13,用于计算所述视频帧序列的理想帧率和补偿帧率;
所述获取模块12用于根据所述理想帧率和所述补偿帧率,获取所述视频帧序列的重复帧率;根据所述重复帧率,对所述当前同步队列中的音频帧和视频帧进行同步处理并输出。
所述计算模块13具体用于:根据当前显示模块的刷新率和所述视频帧序列 的时间戳,通过低帧率插帧算法和高帧率丢帧算法计算所述视频帧序列的理想帧率;根据所述视频帧序列的时间戳与音频帧序列的时间戳之间的差值,计算所述视频帧序列的补偿帧率。
所述获取模块12具体用于:将所述理想帧率与所述补偿帧率相加,得到所述视频帧序列的重复帧率;若所述重复帧率大于零,则将视频后处理模块的当前头结点入所述当前同步队列,且重复帧数等于所述重复帧率;若所述重复帧率小于等于零,则丢弃当前视频帧,同步输出所述当前同步队列中的所述音频帧和除当前视频帧外的视频帧;若所述重复帧率等于所述理想帧率,则以理想帧率同步输出所述当前同步队列中的所述音频帧和视频帧;若所述重复帧率大于所述理想帧率,则向所述视频帧中插入所述偿帧率个重复帧,以使所述当前同步队列中的所述音频帧和所述视频帧同步输出。
进一步的,所述装置还可以包括判断模块,用于根据第一帧音视频输出标识位判断所述当前同步队列中是否输出第一帧音视频;若所述第一帧音视频输出标识位置为否,则判定输出的不是所述第一帧音视频;若所述第一帧音视频输出标识位置为是,则判定输出的是所述第一帧音视频。
进一步的,所述获取模块12还可以用于:在确定模块11确定所述当前同步队列中未输出所述第一帧音视频时,按照预设第一帧音视频输出同步方案输出所述第一帧音视频;其中,所述预设第一帧音视频输出同步方案为慢同步方案或者快同步方案;若所述预设第一帧音视频输出同步方案为慢同步方案,则所述获取模块12先输出所述第一帧视频帧,再将所述同步队列中的其他视频帧与音频帧进行同步输出;若所述预设第一帧音视频输出同步方案为快同步方案,则所述获取模块12同时输出所述第一帧音频帧和所述第一帧视频帧。
具体的,所述获取模块12具体可以用于:若检测到所述第一帧音频帧未到,则所述第一帧视频帧等待,不进行输出;若检测到所述第一帧音频帧已到,判断所述第一帧音频帧是否输出;若所述第一帧音频帧未输出,且所述第一帧音频帧的时间戳与所述第一帧视频帧的时间戳的差值在预设时间差范围内,则输出所述第一帧音视频,并将第一帧音视频输出标识位置为已输出;若所述第一 帧音频帧未输出,且所述第一帧音频帧的时间戳与所述第一帧视频帧的时间戳的差值不在所述预设时间差范围内,则在所述第一帧视频帧比所述第一帧音频帧快时,所述第一帧视频帧等待,在所述第一帧视频帧比所述第一帧音频帧慢时,丢弃所述第一帧视频帧;若所述第一帧音频帧已输出,则输出所述第一帧视频帧,并将第一帧音视频输出标识位置为已输出。
所述判断模块还可以用于:判断所述当前同步队列中的输入帧数是否满足预设帧数,并判断显示队列是否溢出;当所述判断模块判断所述当前同步队列中的输入帧数满足所述预设帧数,且所述显示队列未溢出时,所述处理模块执行所述判断所述当前同步队列中的第一帧音视频是否输出的操作。
本实施例的机顶盒音视频同步的装置,可以用于执行上述图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
在实际应用中,该确定模块11、获取模块12和计算模块13可由位于用户终端上的中央处理器(CPU)、微处理器(MPU)、数字信号处理器(DSP)或现场可编程门阵列(FPGA)等器件实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备 以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。