CN116708889B - 音视频同步方法、设备及存储介质 - Google Patents

音视频同步方法、设备及存储介质 Download PDF

Info

Publication number
CN116708889B
CN116708889B CN202211500871.0A CN202211500871A CN116708889B CN 116708889 B CN116708889 B CN 116708889B CN 202211500871 A CN202211500871 A CN 202211500871A CN 116708889 B CN116708889 B CN 116708889B
Authority
CN
China
Prior art keywords
audio
video
time anchor
playing
media time
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202211500871.0A
Other languages
English (en)
Other versions
CN116708889A (zh
Inventor
刘智辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Honor Device Co Ltd
Original Assignee
Honor Device Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202211500871.0A priority Critical patent/CN116708889B/zh
Publication of CN116708889A publication Critical patent/CN116708889A/zh
Application granted granted Critical
Publication of CN116708889B publication Critical patent/CN116708889B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/4302Content synchronisation processes, e.g. decoder synchronisation
    • H04N21/4307Synchronising the rendering of multiple content streams or additional data on devices, e.g. synchronisation of audio on a mobile phone with the video output on the TV screen
    • H04N21/43072Synchronising the rendering of multiple content streams or additional data on devices, e.g. synchronisation of audio on a mobile phone with the video output on the TV screen of multiple content streams on the same device
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/8547Content authoring involving timestamps for synchronizing content
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W4/00Services specially adapted for wireless communication networks; Facilities therefor
    • H04W4/80Services using short range communication, e.g. near-field communication [NFC], radio-frequency identification [RFID] or low energy communication

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Telephone Function (AREA)

Abstract

本申请提供了一种音视频同步方法、设备及存储介质。该方法通过保持音频数据的播放速度不变,略微降低视频数据的播放速度,通过一段时间的音频播放进度对视频播放进度的追赶,在用户无感知的情况,实现了音视频同步,并且在该过程中由于视频数据一直在播放,因此画面不会出现卡顿,从而大大提升了用户体验。

Description

音视频同步方法、设备及存储介质
技术领域
本申请涉及音视频处理技术领域,尤其涉及一种音视频同步方法、设备及存储介质。
背景技术
目前,对于音视频内容(同时具备音频和视频)的播放,部分用户习惯佩戴耳机,比如蓝牙无线耳机,然后通过终端设备,如手机进行播放观看。
但是,由于蓝牙无线耳机(设备)没有音频连接线,是基于无线传输通道实现的音频传输,因此相对有线耳机,蓝牙无线耳机的传输稳定性较差,加上音频的播放过程涉及编解码、重传、缓存等流程,因此经常会导致终端设备的显示屏播放的视频内容和蓝牙无线耳机播放的音频内容不同步的现象发生。并且,在出现音视频不同的现象后,往往会伴随着发生视频画面卡顿的现象。
发明内容
为了解决上述技术问题,本申请提供一种音视频同步方法、设备及存储介质,旨在使终端设备播放音视频时,能够实现音视频同步,并解决音视频同步过程中,视频画面容易出现卡顿的问题。
第一方面,本申请提供一种音视频同步方法。该方法包括:在音视频数据中的视频数据的视频帧以第一帧率的播放速度播放的过程中,获取音视频数据中音频数据的音频播放进度;根据音频播放进度,对根据视频数据的视频播放进度确定的媒体时间锚点进行更新;在更新后的媒体时间锚点的媒体时间锚点回退量大于设定的回退阈值时,对更新后的媒体时间锚点进行补偿,得到补偿媒体时间锚点;根据更新后的媒体时间锚点,获取音频数据中的音频帧,并以第一帧率的播放速度由外接的蓝牙设备播放音频帧;根据补偿媒体时间锚点,获取视频数据中的视频帧,并以第二帧率的播放速度播放视频帧,至音频数据的播放帧数和视频数据的播放帧数同步,第二帧率的播放速度播小于第一帧率的播放速度播。
即,对于一个以固定帧率,如第一帧率的播放速度播放的视频数据,在音频数据从蓝牙设备发声之前,视频数据一直以第一帧率的播放速度播放视频数据中的视频帧;在采集到音频数据从蓝牙设备播放出来之后,视频数据从第一帧率的播放速度率略微降低到第二帧率的播放速度,直至音频数据的音频帧和视频数据的视频帧同步为止。
由此,通过保持音频数据的播放速度不变,略微降低视频数据的播放速度,通过一段时间的音频播放进度对视频播放进度的追赶,在用户无感知的情况,实现了音视频同步,并且在该过程中由于视频数据一直在播放,因此画面不会出现卡顿,从而大大提升了用户体验。
根据第一方面,对更新后的媒体时间锚点进行补偿,得到补偿媒体时间锚点,包括:根据预制的补偿策略,确定补偿值,补偿策略指示了确定补偿值所需的参数;在更新后的媒体时间锚点上增加补偿值,得到补偿媒体时间锚点。
根据第一方面,或者以上第一方面的任意一种实现方式,根据预制的补偿策略,确定补偿值,包括:根据补偿策略,获取确定补偿值所需的媒体时间锚点回退量和系统时间锚点变更量;根据媒体时间锚点回退量和系统时间锚点变更量,确定补偿值。
根据第一方面,或者以上第一方面的任意一种实现方式,基于下述公式,根据媒体时间锚点回退量和系统时间锚点变更量,确定补偿值:补偿值=媒体时间锚点回退量-系统时间锚点变更量×N%;其中,N为大于0的自然数。
根据第一方面,或者以上第一方面的任意一种实现方式,补偿策略预置于应用程序框架层中媒体服务内的媒体时钟中;或者,补偿策略通过系统升级的方式,更新到媒体时钟中。
这样,对于未投入市场的终端设备,或者已投入市场的终端设备,均能将补偿策略置入媒体时钟中,从而使得终端设备在播放音视频时,能够基于补偿策略对根据音频播放进度更新后的媒体时间锚点进行补偿,以得到一个回退量小于回退阈值的补偿媒体时间锚点供视频数据的播放使用,从而保证音视频同步阶段,视频数据能够一直流畅的进行播放,不会出现视频画面的卡顿。
根据第一方面,或者以上第一方面的任意一种实现方式,根据音频播放进度,对根据视频数据的视频播放进度确定的媒体时间锚点进行更新,包括:确定音频播放进度对应的媒体时间;根据音频播放进度对应的媒体时间,替换视频播放进度对应的媒体时间锚点,得到更新后的媒体时间锚点。
根据第一方面,或者以上第一方面的任意一种实现方式,媒体时间锚点回退量根据更新前的媒体时间锚点、更新后的媒体时间锚点、第一系统时间锚点和第二系统时间锚点确定,第一系统时间锚点为与更新前的媒体时间锚点对应的系统时间锚点,第二系统时间锚点为与更新后的媒体时间锚点对应的系统时间锚点。
根据第一方面,或者以上第一方面的任意一种实现方式,基于如下公式,根据更新前的媒体时间锚点、更新后的媒体时间锚点、第一系统时间锚点和第二系统时间锚点确定媒体时间锚点回退量:媒体时间锚点回退量=更新前的媒体时间锚点-更新后的媒体时间锚点+第二系统时间锚点-第一系统时间锚点。
根据第一方面,或者以上第一方面的任意一种实现方式,获取音视频数据中音频数据的音频播放进度,包括:获取音视频数据中音频数据的播放帧数;根据播放帧数和音频数据的采样率,确定音频播放进度。
根据第一方面,或者以上第一方面的任意一种实现方式,在音频数据的播放帧数和视频数据的播放帧数同步之后,方法还包括:根据更新后的媒体时间锚点,获取音频数据中的音频帧和视频数据视频帧,并以第一帧率的播放速度播放音频帧和视频帧。
根据第一方面,或者以上第一方面的任意一种实现方式,蓝牙设备为蓝牙无线耳机或蓝牙音箱。
第二方面,本申请提供了一种终端设备。该终端设备包括:存储器和处理器,存储器和处理器耦合;存储器存储有程序指令,程序指令由处理器执行时,使得所述终端设备执行第一方面或第一方面的任意可能的实现方式中的方法的指令。
第二方面以及第二方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第二方面以及第二方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
第三方面,本申请提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。
第三方面以及第三方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第三方面以及第三方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
第四方面,本申请提供了一种计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。
第四方面以及第四方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第四方面以及第四方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
第五方面,本申请提供了一种芯片,该芯片包括处理电路、收发管脚。其中,该收发管脚、和该处理电路通过内部连接通路互相通信,该处理电路执行第一方面或第一方面的任一种可能的实现方式中的方法,以控制接收管脚接收信号,以控制发送管脚发送信号。
第五方面以及第五方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第五方面以及第五方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
第六方面,本申请提供了一种音视频同步系统。该系统包括:蓝牙设备和上述第二方面中所说的终端设备,蓝牙设备与终端设备之间建立了蓝牙传输链路;其中,在播放音视频的过程中,终端设备的显示屏根据第一帧率的播放速度播放音视频的视频数据的视频帧;当蓝牙设备开始以第一帧率的播放速度播放音视频数中音频数据的音频帧时,显示屏以第二帧率的播放速度播放视频数据的视频帧,第二帧率的播放速度播小于第一帧率的播放速度播;在音频数据的播放帧数和视频数据的播放帧数同步后,显示屏以第一帧率的播放速度播放视频数据中的视频帧。
第六方面以及第六方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第六方面以及第六方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
附图说明
图1为示例性示出的音视频播放过程中系统时间和媒体时间的变化示意图;
图2为示例性示出的音视频不同步的场景示意图;
图3为示例性示出的终端设备的硬件结构示意图;
图4为示例性示出的终端设备的软件结构示意图;
图5为示例性示出的实现本申请实施例提供的音视频同步方法时涉及的功能模块的交互示意图;
图6为示例性示出的实现音视频播放的时序图;
图7为示例性示出的基于本申请实施例提供的音视频同步方法对媒体时间进行补偿优化的示意图;
图8为示例性示出的基于本申请实施例提供的音视频同步方法对媒体时间进行补偿优化后的场景示意图;
图9为示例性示出的本申请实施例提供的音视频同步方法的流程示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
本申请实施例的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一目标对象和第二目标对象等是用于区别不同的目标对象,而不是用于描述目标对象的特定顺序。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
在本申请实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个处理单元是指两个或两个以上的处理单元;多个系统是指两个或两个以上的系统。
为了更好的理解本申请实施例提供的技术方案,在对本申请实施例的技术方案说明之前,首先结合附图对本申请实施例的适用于的场景进行说明。在进行说明之前,首先说明本申请中涉及的时间的单位均以毫秒(ms)为例。
目前,对于音视频内容(同时具备音频和视频)的播放,部分用户习惯佩戴耳机,比如蓝牙无线耳机,然后通过终端设备,如手机进行播放观看。
但是,由于蓝牙无线耳机(设备)没有音频连接线,是基于无线传输通道实现的音频传输,因此相对有线耳机,蓝牙无线耳机的传输稳定性较差,加上音频的播放过程涉及编解码、重传、缓存等流程,因此蓝牙无线耳机播放音频数据的时延要高于终端设备的显示屏播放的视频数据,即当用户选中某一音视频内容开始播放时,视频数据的播放要早于音频数据的播放。故而,最开始播放音视频内存时,播放进度是以视频数据的播放进度进行增加。当音频数据加入播放后,播放进度会基于音频数据进行同步,这样就会导致播放进度回退,而用于缓存视频数据的缓存队列中已经取走了回退到的播放进度的视频数据,进而导致视频输出首播放进度的回退而阻塞,播放表现为卡顿,即在当前保持在当前显示的画面,直到音频数据和当前画面对应的视频数据同步,才能进行后续的播放。
出现上述问题的原因,是因为音视频同步是借助媒体播放器(MediaPlayer)内部的媒体时钟(MediaClock)中记录的两个时间锚点实现的。具体的,这两个时间锚点分别为系统时间锚点(realTimeAnchor)、媒体时间锚点(mediaTimeAnchor),它们相当于两个有映射关系的时间轴。在忽略播放倍速的情况下,通过系统时间锚点、媒体时间锚点和当前系统时间(nowRealTime),就可以得到当前媒体时间(nowMediaTime)。
参见图1中(1),示例性的,对于一个包括音频数据和视频数据的播放源,假设用户触发该播放源的播放控件时,视频数据先开始播放,如果此时的系统时间锚点为Ams,开始播放视频数据的媒体时间锚点为0ms,则在播放一段时间,如500ms后,当前系统时间变为(A+500)ms,而当前媒体时间则为500ms。
也就是说,nowMediaTime、mediaTimeAnchor、nowRealTime和realTimeAnchor满足下述关系:nowMediaTime=mediaTimeAnchor+(nowRealTime-realTimeAnchor)。
此外,需要说明的是,在当前播放的数据仅为视频数据时,当前媒体时间指示的是视频数据的播放进度,即视频播放进度。在当前播放的数据仅为音频数据时,当前媒体时间指示的是音频数据的播放进度,即音频播放进度。在既有音频数据,又有视频数据播放的过程中,当前媒体时间是以音频数据的播放进度为准,对于这种场景,当前媒体时间指示的依旧是音频数据的播放进度,即音频播放进度。
对于图1中(1)所示的场景,在仅有视频数据播放时,终端设备,如手机的显示屏在系统时间为A~(A+500)的时间内,播放的视频数据展现在显示屏上例如可以是图2中(1)所示的画面1变为图2中(2)所示的画面2,而连接的蓝牙无线耳机中没有播放音频数据,故而无声音。
参见图1中(2),示例性的,假设音频数据在系统时间锚点为(A+500)ms时刻加入播放,即从(A+500)ms这一系统时间锚点开始,同时会有视频数据和音频数据进行播放。如图2中(3)所示,在手机的显示屏中显示的画面从图2中(2)示出的画面2变更为画面3时,蓝牙无线耳机传出声音。但是,由于此时播放的音频数据是媒体时间锚点=0ms的音频数据,因此当前媒体时间会从图1中(1)示出的500ms,更新为图1中(2)所示的0ms。
继续参见图1中(2),示例性的,在媒体锚点回到0ms后,在当前系统时间增长为(A+550)ms时,前一次进行系统时间锚点更新时的当前系统时间(A+500)ms,就会被看作本次确定当前媒体时间时所需的系统时间锚点。基于上述关系,最终确定的当前媒体时间从之前的500ms回退为50ms。由于视频数据的播放过程是通过从缓存视频数据的队列中取出显示时间(Present Time Stamp,PTS)≤nowMediaTime的视频数据(视频帧绘制渲染处理后,合成的画面)输出给显示屏进行显示,并且视频数据取出后,该队列中就不存在已经送显的视频数据了。因此,当前媒体时间从视频播放进度更新为音频播放进度后,回退到的媒体时间要小于缓存视频数据的队列中当前缓存的视频数据的显示时间。故而,在接下来的一段时间内,显示屏中显示的画面会一直停留在图2中(3)显示的画面3,而播放进度条对应的时间点,则会从画面3本该对应的“00:03”时间点回退到“00:00”时间点,后续图2中(4)至图2中(6)对应的时间点,随着音频数据的播放进度从“00:00”重新开始增长,直到音频数据和视频数据同步,画面才会发生变化,如在图2中(4)和图2中(5)所示,播放进度条对应的音频数据和视频数据不同步时,画面依旧停留在画面3,在图2中(6)所示的播放进度条对应的音频数据与视频数据同步时,显示屏中显示的画面才从画面3切换为画面4。
也就是说,目前基于蓝牙无线耳机等蓝牙无线设备播放音频数据时,音频数据与终端设备的显示屏播放的视频数据在一段时间内会存在不同步的现象。并且,在出现音视频不同的现象后,往往会伴随着发生视频画面卡顿的现象,如一直卡顿在画面3,用户体验较差。
有鉴于此,本申请提供了一种音视频同步方法,旨在使终端设备播放音视频时,能够实现音视频同步,并解决音视频同步过程中,视频画面容易出现卡顿的问题。
为了更好的理解本申请实施例提供的技术方案,在对本申请实施例的技术方案说明之前,首先结合附图对本申请实施例的适用于的终端设备(例如手机、平板电脑、可触控PC机等)的硬件结构进行说明。
参见图3,终端设备100可以包括:处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。
示例性的,在一些实现方式中,传感器模块180可以包括压力传感器,陀螺仪传感器,气压传感器,磁传感器,加速度传感器,距离传感器,接近光传感器,指纹传感器,温度传感器,触摸传感器,环境光传感器,骨传导传感器等,此处不再一一例举,本申请对此不作限制。
此外,需要说明的是,处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processing unit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
可理解的,控制器可以是终端设备100的神经中枢和指挥中心。在实际应用中,控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
此外,还需要说明的是,处理器110中还可以设置存储器,用于存储指令和数据。在一些实现方式中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
示例性的,在一些实现方式中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuit sound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purpose input/output,GPIO)接口,用户标识模块(subscriber identitymodule,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
继续参见图3,示例性的,充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实现方式中,充电管理模块140可以通过USB接口130接收有线充电器的充电输入。在一些无线充电的实现方式中,充电管理模块140可以通过终端设备100的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为终端设备100供电。
继续参见图3,示例性的,电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,外部存储器,显示屏194,摄像头193,和无线通信模块160等供电。电源管理模块141还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实现方式中,电源管理模块141也可以设置于处理器110中。在另一些实现方式中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
继续参见图3,示例性的,终端设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
需要说明的是,天线1和天线2用于发射和接收电磁波信号。终端设备100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实现方式中,天线可以和调谐开关结合使用。
继续参见图3,示例性的,移动通信模块150可以提供应用在终端设备100上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实现方式中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。在一些实现方式中,移动通信模块150的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。
此外,需要说明的是,调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器170A,受话器170B等)输出声音信号,或通过显示屏194显示图像或视频。在一些实现方式中,调制解调处理器可以是独立的器件。在另一些实现方式中,调制解调处理器可以独立于处理器110,与移动通信模块150或其他功能模块设置在同一个器件中。
继续参见图3,示例性的,无线通信模块160可以提供应用在终端设备100上的包括无线局域网(wireless local area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellitesystem,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near fieldcommunication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
此外,还需要说明的是,终端设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
继续参见图3,示例性的,显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light-emitting diode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode的,AMOLED),柔性发光二极管(flex light-emitting diode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot light emitting diodes,QLED)等。在一些实现方式中,终端设备100可以包括1个或N个显示屏194,N为大于1的正整数。
此外,还需要说明的是,终端设备100可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
此外,还需要说明的是,ISP用于处理摄像头193反馈的数据。例如,拍照时,打开快门,光线通过镜头被传递到摄像头感光元件上,光信号转换为电信号,摄像头感光元件将所述电信号传递给ISP处理,转化为肉眼可见的图像。ISP还可以对图像的噪点,亮度,肤色进行算法优化。ISP还可以对拍摄场景的曝光,色温等参数优化。在一些实现方式中,ISP可以设置在摄像头193中。
此外,还需要说明的是,摄像头193用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(charge coupled device,CCD)或互补金属氧化物半导体(complementary metal-oxide-semiconductor,CMOS)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给ISP转换成数字图像信号。ISP将数字图像信号输出到DSP加工处理。DSP将数字图像信号转换成标准的RGB,YUV等格式的图像信号。在一些实现方式中,终端设备100可以包括1个或N个摄像头193,N为大于1的正整数。
此外,还需要说明的是,数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当终端设备100在频点选择时,数字信号处理器用于对频点能量进行傅里叶变换等。
此外,还需要说明的是,视频编解码器用于对数字视频压缩或解压缩。终端设备100可以支持一种或多种视频编解码器。这样,终端设备100可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving picture experts group,MPEG)1,MPEG2,MPEG3,MPEG4等。
继续参见图3,示例性的,外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展终端设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
继续参见图3,示例性的,内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行终端设备100的各种功能应用以及数据处理。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储终端设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flashstorage,UFS)等。
此外,还需要说明的是,终端设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
此外,还需要说明的是,音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块170还可以用于对音频信号编码和解码。在一些实现方式中,音频模块170可以设置于处理器110中,或将音频模块170的部分功能模块设置于处理器110中。
继续参见图3,示例性的,按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。终端设备100可以接收按键输入,产生与终端设备100的用户设置以及功能控制有关的键信号输入。
继续参见图3,示例性的,马达191可以产生振动提示。马达191可以用于来电振动提示,也可以用于触摸振动反馈。例如,作用于不同应用(例如拍照,音频播放等)的触摸操作,可以对应不同的振动反馈效果。作用于显示屏194不同区域的触摸操作,马达191也可对应不同的振动反馈效果。不同的应用场景(例如:时间提醒,接收信息,闹钟,游戏等)也可以对应不同的振动反馈效果。触摸振动反馈效果还可以支持自定义。
继续参见图3,示例性的,指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。
关于终端设备100的硬件结构就介绍到此,应当理解的是,图3所示终端设备100仅是一个范例,在具体实现中,终端设备100可以具有比图中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图3中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
为了更好的理解图3所示终端设备100的软件结构,以下对终端设备100的软件结构进行说明。在对终端设备100的软件结构进行说明之前,首先对终端设备100的软件系统可以采用的架构进行说明。
具体的,在实际应用中,终端设备100的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。
此外,可理解的,目前主流的终端设备使用的软件系统包括但不限于Windows系统、Android系统和iOS系统。为了便于说明,本申请实施例以分层架构的Android系统为例,示例性说明终端设备100的软件结构。
此外,后续关于本申请实施例提供的音视频同步方案,在具体实现中同样适用于其他系统。
参见图4,为本申请实施例的终端设备100的软件结构框图。
如图4所示,终端设备100的分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实现方式中,将Android系统分为四层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime)和系统库,以及内核层。
其中,应用程序层可以包括一系列应用程序包。如图4所示,应用程序包可以包括游戏、设置、短信、邮箱、视频、天气、日历等应用程序,此处不再一一列举,本申请对此不作限制。
其中,应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。在一些实现方式中,这些编程接口和编程框架可以描述为函数。如图3所示,应用程序框架层可以包括窗口管理器、内容提供器、视图系统、媒体服务、显示服务、音频服务等函数,此处不再一一列举,本申请对此不作限制。
示例性的,窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。
示例性的,内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等,此处不再一一列举,本申请对此不作限制。
示例性的,视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
示例性的,媒体服务用于通过绑定的进程间通信方式来完成来自应用程序层中用于播放音视频的应用的请求,将音视频应用提供的播放源进行音频、视频分离,解码,播放渲染等,最终将解码后的视频数据(视频解码数据)输送给显示服务,将解码后的音频数据(音频解码数据)输送给音频服务,并与音频服务交互,获取音频播放进度。
示例性的,显示服务用于将媒体服务提供的视频数据传输给内核层的显示驱动,进而由显示驱动驱动显示屏显示视频数据对应的画面。
示例性的,音频服务用于将媒体服务提供的音频数据传输给内核层的蓝牙驱动,进而由蓝牙驱动驱动蓝牙设备,如蓝牙无线耳机播放音频数据。
Android Runtime包括核心库和虚拟机。Android Runtime负责安卓系统的调度和管理。
核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
系统库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(Media Libraries),三维(3D)图形处理库(例如:OpenGL ES),二维(2D)图形引擎(例如:SGL)等。
表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。
媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。
三维图形处理库用于实现三维图形绘图,图像渲染,合成,和图层处理等。
可理解的,上述所说的2D图形引擎是2D绘图的绘图引擎。
此外,可理解的,Android系统中的内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动、蓝牙驱动等。示例性的,显示驱动用于驱动终端设备的显示屏显示媒体服务通过显示服务下发的视频数据,蓝牙驱动用于驱动终端设备接入的蓝牙设备,如蓝牙无线耳机播放媒体服务通过音频服务下发的音频数据。
关于终端设备100的软件结构就介绍到此,可以理解的是,图4示出的软件结构中的层以及各层中包含的部件,并不构成对终端设备100的具体限定。在本申请另一些实施例中,终端设备100可以包括比图示更多或更少的层,以及每个层中可以包括更多或更少的部件,本申请不做限定。
基于上述软件结构和硬件结构可知,音视频不同步主要是因为媒体服务中的媒体时钟中存储的媒体时间锚点从视频播放进度回退为音频播放进度。为了解决该问题,本申请提供的技术方案中,主要以应用程序框架层的媒体服务为主,在出现音视频不同步的问题时,为实现音视频同步,同时避免在音视频同步过程中,视频画面出现卡顿的现象,具体是通过在媒体服务的媒体时钟中置入补偿策略,进而在出现音视频不同时,基于补偿策略对媒体时间锚点进行补偿优化,直至音视频同步。为了更好的理解本申请提供的音视频同步方法,以下结合图5至图8进行说明。
参见图5,示例性的,当位于应用程序层的视频播放应用启动后,该应用会调用媒体服务,创建并配置与其对应的媒体播放器,进而在后续用户通过视频播放应用播放音视频内容时,来自视频播放应用提供的包括了音频和视频的播放源,能够传输给该媒体播放器。
继续参见图5,示例性的,媒体播放器在接收到视频播放应用下发的播放源后,会对播放源进行音视频分离,即将音频数据和视频数据分离出来。
继续参见图5,示例性的,在将音频数据和视频数据分离出后,媒体播放器会将视频数据输送至视频解码器,由视频解码器对视频数据进行解码,进而得到视频解码数据。同时,每天播放器也会将音频数据输送至音频解码器,由音频解码器对音频数据进行解码,进而得到音频解码数据。
继续参见图5,示例性的,视频解码器在对视频数据进行解码,得到视频解码数据后,会将视频解码数据输送给播放渲染器。同理,音频解码器在对音频数据进行解码,得到音频解码数据后,也会将音频解码数据输送给播放渲染器。
继续参见图5,示例性的,播放渲染器在接收到视频解码数据后,在开始播放时,会按照媒体时钟对应的锚点更新时间,如每100ms,更新一次播放锚点,即媒体时间锚点,并从媒体时钟中获取当前的播放进度,进而根据当前的播放进度和缓存视频数据的缓存队列中每一视频数据对应的显示时间,选择需要送显的视频数据,进而将选择出的视频数据经显示服务、显示HAL传输给显示驱动,由显示驱动来驱动显示屏进行显示。
继续参见图5,示例性的,播放渲染器在接收到音频解码数据后,在开始播放时,同样会按照媒体时钟对应的锚点更新时间,如每100ms,更新一次播放锚点,即媒体时间锚点,并从媒体时钟中获取当前的播放进度,进而根据当前的播放进度和缓存音频数据的缓存队列中每一音频数据对应的播放时间,选择需要播放的音频数据,进而将选择出的音频数据经音频服务、音频HAL、蓝牙HAL传输给蓝牙驱动,由蓝牙驱动来驱动连接的蓝牙设备,如蓝牙无线耳机进行音频数据的播放。
继续参见图5,示例性的,对于音频数据,渲染播放器在将选择出的音频数据传输给音频服务后,还会从音频服务获取该音频数据的播放帧数,进而根据音频数据的播放帧数和该音频数据的采样率来确定该音频数据的音频播放进度,进而根据音频播放进度更新媒体时钟中记录的媒体时间锚点。这样,在下一周期从媒体时钟中获取媒体时间锚点,和系统时间锚点后,根据获取到的两个锚点信息和当前系统时间就可以确定当前媒体时间,进而重复上述选择音频数据和视频数据的操作。
可理解的,由于音频数据开始播放时,音频播放进度开始增长,播放渲染器会以音频播放进度更新媒体时钟中记载的媒体时间锚点,进而导致媒体时间锚点回退。当瞬时回退超过一定阈值的情况下就会发生可感知的卡顿,音频数据持续播放时会周期性地用音频播放进度向媒体时钟更新系统时间锚点和媒体时间锚点,在媒体时间锚点更新到大于视频缓存队列中缓存的视频数据的显示时间后,视频数据就可以正常播放。
具体到本申请提供的技术方案中,为了解决这种视频播放进度瞬时回退,导致视频画面卡顿的问题,具体是通过在媒体时钟中置入一种补偿策略,如在媒体时间锚点的瞬时回退量超出阈值(设定为30ms)时,对媒体时间锚点的更新进行一个补偿,将较大的瞬时回退量降低为不可感知的小回退量。
这样,随着音频数据的播放,在周期性地更新媒体时间锚点时,不断对每次更新的媒体时间锚点进行补偿,从而将较大的回退量分散至多个媒体时间锚点更新周期,使得视频数据能够一直流畅的播放,从而避免视频画面出现卡顿现象。
基于此,置入媒体时钟的补偿策略实质为用于确定每次进行媒体时间锚点更新时,对媒体时间锚点进行的补偿值的。关于补偿值的确定,可以系统时间锚点变更量的N%和媒体时间锚点回退量来确定,具体可以是:补偿值=媒体时间锚点回退量-N%系统时间锚点变更量。
示例性的,N为大于0的自然数,具体取值可以根据实际的业务需求,比如对画面卡顿的感知情况来设置,本实施例以10为例。
需要说明的是,关于记录了上述补偿值确定公式的补偿策略,对于已经投入市场使用的终端设备,可以通过系统升级包的方式,对未置入该补偿策略的软件架构进行更新,进而使得应用程序框架层中,集成在媒体服务中的媒体时钟具备该补偿策略。
参见图6,示例性示出一种实现本申请实施例提供的音视频同步方法的时序图。通过上述图5的描述可知,音视频播放过程中,对播放源的处理主要在媒体服务中完成,而经媒体服务处理输出的音频解码数据和视频解码数据会分别传输至音频服务和显示服务,由这两个服务下发给对应的HAL,驱动,进而驱动对应的硬件实现播放。故而,图6中,仅以音频服务、显示服务、媒体服务中涉及的媒体播放器、视频解码器、音频解码器、渲染播放器和媒体时钟几个功能模块之间的交互为例,对本申请实施例提供的音视频同步方法进行具体说明。
S101,媒体服务中的媒体播放器接收到应用程序层中播放音视频内容的应用下发的播放源(包括音频数据和视频数据)后,对播放源进行分离,得到视频数据和音频数据。
示例性的,媒体播放器对播放源分离,得到音频数据和视频数据后,会将视频数据发送给媒体服务中的视频解码器,将音频数据发送给媒体服务中的音频解码器。
可理解的,媒体播放器中可以创建有专门用于缓存播放音视频内容的应用下发的播放源的缓存队列。
相应地,播放音视频内容的应用可以不断向媒体播放器下发播放源,而播放源则可以先缓存在该缓存队列中,媒体播放器可以按照顺序,一次从缓存队列中取出先入队的播放源进行分离处理。
S102,视频解码器接收到媒体播放器发送的视频数据后,会对视频数据进行解码处理,进而得到该视频数据对应的视频解码数据。
示例性的,在视频解码器中也可以创建用于缓存未解码的视频数据,这样视频数据的接收和解码就可以独立进行,互不影响。
S103,视频解码器解码出视频解码数据后,会将视频解码数据发送给播放渲染器中为视频解码数据创建的缓存队列L1。
S104,音频解码器接收到媒体播放器发送的音频数据后,会对音频数据进行解码处理,进而得到该视频数据对应的音频解码数据。
示例性的,在音频解码器中也可以创建用于缓存未解码的音频数据,这样音频数据的接收和解码就可以独立进行,互不影响。
S105,音频解码器解码出音频解码数据后,会将音频解码数据发送给播放渲染器中为音频解码数据创建的缓存队列L2。
需要说明的是,媒体播放器向视频解码器发送视频数据,以及向音频解码器下发音频数据的操作没有先后顺序,图6仅是一种示例性说明。
此外,还需要说明的是,上述步骤S102和S104的执行顺序也没有先后限制,它们可以是并行处理的。
相应地,步骤S103和步骤S105的执行顺序也没有先后限制,他们也可以时并行处理的。
继续参见图6,示例性的,在缓存队列L1中有视频解码数据后,渲染播放器便会处理缓存队列L1中的视频解码数据,即执行步骤S106。
关于渲染播放器对缓存队列L1中视频解码数据的处理,例如可以包括锚点更新、播放进度获取、视频解码数据送显等步骤。
示例性的,对于锚点更新,在开始播放视频解码数据时,具体是将播放视频解码数据中的首帧时的系统时间作为系统时间锚点,将首帧对应的媒体时间作为媒体时间锚点。
通过上述图5的描述可知,系统时间锚点和媒体时间锚点是由媒体时钟进行管理的,故而根据首帧进行的锚点更新操作,具体是将媒体时间中记录的系统时间锚点和媒体时间锚点进行更新。
示例性的,对于播放进度获取,通过上述图5的描述可知,音频数据的播放,不仅要经过音频HAL,还要经过蓝牙HAL,这就导致时延较高,因此最初开始播放时,根据当前系统时间,媒体时钟中记录的系统时间锚点、媒体时间锚点,确定的当前媒体时间,即播放进度实质就是视频播放进度,故而渲染播放器从媒体时钟中获取当前媒体时间后,便会根据获取到的当前媒体时间从缓存队列L1中筛选出显示时间不大于该当前媒体时间的视频解码数据的视频帧,并按照这些视频帧的显示时间,输出至显示服务,以便显示服务将这些视频帧传输给显示HAL,再由显示HAL传输给显示驱动,进而由显示驱动去驱动终端设备的显示屏按序显示这些视频帧对应的画面,从而实现视频数据的播放。
继续参见图6,示例性的,在缓存队列L2中有音频解码数据后,渲染播放器便会处理缓存队列L2中的音频解码数据,即执行步骤S107。
关于渲染播放器对缓存队列L2中音频解码数据的处理,例如可以包括音频解码数据的输出、音频播放帧数的获取、锚点更新等步骤。
示例性的,渲染播放器在将缓存队列L2中的音频解码数据下发给音频服务后,音频服务会将该音频解码数据传输个音频HAL,对于接入蓝牙设备,如蓝牙无线耳机播放的音频数据的场景,音频HAL不会将音频解码数据下发给终端设备自身的音频驱动,而是会将音频解码数据下发给蓝牙HAL,由蓝牙HAL将该音频解码数据传输给蓝牙驱动,进而由蓝牙驱动去驱动终端设备当前接入的蓝牙设备,如蓝牙无线耳机按序播放音频解码数据中的音频帧,从而实现音频数据的播放。
示例性的,在蓝牙无线耳机开始播放音频解码数据中的音频帧后,会向通过蓝牙驱动、蓝牙HAL、音频HAL,向音频服务上报当前的音频播放帧数,音频服务获取到该音频播放帧数后,会将其上报给渲染播放器。
示例性的,由于音频数据的采样率(音频采样率)是在录制/生成音频数据时就固定的。因此在从音频服务获取到当前的音频播放帧数(已播放的音频帧数)后,将当前的音频播放帧数除以音频采样率,便可以得到该音频数据对应的播放进度。
可理解的,由于此时从最初的仅有视频数据播放,变为既有视频数据播放,又有音频数据播放,而通过上述描述可知,在有音频数据加入播放后,媒体时间锚点是以音频播放进度进行更新的,故而渲染播放器在按照上述方式确定音频数据对应的播放进度后,便会按照设定的媒体时钟更新时间,对媒体时钟中记录的锚点(系统时间锚点和媒体时间锚点)进行更新。
继续参见图6,示例性的,在渲染播放器根据音频数据的播放进度对媒体时钟中的锚点进行更新后,由于音频数据的播放进度要晚于视频数据的播放进度,因此会造成媒体时间锚点回退的问题,为了避免媒体时间锚点回退造成视频画面卡顿,本实施例提供的音视频同步方法中,媒体时钟会根据预置的补偿策略,对媒体时间锚点补偿优化,直至音视频同步,即执行步骤S108。
为了更好的理解步骤S108中,媒体时钟根据补偿策略,对媒体时间锚点进行的补偿优化,以下结合图7进行说明。
参见图7,示例性的,如果在系统时间锚点Ams时,视频数据开始播放,当系统时间为(A+500)ms时,音频数据加入播放,此时根据音频播放进度进行了第1次媒体时间锚点的更新操作,媒体时间锚点会从与realTimeAnchor1=(A+500)ms对应的500ms,回退到meadiaTimeAnchor1’=0ms,即媒体时间锚点发生了500ms的回退量。由于本次媒体时间锚点回退量为500ms,播放音频数据和播放视频数据时的系统时间锚点均为realTimeAnchor1,因此系统时间锚点变更量为0,基于上述补偿策略,可以确定对第1次媒体时间锚点的更新操作后得到的媒体时间锚点的补偿值为500ms,故而对于视频数据播放时读取的媒体时间锚点,媒体时钟会对meadiaTimeAnchor1’补偿500ms的补偿值,进而得到meadiaTimeAnchor1=500ms,这样当前视频播放进度不会产生回退。
继续参见图7,示例性的,当系统时间为(A+600)ms时,根据音频播放进度进行了第2次媒体时间锚点的更新操作,将媒体时间锚点更新为meadiaTimeAnchor2’,即100ms,但视频播放进度对应的媒体时间锚点理论上应该为600ms,故而本次媒体时间锚点发生了500ms的回退量。由于本次媒体时间锚点回退量为500ms,根据realTimeAnchor1和realTimeAnchor2确定系统时间锚点变量为100ms。基于上述补偿策略,可以确定对第2次媒体时间锚点的更新操作后得到的媒体时间锚点的补偿值为490ms,故而对于视频数据播放时读取的媒体时间锚点,媒体时钟会对meadiaTimeAnchor2’补偿490ms的补偿值,进而得到meadiaTimeAnchor2=590ms。由于590ms与600ms的回退量没有超过设定的回退阈值,如30ms,因此渲染播放器可以从视频缓存队列中读取出显示时间大于500ms,小于或等于590ms的视频数据进行播放,而不会受音频播放进度对应的媒体时间锚点meadiaTimeAnchor2’的限制,导致画面卡顿在500ms时刻读取出的视频数据对应的画面,即视频数据依旧在播放,显示屏的画面也在更新。
示例性的,基于上述方式,之后每一次根据音频播放进度进行媒体时间锚点的更新操作后,均按照上述方式,对根据音频播放进度更新后的媒体时间锚点进行补偿,将补偿后的媒体时间锚点作为视频数据播放所依据的媒体时间锚点,即在音视频同步前,音频数据的播放以根据音频播放进度更新后的媒体时间锚点(补偿前的媒体时间锚点)为准,视频数据的播放以补偿后的媒体时间锚点为准。
继续参见图7,示例性的,当系统时间为(A+5200)ms时,根据音频播放进度进行了第48次媒体时间锚点的更新操作,如果媒体时间锚点回退量为40ms,在系统时间锚点变量依旧为100ms的情况下。基于上述补偿策略,可以确定对第48次媒体时间锚点的更新操作后得到的媒体时间锚点的补偿值为30ms,故而对于视频数据播放时读取的媒体时间锚点,媒体时钟会对4700ms补偿30ms的补偿值,进而得到meadiaTimeAnchor48=4730ms。
继续参见图7,示例性的,当系统时间为(A+5300)ms时,根据音频播放进度进行了第49次媒体时间锚点的更新操作,如果媒体时间锚点回退量为30ms,在系统时间锚点变量依旧为100ms的情况下。基于上述补偿策略,可以确定对第49次媒体时间锚点的更新操作后得到的媒体时间锚点的补偿值为20ms,故而对于视频数据播放时读取的媒体时间锚点,媒体时钟会对4800ms补偿20ms的补偿值,进而得到meadiaTimeAnchor49=4820ms。
需要说明的是,如果设置的是超过回退阈值,如30ms时才根据补偿策略进行补偿,对于第49次媒体时间锚点的更新操作,由于更新后的媒体时间锚点回退量等于回退阈值,没有超过回退阈值,因此在一些实现方式中可以不用进行补偿,即从第49次开始,视频数据播放时依据的媒体时间锚点与音频数据播放时依据的媒体时间锚点相同,此时便可以认为音视频达成相对同步。
基于上述补偿策略,在音视频同步阶段,终端设备的显示屏中显示的内容的变化,以及声音的输出可如图8所示。
参见图8中(1)至图8中(3),示例性的,其场景与图2中(1)至图2中(3)类似,如果在图8中(3)示出的“00:03”时间点播放的视频画面为画面3,此时音频数据也加入播放,即蓝牙无线耳机出声(画面1对应的声音)。基于上述补偿策略,在图8中(4)示出的“00:04”时间点,蓝牙无线耳机播放画面2对应的声音时,显示屏中播放的视频画面不会向图2中(4)所示卡顿在画面3不变,而是显示的画面(3-4),即显示时间在画面3和画面4之间的画面。
相应地,在图8中(5)示出的“00:05”时间点,蓝牙无线耳机播放画面3对应的声音时,显示屏中播放的视频画面不会向图2中(5)所示卡顿在画面3不变,而是显示的画面4。
相应地,在图8中(6)示出的“00:06”时间点,蓝牙无线耳机播放画面4对应的声音时,显示屏中播放的视频画面不会卡顿在画面4不变,而是显示的画面(4-5),即显示时间在画面4和画面5之间的画面。
由此,本申请实施例提供的音频同步方法,通过保持音频数据的播放速度不变,略微降低视频数据的播放速度,通过一段时间的音频播放进度对视频播放进度的追赶,最终在某一时间点,显示屏中播放的画面和蓝牙无线耳机中播放的音频数据就会达到同步,如在“00:08”时间点时终端设备显示的画面可以与蓝牙无线耳机发出的声音同步,这样在用户无感知的情况,实现了音视频同步,并且在该过程中由于视频数据一直在播放,因此画面不会出现卡顿,从而大大提升了用户体验。
参见图9,示例性示出本申请实施例提供的音视频同步方法的一种实现流程,具体包括:
S201,在音视频数据中的视频数据的视频帧以第一帧率的播放速度播放的过程中,获取音视频数据中音频数据的音频播放进度。
关于音频播放进度的确定,通过上述描述可知,具体是由渲染播放器从音频服务中获取通过蓝牙设备播放的音频数据的播放帧数,进而根据播放帧数和音频数据的采样率,确定音频播放进度,具体为播放帧数除以音频数据的采样率。关于音频数据的播放帧数的获取,可以参见上文,此处不再赘述。
S202,根据音频播放进度,对根据视频数据的视频播放进度确定的媒体时间锚点进行更新。
具体可以是由渲染播放器确定音频播放进度对应的媒体时间,进而根据音频播放进度对应的媒体时间,替换视频播放进度对应的媒体时间锚点,即将音频播放进度对应的媒体时间作为新的媒体时间锚点发送给媒体时钟,以更新媒体时钟中记录的媒体时间锚点,进而使得媒体时钟中记录的媒体时间锚点变更为更新后的媒体时间锚点。
S203,在更新后的媒体时间锚点的媒体时间锚点回退量大于设定的回退阈值时,对更新后的媒体时间锚点进行补偿,得到补偿媒体时间锚点。
可理解的,媒体时钟中记录了两个锚点,一个是媒体时间锚点,一个是系统时间锚点,而根据上述描述可知,当前媒体播放时间,即当前播放进度是根据媒体时间锚点、当前系统时间、系统时间锚点和播放速率确定的,如当前媒体时间=媒体时间锚点+(当前系统时间-系统时间锚点)*播放速率。故而,媒体时间锚点回退量根据更新前的媒体时间锚点、更新后的媒体时间锚点、第一系统时间锚点和第二系统时间锚点确定,第一系统时间锚点为与更新前的媒体时间锚点对应的系统时间锚点,第二系统时间锚点为与更新后的媒体时间锚点对应的系统时间锚点。
示例性的,以播放速率为一倍速,在一倍速的情况下,假设更新前的媒体时间锚点为a,更新前的媒体时间锚点对应的系统时间锚点(称为第一系统时间锚点)为A,更新后的媒体时间锚点为b,更新后的媒体时间锚点对应的系统时间锚点(称为第二系统时间锚点)为B,根据这两组锚点用同一个当前系统时间分别能得到两个播放进度,即更新前的更新前的媒体时间=a+(当前系统时间-A),以及更新后的媒体时间=b+(当前系统时间-B)。而媒体时间锚点回退量具体为这两个媒体时间的差值,即媒体时间锚点回退量=[a+(当前系统时间-A)]-[b+(当前系统时间-B)]=a-b+B-A。
也就是说,媒体时间锚点回退量=更新前的媒体时间锚点-更新后的媒体时间锚点+第二系统时间锚点-第一系统时间锚点。
示例性的,对于首次根据音频播放进度更新媒体时间锚点的情况,更新后的媒体时间锚点例如图1中(2)所示的0ms的媒体时间锚点,更新前的媒体时间锚点例如图1中(1)所示的500ms的当前媒体时间。
示例性的,对于后续根据音频播放进度更新媒体时间锚点的情况,更新前的媒体时间锚点为上一次根据音频播放进度更新的媒体时间锚点,更新后的则为本次的。
关于对更新后的媒体时间锚点进行补偿,得到补偿媒体时间锚点的方式,例如为根据预制的补偿策略,确定补偿值,补偿策略指示了确定补偿值所需的参数;在更新后的媒体时间锚点上增加补偿值,得到补偿媒体时间锚点。
其中,根据预制的补偿策略,确定补偿值,例如为:根据补偿策略,获取确定补偿值所需的媒体时间锚点回退量和系统时间锚点变更量;根据媒体时间锚点回退量和系统时间锚点变更量,确定补偿值。
关于根据媒体时间锚点回退量和系统时间锚点变更量,确定补偿值的方式,例如可以根据下述公式:补偿值=媒体时间锚点回退量-系统时间锚点变更量×N%;其中,N为大于0的自然数。
关于该公式的使用,可以详见上文针对图7的文字描述部分,此处不再赘述。
需要说明的是,关于上述所述的补偿策略,通过上述实施例的描述可知,具体是置于应用程序框架层中媒体服务内的媒体时钟中内。
示例性的,在一些实现方式中,例如未投入市场的终端设备,可以是在产线上进行系统安装时,将其预置于应用程序框架层中媒体服务内的媒体时钟中的。
示例性的,在另一些实现方式中,例如已投入市场的终端设备,则可以通过系统升级的方式,更新到媒体时钟中。
应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
S204,根据更新后的媒体时间锚点,获取音频数据中的音频帧,并以第一帧率的播放速度由外接的蓝牙设备播放音频帧。
示例性的,在一些实现方式中,蓝牙设备例如可以是上述所说的蓝牙无线耳机。
示例性的,在另一些实现方式中,蓝牙设备也可以是蓝牙音箱,或者无线保真音箱。
应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
S205,根据补偿媒体时间锚点,获取视频数据中的视频帧,并以第二帧率的播放速度播放视频帧,至音频数据的播放帧数和视频数据的播放帧数同步。
示例性的,在按照上述,对每一次根据音频播放进度更新后的媒体时间锚点进行更新后,基于上述补偿策略,对每次更新后的媒体时间锚点进行补偿,直至不需要进行补偿,即音频数据的播放帧数和视频数据的播放帧数同步之后,便可以停止对每一次根据音频播放进度更新后的媒体时间锚点进行补偿,而是直接基于每一次根据音频播放进度更新后的媒体时间锚点,获取音频数据中的音频帧和视频数据视频帧,并以第一帧率的播放速度播放音频帧和视频帧。
也就是说,在本申请实施例提供的音视频同步方法中,对于一个以固定帧率,如第一帧率的播放速度播放的视频数据,在音频数据从蓝牙设备发声之前,视频数据一直以第一帧率的播放速度播放视频数据中的视频帧;在采集到音频数据从蓝牙设备播放出来之后,视频数据从第一帧率的播放速度率略微降低到第二帧率的播放速度,直至音频数据的音频帧和视频数据的视频帧同步为止。
由此,通过保持音频数据的播放速度不变,略微降低视频数据的播放速度,通过一段时间的音频播放进度对视频播放进度的追赶,在用户无感知的情况,实现了音视频同步,并且在该过程中由于视频数据一直在播放,因此画面不会出现卡顿,从而大大提升了用户体验。
此外,可以理解的是,终端设备为了实现上述功能,其包含了执行各个功能相应的硬件和/或软件模块。结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以结合实施例对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
此外,需要说明的是,在实际的应用场景中由终端设备实现的上述各实施例提供的音视频同步方法,也可以由终端设备中包括的一种芯片系统来执行,其中,该芯片系统可以包括处理器。该芯片系统可以与存储器耦合,使得该芯片系统运行时调用该存储器中存储的计算机程序,实现上述终端设备执行的步骤。其中,该芯片系统中的处理器可以是应用处理器也可以是非应用处理器的处理器。
另外,本申请实施例还提供一种计算机可读存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在终端设备上运行时,使得终端设备执行上述相关方法步骤实现上述实施例中的音视频同步方法。
另外,本申请实施例还提供了一种计算机程序产品,当该计算机程序产品在终端设备上运行时,使得终端设备执行上述相关步骤,以实现上述实施例中的音视频同步方法。
另外,本申请的实施例还提供一种芯片(也可以是组件或模块),该芯片可包括一个或多个处理电路和一个或多个收发管脚;其中,所述收发管脚和所述处理电路通过内部连接通路互相通信,所述处理电路执行上述相关方法步骤实现上述实施例中的音视频同步方法,以控制接收管脚接收信号,以控制发送管脚发送信号。
另外,本申请的实施例还提供一种音视频同步系统。该系统包括蓝牙设备和如上所述能够基于补偿策略实现本申请实施例提供的音视频同步方法的终端设备。其中,蓝牙设备与终端设备之间建立了蓝牙传输链路。
示例性的,在播放音视频的过程中,终端设备的显示屏根据第一帧率的播放速度播放音视频的视频数据的视频帧;当蓝牙设备开始以第一帧率的播放速度播放音视频数中音频数据的音频帧时,显示屏以第二帧率的播放速度播放视频数据的视频帧,第二帧率的播放速度播小于第一帧率的播放速度播;在音频数据的播放帧数和视频数据的播放帧数同步后,显示屏以第一帧率的播放速度播放视频数据中的视频帧
此外,通过上述描述可知,本申请实施例提供的终端设备、计算机可读存储介质、计算机程序产品或芯片,或音视频同步系统中的终端设备均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (14)

