专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

音视频同步原理及实现

  本文主要描述音视频同步原理,及常见的音视频同步方案,并以代码示例,展示如何以音频的播放时长为基准,将视频同步到音频上以实现视音频的同步播放。内容如下:1。音视频同步简单介绍2。DTS和PTS简介2。1IPB帧2。2时间戳DTS、PTS3。常用同步策略4。音视频同步简单示例代码1。音视频同步简单介绍
  对于一个播放器,一般来说,其基本构成均可划分为以下几部分:数据接收(网络本地)解复用音视频解码音视频同步音视频输出
  基本框架如下图所示:
  为什么需要音视频同步?媒体数据经过解复用流程后,音频视频解码便是独立的,也是独立播放的。而在音频流和视频流中,其播放速度都是有相关信息指定的:视频:帧率,表示视频一秒显示的帧数。音频:采样率,表示音频一秒播放的样本的个数。
  从帧率及采样率,即可知道视频音频播放速度。声卡和显卡均是以一帧数据来作为播放单位,如果单纯依赖帧率及采样率来进行播放,在理想条件下,应该是同步的,不会出现偏差。以一个44。1KHz的AAC音频流和24FPS的视频流为例:一个AAC音频frame每个声道包含1024个采样点,则一个frame的播放时长(duration)为:(102444100)1000ms23。22ms;一个视频frame播放时长(duration)为:1000ms2441。67ms。理想情况下,音视频完全同步,音视频播放过程如下图所示:
  但实际情况下,如果用上面那种简单的方式,慢慢的就会出现音视频不同步的情况,要不是视频播放快了,要么是音频播放快了。可能的原因如下:一帧的播放时间,难以精准控制。音视频解码及渲染的耗时不同,可能造成每一帧输出有一点细微差距,长久累计,不同步便越来越明显。(例如受限于性能,42ms才能输出一帧)音频输出是线性的,而视频输出可能是非线性,从而导致有偏差。媒体流本身音视频有差距。(特别是TS实时流,音视频能播放的第一个帧起点不同)
  所以,解决音视频同步问题,引入了时间戳:首先选择一个参考时钟(要求参考时钟上的时间是线性递增的);编码时依据参考时钟上的给每个音视频数据块都打上时间戳;播放时,根据音视频时间戳及参考时钟,来调整播放。所以,视频和音频的同步实际上是一个动态的过程,同步是暂时的,不同步则是常态。以参考时钟为标准,放快了就减慢播放速度;播放快了就加快播放的速度。
  接下来,我们介绍媒体流中时间戳的概念。
  音视频学习资料免费领取:后台私信扣1
  2。DTS和PTS简介2。1IPB帧
  在介绍DTSPTS之前,我们先了解IPB帧的概念。IPB帧本身和音视频同步关系不大,但理解其概念有助于我们了解DTSPTS存在的意义。视频本质上是由一帧帧画面组成,但实际应用过程中,每一帧画面会进行压缩(编码)处理,已达到减少空间占用的目的。
  编码方式可以分为帧内编码和帧间编码。内编码方式:即只利用了单帧图像内的空间相关性,对冗余数据进行编码,达到压缩效果,而没有利用时间相关性,不使用运动补偿。所以单靠自己,便能完整解码出一帧画面。帧间编码:由于视频的特性,相邻的帧之间其实是很相似的,通常是运动矢量的变化。利用其时间相关性,可以通过参考帧运动矢量的变化来预测图像,并结合预测图像与原始图像的差分,便能解码出原始图像。所以,帧间编码需要依赖其他帧才能解码出一帧画面。
  由于编码方式的不同,视频中的画面帧就分为了不同的类别,其中包括:I帧、P帧、B帧。I帧、P帧、B帧的区别在于:I帧(Intracodedframes):I帧图像采用帧I帧使用帧内压缩,不使用运动补偿,由于I帧不依赖其它帧,可以独立解码。I帧图像的压缩倍数相对较低,周期性出现在图像序列中的,出现频率可由编码器选择。P帧(Predictedframes):P帧采用帧间编码方式,即同时利用了空间和时间上的相关性。P帧图像只采用前向时间预测,可以提高压缩效率和图像质量。P帧图像中可以包含帧内编码的部分,即P帧中的每一个宏块可以是前向预测,也可以是帧内编码。B帧(Bidirectionalpredictedframes):B帧图像采用帧间编码方式,且采用双向时间预测,可以大大提高压缩倍数。也就是其在时间相关性上,还依赖后面的视频帧,也正是由于B帧图像采用了后面的帧作为参考,因此造成视频帧的传输顺序和显示顺序是不同的。
  也就是说,一个I帧可以不依赖其他帧就解码出一幅完整的图像,而P帧、B帧不行。P帧需要依赖视频流中排在它前面的帧才能解码出图像。B帧则需要依赖视频流中排在它前面或后面的IP帧才能解码出图像。对于I帧和P帧,其解码顺序和显示顺序是相同的,但B帧不是,如果视频流中存在B帧,那么就会打乱解码和显示顺序。正因为解码和显示的这种非线性关系,所以需要DTS、PTS来标识帧的解码及显示时间。2。2时间戳DTS、PTSDTS(DecodingTimeStamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。PTS(PresentationTimeStamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。当视频流中没有B帧时,通常DTS和PTS的顺序是一致的。但如果有B帧时,就回到了我们前面说的问题:解码顺序和播放顺序不一致了,即视频输出是非线性的。比如一个视频中,帧的显示顺序是:IBBP,因为B帧解码需要依赖P帧,因此这几帧在视频流中的顺序可能是:IPBB,这时候就体现出每帧都有DTS和PTS的作用了。DTS告诉我们该按什么顺序解码这几帧图像,PTS告诉我们该按什么顺序显示这几帧图像。顺序大概如下:
  从流分析工具看,流中P帧在B帧之前,但显示确实在B帧之后。
  需要注意的是:虽然DTS、PTS是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。以我们最常见的TS为例:
  TS流中,PTSDTS信息在打流阶段生成在PES层,主要是在PES头信息里。
  标志第一位是PTS标识,第二位是DTS标识。标志:00,表示无PTS无DTS;01,错误,不能只有DTS没有PTS;10,有PTS;11,有PTS和DTS。PTS有33位,但是它不是直接的33位数据,而是占了5个字节,PTS分别在这5字节中取。
  TS的IP帧携带PTSDTS信息,B帧PTSDTS相等,进保留PTS;由于声音没有用到双向预测,它的解码次序就是它的显示次序,故它只有PTS。
  TS的编码器中有一个系统时钟STC(其频率是27MHz),此时钟用来产生指示音视频的正确显示和解码时间戳。PTS域在PES中为33bits,是对系统时钟的300分频的时钟的计数值。它被编码成为3个独立的字段:PTS3230〔140〕。DTS域在PES中为33bits,是对系统时钟的300分频的时钟的计数值。它被编码成为3个独立的字段:DTS3230〔140〕。因此,对于TS流,PTSDTS时间基均为190000秒(27MHz经过300分频)。PTS对于TS流的意义不仅在于音视频同步,TS流本身不携带duration(可播放时长)信息,所以计算duration也是根据PTS得到。
  附上TS流解析PTS示例:defineMAKEWORD(h,l)(((h)8)(l))packet为PESint64tgetpts(constuint8tpacket){constuint8tppacket;if(packetNULL){return1;}if(!(p〔0〕0x00p〔1〕0x00p〔2〕0x01)){pessyncwordreturn1;}p3;jumppessyncwordp4;jumpstreamid(1)peslength(2)pesflag(1)intptsptsflagp6;p2;jumppesflag(1)pesheaderlength(1)if(ptsptsflag0x02){int64tpts3230,pts2915,pts140,pts;pts3230(p)10x07;p1;pts2915(MAKEWORD(p〔0〕,p〔1〕))1;p2;pts140(MAKEWORD(p〔0〕,p〔1〕))1;p2;pts(pts323030)(pts291515)pts140;returnpts;}return1;}3。常用同步策略
  前面已经说了,实现音视频同步,在播放时,需要选定一个参考时钟,读取帧上的时间戳,同时根据的参考时钟来动态调节播放。现在已经知道时间戳就是PTS,那么参考时钟的选择一般来说有以下三种:将视频同步到音频上:就是以音频的播放速度为基准来同步视频。将音频同步到视频上:就是以视频的播放速度为基准来同步音频。将视频和音频同步外部的时钟上:选择一个外部时钟为基准,视频和音频的播放速度都以该时钟为标准。
  当播放源比参考时钟慢,则加快其播放速度,或者丢弃;快了,则延迟播放。
  这三种是最基本的策略,考虑到人对声音的敏感度要强于视频,频繁调节音频会带来较差的观感体验,且音频的播放时钟为线性增长,所以一般会以音频时钟为参考时钟,视频同步到音频上。在实际使用基于这三种策略做一些优化调整,例如:调整策略可以尽量采用渐进的方式,因为音视频同步是一个动态调节的过程,一次调整让音视频PTS完全一致,没有必要,且可能导致播放异常较为明显。调整策略仅仅对早到的或晚到的数据块进行延迟或加快处理,有时候是不够的。如果想要更加主动并且有效地调节播放性能,需要引入一个反馈机制,也就是要将当前数据流速度太快或太慢的状态反馈给源,让源去放慢或加快数据流的速度。
  对于起播阶段,特别是TS实时流,由于视频解码需要依赖第一个I帧,而音频是可以实时输出,可能出现的情况是视频PTS超前音频PTS较多,这种情况下进行同步,势必造成较为明显的慢同步。处理这种情况的较好方法是将较为多余的音频数据丢弃,尽量减少起播阶段的音视频差距。4。音视频同步简单示例代码
  代码参考ffplay实现方式,同时加入自己的修改。以audio为参考时钟,video同步到音频的示例代码:获取当前要显示的videoPTS,减去上一帧视频PTS,则得出上一帧视频应该显示的时长delay;当前videoPTS与参考时钟当前audioPTS比较,得出音视频差距diff;获取同步阈值syncthreshold,为一帧视频差距,范围为10ms100ms;diff小于syncthreshold,则认为不需要同步;否则delaydiff值,则是正确纠正delay;如果超过syncthreshold,且视频落后于音频,那么需要减小delay(FFMAX(0,delaydiff)),让当前帧尽快显示。如果视频落后超过1秒,且之前10次都快速输出视频帧,那么需要反馈给音频源减慢,同时反馈视频源进行丢帧处理,让视频尽快追上音频。因为这很可能是视频解码跟不上了,再怎么调整delay也没用。如果超过syncthreshold,且视频快于音频,那么需要加大delay,让当前帧延迟显示。将delay2慢慢调整差距,这是为了平缓调整差距,因为直接delaydiff,会让画面画面迟滞。如果视频前一帧本身显示时间很长,那么直接delaydiff一步调整到位,因为这种情况再慢慢调整也没太大意义。7。考虑到渲染的耗时,还需进行调整。frametimer为一帧显示的系统时间,frametimerdelaycurrtime,则得出正在需要延迟显示当前帧的时间。{videoframeq。deQueue(videoframe);获取上一帧需要显示的时长delaydoublecurrentpts(double)videoframeopaque;doubledelaycurrentptsvideoframelastpts;if(delay0delay1。0){delayvideoframelastdelay;}根据视频PTS和参考时钟调整delaydoublerefclockaudiogetaudioclock();doublediffcurrentptsrefclock;diff0:videoslow,diff0:videofast一帧视频时间或10ms,10ms音视频差距无法察觉doublesyncthresholdFFMAX(MINSYNCTHRESHOLD,FFMIN(MAXSYNCTHRESHOLD,delay));audioaudiowaitvideo(currentpts,false);videovideodropframe(refclock,false);if(!isnan(diff)fabs(diff)NOSYNCTHRESHOLD)不同步{if(diffsyncthreshold)视频比音频慢,加快{delayFFMAX(0,delaydiff);staticintlastdelayzerocounts0;if(videoframelastdelay0){lastdelayzerocounts;}else{lastdelayzerocounts0;}if(diff1。0lastdelayzerocounts10){printf(maybevideocodectooslow,adjustvideoaudio);ifndefDORPPACKaudioaudiowaitvideo(currentpts,true);差距较大,需要反馈音频等待视频endifvideovideodropframe(refclock,true);差距较大,需要视频丢帧追上}}视频比音频快,减慢elseif(diffsyncthresholddelaySYNCFRAMEDUPTHRESHOLD)delaydelaydiff;音视频差距较大,且一帧的超过帧最常时间,一步到位elseif(diffsyncthreshold)delay2delay;音视频差距较小,加倍延迟,逐渐缩小}videoframelastdelaydelay;videoframelastptscurrentpts;doublecurrtimestaticcastdouble(avgettime())1000000。0;if(videoframetimer0){videoframetimercurrtime;showfirstframe,setframetimer}doubleactualdelayvideoframetimerdelaycurrtime;if(actualdelayMINREFRSHS){actualdelayMINREFRSHS;}usleep(staticcastint(actualdelay10001000));printf(actualdelay〔lf〕delay〔lf〕diff〔lf〕,actualdelay,delay,diff);DisplaySDLUpdateTexture(videotexture,(videorect),videoframedata〔0〕,videoframelinesize〔0〕);SDLRenderClear(videorenderer);SDLRenderCopy(videorenderer,videotexture,videorect,videorect);SDLRenderPresent(videorenderer);videoframetimerstaticcastdouble(avgettime())1000000。0;avframeunref(videoframe);updatenextframeschedulerefresh(media,1);}
  作者:wuscblog

家庭教育指导师证是怎么考2022年考试报名时间在几月家庭教育是家庭生活的摇篮,是人出生后接受教育的第一个地方,也就是人生的第一个课堂父母是孩子的第一任老师,也就是启蒙的老师。所以,父母对孩子的教育是最早的。一般来说,孩子出生后经过三DNF盘古开天所向披靡!42秒再破纪录,不愧是国服第一驱魔DNF盘古开天所向披靡!42秒再破纪录,不愧是国服第一驱魔DNF国服巅峰赛淘汰赛,第六轮赛事继续进行,7支队伍依次登场,预赛第一名恶霸小队最后登场,又打破了赛事最快竞速纪录,让人叹丁俊晖终于觉醒!新年发文已重拾信心,球迷期待丁俊晖重回巅峰2021年的最后一天,大家在等待新年钟声敲响的同时似乎都在对自己在这一年的得失进行总结,你可以在朋友圈和微博上看到各种各样的年终总结和对来年的展望。很多体育明星也都纷纷在社交媒体上NBA垃圾合同多?给你看看那些错过了合同在背后偷着哭的NBA这个大联盟里,别说千万富翁,就是亿万富翁也是一抓一大把!这些亿万富翁里有货真价实的例子,也有那些坑苦了球队的垃圾合同!但是,坑人这个活是双向的,有被坑的球队老板,就会有被坑的有没有一种可能,第三代球王是姆巴佩?姆巴佩现在应该是足坛潜力和能力最大的新星了,身价很快就是世界第一,据传巴黎愿意给姆巴佩提供税后100万镑周薪的合同,留住姆巴佩这个大腿。姆巴佩毕竟今年才23岁,目前的成就,已经是其从顶薪1。1亿暴降到60万!!!中国足球的未来该何去何从?在今年大年初一,这本应该是一个合家欢乐的日子里,中国男足却在与越南的世界杯预选赛中,13输给了对手,全国的球迷都被感失望。随之而来的是广大球迷漫天的吐槽,因为中国国足的表现实在是太学生党等到了!魅族教育优惠上线魅族18Pro到手3479元起2月21日,据魅族官方消息,今日,魅族正式开启优惠幅度拉满的开学季活动。具体来看,2月21日2月23日,前往京东天猫购魅族手机除享受优惠政策,额外再享教育优惠省20元,官方表示,凭给天文图片上色,主要靠艺术家审美?流言天文照片其实本来是黑白的,主要还是靠艺术家审美高,上了色才漂亮。真相的确有很多天文照片都需要上色,但这个上色过程本身也是科学严谨的,是科学家和艺术家共同努力的结果。图片拼完叠完国家利益高于一切,爱豆都得靠边站,这届粉丝属实优秀这几天的冬奥会热度特别高,广大网友纷纷在为我们的奥运健儿加油,更为他们取得的成绩感到自豪不已。尤其是这届冬奥会我们用上了最先进的猎豹飞猫等高清摄像设备,让赛场上很多的小动作无所遁形冬奥会告诉我们一个简单的育儿方法,积极高效,却被很多家长蔑视冬奥会结束了,短短十几天,冬奥会带给我们的不仅仅是一次次胜利的震撼,失败的难过,更是让我们看到了运动员奋斗不息,拼搏不止的精神。不少家长会拿到冬奥会中的运动员做例子,希望孩子学习他每天坚持做这四件小事,孩子会越来越优秀常听妈妈们抱怨,养娃太难了!抛开学习暂且不谈,孩子习惯太差,东西总是乱扔,被子从来不叠,书桌每天像被台风刮过前段时间,有个视频火了一位爸爸翻儿子的书包,竟然掏出来一把把废纸,翻出来
对孩子让步就是责任缺失媒体人周刊有一段时间,一提到教育,马上就有人说,要提倡素质教育快乐教育,就好像孩子在苦海里似的。我们还时常发现这样的一些怪现象少数老师在课堂上只是为了完成任务,对教学不是精益求精,长期服用优甲乐,会有什么副作用吗?涨知识的科普,转给家人看看甲状腺是人体内一个重要的可以分泌激素的部位,对于调节人体正常代谢有着重要的作用,但是因为长期不良的作息和饮食习惯等因素,会导致甲状腺功能下降。对于甲状腺疾病患者来说,对于优甲乐是非马上立冬了,想要冬季不生病,这些养生知识要懂得一冬季养生小常识注意的5个事项。出点汗冬季养生要适当地动筋骨,出点汗,这样才能强身体。锻炼身体要动静结合,跑步,做操只一微微似汗出为度,汗多泄气,有利于冬季阳气伏藏之道。护住脚冬季孕期妈妈看过来!怀孕时到底能不能涂东西?怀孕为什么不能涂东西怀孕了就不要再用化妆品沐浴露了,对小孩不好。许多妈妈在怀孕时生怕自己的疏忽和冒失影响了腹中的宝宝,大多变得小心翼翼,不得不选择素面朝天。但是另一方面呢,怀孕后由惊险!孕8月胎动突然消失,妈妈崩溃拍肚子大哭就算是平时再怎么马大哈的女汉子,在怀孕以后也可以变得心细如发,因为时刻关心着宝宝的健康,一点风吹草动都可能会紧张不已!昨天有个孕妈粉丝发给飒姐这样一则视频,一开始看得我也是紧张的不本周上半周与魔共舞,下半周绝地反弹预判兑现用数据解析股市背后的逻辑,大家好,我是阿木,今天是2022年11月4号星期五,我们一起来复个盘啊,今天A股市场是非常强势啊,指数都是强势上攻的形态,那么今天两大蓝筹指数上证50沪深2022年全球超级市值公司排行榜发布111家公司市值超千亿中国公司正崛起本文为北京时间京融智库的原创文章,如需转载请在文前注明来源北京时间京融智库及作者信息,否则将严格追究其法律责任。文北京时间京融智库研究员焦建全吴珊近日,北京时间京融智库发布2022国美被曝已发不起工资,黄光裕提前套现10个亿,市值没了95曾经的一代商业巨子,3次登顶中国首富的黄光裕,如今公司竟然发不出工资。去年2月出狱后,黄光裕曾意气风发,发誓要用18个月让国美重回巅峰。只不过,理想终究还是败给了现实,前首富也不例苹果现在市值超过了亚马逊Alphabet和Meta的总和过去一个月,苹果公司的股价表现远好于其他大型科技公司,这帮助该公司取得了一项惊人的成就这家智能手机巨头的市值现在超过了AlphabetInc。亚马逊和Meta平台公司的总和。道琼斯11月4日早上好朋友,非常漂亮的早上好图片,特别暖心早安祝福语每天早上问候语图片,今天最新发布早上,问候祝福,美图集合粗茶淡饭一样香,勤劳致富奔小康,回报社会和长辈,打好江山为后辈,不怕辛苦不怕累,建设和谐新社会。早安天气在变,思念不变季节在浅析QLED与OLED发展趋势近年来液晶电视的发展速度肉眼可见,从早期的LCD电视到LED电视,再到今年很火的QLED电视,OLED电视,甚至于更高端的MINILED电视,这些词汇充斥在电视圈内,下面就为大家进
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网