音视频同步方法和装置的制造方法_2

文档序号:8302067阅读:来源:国知局
值,则降低该视频数据的播放速率,以使该音频数据和视频数据播放同步;若调节速率为负值,则增加该视频数据的播放速率,以使该音频数据和视频数据播放同步;若调节速率为负值且调节速率的绝对值大于预设值,则控制音频停止播放,以使该音频数据和视频数据播放同步。
[0047]具体的,降低视频数据的播放速率可为将当前视频数据的播放速率减去调节速率的绝对值得到新的视频数据的播放速率。增加视频数据的播放速率可为将当前视频数据的播放速率增加调节速率的绝对值得到新的视频数据的播放速率。
[0048]上述音视频同步方法,通过根据当前播放视频数据的时间戳和音频数据的时间戳计算当前音视频播放的时间差,并根据当前音视频播放的时间差获取调节速率,根据调节速率调节视频播放速率或控制音频停止播放,使得音频数据和视频数据播放同步,在发送端网络出现卡顿时,并不会引起接收方播放的视频和音频同时出现卡顿,提高了音频播放的流畅性,尤其应用于在音视频分开采集、编码和传输场景下的视频直播中音视频同步,BP便在发送端网络出现拥塞和丢包的场景下,同步也会在网络正常之后恢复,并且声音播放的流畅性更易于保证。
[0049]在一个实施例中,上述音视频同步方法还包括:若该当前音视频播放的时间差的绝对值在预定范围内,则判定该当前音视频播放同步。
[0050]具体的,预定范围可根据需要设定。
[0051]若该当前音视频播放的时间差小于或等于预定上限值,则根据该当前音视频播放的时间戳获取调节速率。
[0052]若该当前音视频播放的时间差大于预定上限值,则表示该音视频播放无法同步。
[0053]具体的,预定上限值可根据需要设定,例如可为3分钟。若超过该预定上限值,则表示采集或传输逻辑出现异常,不适合进行同步。
[0054]图3为另一个实施例中音视频同步方法的流程图。图3的音视频同步方法应用于图1的应用环境中。如图3所示,该音视频同步方法包括:
[0055]步骤302,将采集的音频数据和视频数据分别标记对应的时间戳。
[0056]在一个实施例中,步骤302包括:将采集的第一帧视频数据标记对应的系统时间戳,再第一帧之后每采集到一帧视频数据,统计已采集视频数据的平均帧率,并根据该平均帧率递增视频数据的时间戳,获取递增之后的时间戳与当前系统时间戳的差值;当该递增之后的时间戳与当前系统时间戳的差值在误差允许范围内,则将该递增之后的时间戳作为该视频数据的时间戳;当该递增之后的时间戳与当前系统时间戳的差值未在误差允许范围内,则根据该当前系统时间戳修正该视频数据的时间戳。
[0057]具体的,平均帧率可以通过统计每秒编码后输出的数据帧,再通过带权平均算法获得,例如计算公式为BI = (B0*a+A)>>3来获取,其中,BI是更新后的平均帧率;B0是更新前的平均帧率;a为固定参数,可根据需要设定,例如a为7或10等;A是新的样本值,即新采集的视频帧。初始帧率可由用户设定值,以后每秒更新一次当前的平均帧率。
[0058]在一个实施例中,根据该平均帧率递增视频数据的时间戳具体包括:根据平均帧率计算出每次递增的时间量值,当前视频帧的时间戳等于上一视频帧的时间戳加上该时间量值。例如时间量值为1000/B,B为平均帧率,则Tl = T0+1000/B,其中,Tl为当前视频帧的时间戳,TO为上一视频帧的时间戳。
[0059]在一个实施例中,当该递增之后的时间戳与当前系统时间戳的差值未在误差允许范围内,则根据该当前系统时间戳修正该视频数据的时间戳的步骤包括:将当前系统时间戳与递增之后的时间戳的差值的一半作为修正值,将递增之后的时间戳加上该修正值得到修正后的时间戳。
[0060]具体的,误差允许范围可为根据需要设定,例如可为递增之后的时间戳小于当前系统时间减去时间量值的三分之一,或者,递增之后的时间戳小于当前系统时间减去时间量值的二分之一等。
[0061]步骤304,将音频数据及其对应的时间戳进行编码,并将编码后的音频数据和对应的时间戳封装成音频数据包。
[0062]具体的,音频数据可按照时间戳顺序进行编码,其后的音频数据的解码也按照时间戳顺序进行。
[0063]步骤306,将视频数据及其对应的时间戳进行编码,并将编码后的视频数据和编码后带出的对应时间戳封装成视频数据包。
[0064]具体的,视频数据是一个图像组,视频编码器对视频数据进行编码会重排编码后的图像帧数据,视频解码器也会对重排后的图像帧数据进行恢复。视频编码器对视频数据编码后带出对应的时间戳,该对应的时间戳可能与视频数据原来所对应的时间戳不同,但视频解码器对编码后的视频数据进行解码后带出的时间戳与视频数据原来所对应的时间戳相同,即无论采用何种方式进行编码和解码,视频数据在编码前的时间戳和解码后的时间戳相同。
[0065]视频数据编码可米用延时编码,也可米用零延时编码。
[0066]步骤308,发送该视频数据包和该音频数据包。
[0067]具体的,视频数据编码采用零延时编码时,可在视频数据编码封装成视频数据包后直接发送,音频数据编码封装成音频数据包后可直接发送。
[0068]在一个实施例中,上述音视频同步方法还包括:计算该视频数据编码所消耗的延时时间;将该音频数据包缓存该延时时间后再发送。
[0069]视频数据采用延时编码时,需要计算视频数据编码所消耗的延时时间,然后将音频数据包缓存延时时间后再发送,以保证音视频数据在传输起点的一致性。视频数据延时因设定的编码参数不同而变化很大,可以从O秒到数十秒不等。视频数据编码所消耗的延时时间可为接收到第一个编码帧的时间与接收到采集的原始视频图像之后记录的时间之间的差值。
[0070]步骤310,对分别接收的音频数据包和视频数据包进行解码得到音频数据的时间戳和视频数据的时间戳。
[0071]具体的,接收的音频数据包和视频数据包是经过编码的,对接收的音频数据包进行解码得到音频数据及其对应的时间戳,对接收的视频数据包进行解码得到视频数据及其对应的时间戳。音频数据包解码会按照时间戳顺序进行解码。视频数据包解码后会重排视频帧的顺序,使其和最初采集顺序相对应。
[0072]步骤312,获取当前播放视频数据的时间戳和当前播放音频数据的时间戳。
[0073]具体的,当在播放视频数据时,获取当前播放视频数据的时间戳,并查询当前播放音频数据的时间戳。
[0074]步骤314,根据该当前播放视频数据的时间戳和当前播放音频数据的时间戳计算当前音视频播放的时间差。
[0075]具体的,将当前播放视频数据的时间戳和当前播放音频数据的时间戳求差值得到当前音频视频播放的时间差。
[0076]步骤316,根据该当前音视频播放的时间差获取调节速率。
[0077]在一个实施例中,该调节速率可为当前播放视频数据的时间戳与当前播放音频数据的时间戳之差的线性函数。
[0078]具体的,播放器的播放速率是由递交给渲染模块解码后图像数据的速率决定的。图像数据的速率取决于一个时间间隔TP,理想情况下是TP等于1000/平均帧率,若平均帧率为20帧/毫秒,则该TP为50毫秒。
[0079]当计算出音视频播放的时间差TC = TV-TA,其中,TA为音频数据的时间戳,TV为视频数据的时间戳。调节速率为当前播放视频数据的时间戳与当前播放音频数据的时间戳之差的线性函数,例如可为ACC = A+A*TC/1000,其中,ACC即为调节速率,A为一个基本值,可根据需要设置大小,例如,基本值可为5毫秒。在TC很小时,TC对ACC的影响比较小,当TC较大时,TC对ACC的影响比较大。
[0080]计算得到一个真实递交给渲染模块的时间间隔TR,TR = TC-ACC-TW,其中,Tff是其它处理带来的时间消耗(如取帧,帧数据解码等)。
[0081]ACC为正值时,说明视频数据播放比音频快,TR会小于TC-TW,视频数据播放会稍大于预定的帧率;ACC为负值时,说明视频数据播放比音频慢,TR会大于TC-TW,视频数据播放会小于预定的帧率。其中,预定的帧率是指预先设定的播放帧率。
[0082]步骤318,根据该调节速率调节该视频播放速率或控制音频停止播放,以使该音频数据和视频数据播放同步。
[0083]在一个实施例中,步骤318包括:该调节速率为当前播放视频数据的时间戳与当前播放音频数据的时间戳之差的线性函数;若调节速率为正值,则降低该视频数据的播放速率,以使该音频数据和视频数据播放同步;若调节速率为负值,则增加该视频数据的播放速率,以使该音频数据和视频数据播放同步;若调节速率为负值且调节速率的绝对值大于预设值,则控制音频停止播放,以使该音频数据和视频数据播放同步。
[0084]具体的,降低视频数据的播放速率可为将当前视频数据的播放速率减去调节速率的绝对值得到新的视频数据的播放速率。增加视频数据的播放速率可为将当前视频数据的播放速率增加调节速率的绝对值得到新的视频数据的播放速
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1