1.一种音视频同步方法,其特征在于,所述方法包括:
在音视频数据中的视频数据的视频帧以第一帧率的播放速度播放的过程中,获取所述音视频数据中音频数据的音频播放进度;
周期性地根据所述音频播放进度,对根据所述视频数据的视频播放进度确定的媒体时间锚点进行更新;
对于每一次所述更新后的媒体时间锚点,在所述更新后的媒体时间锚点的媒体时间锚点回退量大于设定的回退阈值时,对所述更新后的媒体时间锚点进行补偿,得到补偿媒体时间锚点;
根据所述更新后的媒体时间锚点,获取所述音频数据中的音频帧,并以所述第一帧率的播放速度由外接的蓝牙设备播放所述音频帧;
根据所述补偿媒体时间锚点,获取所述视频数据中的视频帧,并以第二帧率的播放速度播放所述视频帧,至所述音频数据的播放帧数和所述视频数据的播放帧数同步,所述第二帧率的播放速度播小于所述第一帧率的播放速度播,在所述音频数据的播放帧数和所述视频数据的播放帧数同步之前,所述视频数据的视频播放进度不产生回退;
其中,所述根据所述补偿媒体时间锚点,获取所述视频数据中的视频帧,包括:
获取所述视频数据中上一次确定的所述补偿媒体时间锚点至本次确定的所述补偿媒体时间锚点之间的视频帧。
2.根据权利要求1所述的方法,其特征在于,所述对所述更新后的媒体时间锚点进行补偿,得到补偿媒体时间锚点,包括:
根据预制的补偿策略,确定补偿值,所述补偿策略指示了确定所述补偿值所需的参数;
在所述更新后的媒体时间锚点上增加所述补偿值,得到所述补偿媒体时间锚点。
3.根据权利要求2所述的方法,其特征在于,所述根据预制的补偿策略,确定补偿值,包括:
根据所述补偿策略,获取确定所述补偿值所需的所述媒体时间锚点回退量和系统时间锚点变更量;
根据所述媒体时间锚点回退量和所述系统时间锚点变更量,确定所述补偿值。
4.根据权利要求3所述的方法,其特征在于,基于下述公式,根据所述媒体时间锚点回退量和所述系统时间锚点变更量,确定所述补偿值:
所述补偿值=所述媒体时间锚点回退量-所述系统时间锚点变更量×N%;
其中,N为大于0的自然数。
5.根据权利要求2所述的方法,其特征在于,所述补偿策略预置于应用程序框架层中媒体服务内的媒体时钟中;
或者,
所述补偿策略通过系统升级的方式,更新到所述媒体时钟中。
6.根据权利要求1所述的方法,其特征在于,所述根据所述音频播放进度,对根据所述视频数据的视频播放进度确定的媒体时间锚点进行更新,包括:
确定所述音频播放进度对应的媒体时间;
根据所述音频播放进度对应的媒体时间,替换所述视频播放进度对应的媒体时间锚点,得到所述更新后的媒体时间锚点。
7.根据权利要求1所述的方法,其特征在于,所述媒体时间锚点回退量根据更新前的媒体时间锚点、所述更新后的媒体时间锚点、第一系统时间锚点和第二系统时间锚点确定,所述第一系统时间锚点为与所述更新前的媒体时间锚点对应的系统时间锚点,所述第二系统时间锚点为与所述更新后的媒体时间锚点对应的系统时间锚点。
8.根据权利要求7所述的方法,其特征在于,基于如下公式,根据更新前的媒体时间锚点、所述更新后的媒体时间锚点、第一系统时间锚点和第二系统时间锚点确定所述媒体时间锚点回退量:
所述媒体时间锚点回退量=所述更新前的媒体时间锚点-所述更新后的媒体时间锚点+所述第二系统时间锚点-所述第一系统时间锚点。
9.根据权利要求1至8任一项所述的方法,其特征在于,所述获取所述音视频数据中音频数据的音频播放进度,包括:
获取所述音视频数据中所述音频数据的播放帧数;
根据所述播放帧数和所述音频数据的采样率,确定所述音频播放进度。
10.根据权利要求1至8任一项所述的方法,其特征在于,在所述音频数据的播放帧数和所述视频数据的播放帧数同步之后,所述方法还包括:
根据所述更新后的媒体时间锚点,获取所述音频数据中的音频帧和所述视频数据视频帧,并以所述第一帧率的播放速度播放所述音频帧和所述视频帧。
11.根据权利要求1至8任一项所述的方法,其特征在于,所述蓝牙设备为蓝牙无线耳机或蓝牙音箱。
12.一种终端设备,其特征在于,所述终端设备包括:存储器和处理器,所述存储器和所述处理器耦合;所述存储器存储有程序指令,所述程序指令由所述处理器执行时,使得所述终端设备执行如权利要求1至11任意一项所述的音视频同步方法。
13.一种计算机可读存储介质,其特征在于,包括计算机程序,当所述计算机程序在终端设备上运行时,使得所述终端设备执行如权利要求1至11任意一项所述的音视频同步方法。
14.一种音视频同步系统,其特征在于,包括蓝牙设备和权利要求12所述的终端设备,所述蓝牙设备与所述终端设备之间建立了蓝牙传输链路;
其中,在播放音视频的过程中,所述终端设备的显示屏根据第一帧率的播放速度播放所述音视频的视频数据的视频帧;
当所述蓝牙设备开始以所述第一帧率的播放速度播放所述音视频数中音频数据的音频帧时,所述显示屏以第二帧率的播放速度播放所述视频数据的视频帧,所述第二帧率的播放速度播小于所述第一帧率的播放速度播;
在所述音频数据的播放帧数和所述视频数据的播放帧数同步后,所述显示屏以所述第一帧率的播放速度播放所述视频数据中的视频帧。
CN202211500871.0A 2022-11-28 2022-11-28 音视频同步方法、设备及存储介质 Active CN116708889B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211500871.0A CN116708889B (zh) 2022-11-28 2022-11-28 音视频同步方法、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211500871.0A CN116708889B (zh) 2022-11-28 2022-11-28 音视频同步方法、设备及存储介质

Publications (2)

Publication Number Publication Date
CN116708889A CN116708889A (zh) 2023-09-05
CN116708889B true CN116708889B (zh) 2024-05-03

Family

ID=87842129

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211500871.0A Active CN116708889B (zh) 2022-11-28 2022-11-28 音视频同步方法、设备及存储介质

Country Status (1)

Country Link
CN (1) CN116708889B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015052908A1 (ja) * 2013-10-11 2015-04-16 パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ 送信方法、受信方法、送信装置および受信装置
CN105376628A (zh) * 2014-08-27 2016-03-02 深圳Tcl新技术有限公司 音视频信号同步方法和装置
CN112261461A (zh) * 2020-10-20 2021-01-22 深圳创维-Rgb电子有限公司 蓝牙音画同步方法、装置、显示设备和可读存储介质
CN113490043A (zh) * 2021-09-08 2021-10-08 北京百瑞互联技术有限公司 一种蓝牙音频数据处理方法、装置、介质及设备
CN114827696A (zh) * 2021-01-29 2022-07-29 华为技术有限公司 一种跨设备的音视频数据同步播放的方法和电子设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015052908A1 (ja) * 2013-10-11 2015-04-16 パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ 送信方法、受信方法、送信装置および受信装置
CN105376628A (zh) * 2014-08-27 2016-03-02 深圳Tcl新技术有限公司 音视频信号同步方法和装置
CN112261461A (zh) * 2020-10-20 2021-01-22 深圳创维-Rgb电子有限公司 蓝牙音画同步方法、装置、显示设备和可读存储介质
CN114827696A (zh) * 2021-01-29 2022-07-29 华为技术有限公司 一种跨设备的音视频数据同步播放的方法和电子设备
CN113490043A (zh) * 2021-09-08 2021-10-08 北京百瑞互联技术有限公司 一种蓝牙音频数据处理方法、装置、介质及设备

Also Published As

Publication number Publication date
CN116708889A (zh) 2023-09-05

Similar Documents

Publication Publication Date Title
CN110109636B (zh) 投屏方法、电子设备以及系统
WO2022052773A1 (zh) 多窗口投屏方法及电子设备
WO2022258024A1 (zh) 一种图像处理方法和电子设备
CN114461051B (zh) 帧率切换方法、装置及存储介质
JP7533854B2 (ja) 投影データ処理方法および装置
CN115048012A (zh) 数据处理方法和相关装置
CN116052701A (zh) 一种音频处理方法及电子设备
CN114827696B (zh) 一种跨设备的音视频数据同步播放的方法和电子设备
CN116170629A (zh) 一种传输码流的方法、电子设备及计算机可读存储介质
CN116708753B (zh) 预览卡顿原因的确定方法、设备及存储介质
CN116708889B (zh) 音视频同步方法、设备及存储介质
CN115904184B (zh) 数据处理方法和相关装置
CN116414337A (zh) 帧率切换方法及装置
CN115686403A (zh) 显示参数的调整方法、电子设备、芯片及可读存储介质
CN116418995A (zh) 编解码资源的调度方法及电子设备
CN116684521B (zh) 音频处理方法、设备及存储介质
CN116700578B (zh) 图层合成方法、电子设备以及存储介质
WO2024198633A1 (zh) 一种视频切换方法及电子设备
WO2023124227A1 (zh) 帧率切换方法及装置
WO2023124225A1 (zh) 帧率切换方法及装置
CN117909071B (zh) 图像显示方法、电子设备、存储介质和芯片系统
WO2024066834A1 (zh) Vsync信号的控制方法、电子设备、存储介质及芯片
WO2023283941A1 (zh) 一种投屏图像的处理方法和装置
CN116414336A (zh) 帧率切换方法及装置
CN118368461A (zh) 视频传输方法及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant