嵌入式音视频开发——视频篇(三)
本笔记来源于学习韦东山团队课程,自己选择性摘抄加深记忆和学习的效果。
帧率与时间戳
帧率(frame rate)是指视频播放中每秒显示的图像帧数。测量单位为“每秒显示帧数”(frame per second,FPS)或“赫兹”,一般来说FPS用于描述影片、电子绘图或游戏每秒播放多少帧。
人类视觉的时间敏感性和分辨率根据视觉刺激的类型和特征而变化,并且在个体之间是不同的。由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约20至24张的时候,就会认为是连贯的,此现象称之为视觉暂留。这也就是为什么电影胶片是一格一格拍摄出来,但是借由快速播放,能让画面看起来是连续的。
1.帧率
固定帧率(Fixed Frame Rate)是指在视频播放或录制过程中,使用固定的帧率来控制视频的显示或录制速度。这意味着每秒钟播放或录制的视频帧数始终保持不变,不会因为场景变化或其他因素而发生变化。
早期电影时期(19世纪末至20世纪初):在早期的电影时期,电影以每秒大约16至24帧的速度播放。这个帧率被认为足够高,可以在观众的眼睛中产生连贯的动画效果。
电视广播标准的制定(20世纪30年代至40年代):随着电视技术的发展,一些国家开始制定电视广播的标准。例如,美国制定了NTSC标准,欧洲制定了PAL标准。这些标准规定了电视广播的帧率,其中NTSC标准为30帧/秒(29.97帧/秒),PAL标准为25帧/秒。
数字视频时代的到来(20世纪90年代至今):随着数字视频技术的发展,人们开始使用更高的帧率来记录和播放视频。高帧率(High Frame Rate,HFR)视频技术允许以60帧/秒或更高的帧率录制和播放视频,提供更加流畅的观看体验。
游戏和虚拟现实的崛起(21世纪初至今):在电子游戏和虚拟现实等领域,高帧率对于提供更加真实和流畅的游戏体验至关重要。因此,许多游戏和虚拟现实设备支持更高的帧率,如120帧/秒或以上。
述由于早期的电视技术限制,使用的都是固定帧率的情况,在视频传输过程中都按照特定的标准进行视频传输。
目前在互联网上的一些实时音视频应用中,当网络条件不好时,可能会出现以下情况
- 视频画质下降:为了保持通话的流畅性,视频质量可能会下降,表现为画面模糊、色彩失真或者帧率降低等现象。
- 音频质量下降:网络带宽不足时,音频数据传输可能会受到影响,导致声音质量下降,出现断断续续、噪音增多、声音变形等问题。
- 延迟增加:网络延迟增加会导致通话双方之间的延迟增加,表现为声音和图像的延迟现象,使得通话变得不够实时,甚至出现明显的对话交错或者延迟。
- 丢包现象:在网络拥堵或者不稳定的情况下,数据包可能会丢失,导致通话中的部分数据丢失,表现为声音断续、图像卡顿或者画面冻结等问题。
为了应对这些问题,实时音视频应用通常会采取一些策略来优化用户体验,比如:
- 自适应编码:根据网络条件动态调整视频编码参数,如调整分辨率、帧率和压缩比,以适应当前网络带宽和延迟情况。
- 前向纠错:通过增加冗余数据或者使用纠错码技术,在发生丢包时可以恢复部分丢失的数据,降低通话质量受损的影响。
- 动态码率调整:根据网络带宽和稳定性动态调整音视频传输的码率,以确保在当前网络条件下实现最佳的通话质量。
综上所述,实时音视频应用在面对网络不佳的情况下,采用可变帧率(Variable Frame Rate,VFR)和可变码率(Variable Bit Rate,VBR),即降低分辨率导致画面变得模糊和降低帧率导致画面跳跃(卡顿)。
2.时间戳
在视频编码中,时间戳(Timestamp)是指每个视频帧的时间戳信息,用来表示该帧在整个视频序列中的时间位置。时间戳通常以时钟周期、毫秒或者帧数的形式表示,其作用是为了确保视频帧在解码和播放时按照正确的顺序和时间间隔进行处理。
具体来说,时间戳在视频编码中的作用包括:
- 帧顺序和同步:时间戳可以确定每个视频帧在播放时的顺序和时间间隔,确保视频序列在解码和播放时按照正确的顺序进行同步。
- 时间基准:时间戳提供了一个时间基准,使得解码器能够准确地计算每个视频帧的显示时间,以便在正确的时间点将其呈现给用户。
- 同步和编辑:在视频编辑和合成中,时间戳用于确保不同视频源的帧能够按照正确的时间顺序进行合并和同步。
- 帧率控制:时间戳可以用来控制视频帧的播放速率和帧率,从而实现帧率控制和同步。
时间戳在视频编码中通过确定每个视频帧的时间位置和顺序,确保视频序列在解码和播放时能够按照正确的时间顺序进行同步和播放。一般在编码中时间戳分为PTS和DTS。
在视频编码中,PTS 是 Presentation Time Stamp 的缩写,表示显示时间戳,用来指示每个视频帧应该在播放时显示的时间。PTS 通常是一个时钟周期数或者时间单位(如毫秒)的值,它告诉解码器在何时呈现特定的视频帧。
PTS 的主要作用包括:
- 确定显示顺序:PTS 用于确定每个视频帧在播放时的显示顺序,确保视频按照正确的时间顺序呈现给观众。
- 同步音视频:在音视频同步的场景下,视频帧的 PTS 可以与音频帧的时间戳进行匹配,以确保音频和视频能够同时播放并保持同步。
- 控制播放速度:通过调整 PTS 的数值,可以控制视频的播放速度,实现快进、慢放等功能。
- 处理变速播放:在变速播放或者跳转视频位置的情况下,PTS 可以用来确定要显示的视频帧,以确保播放器能够准确地定位到指定的时间点。
PTS 在视频编码中,用于确定视频帧在播放时应该显示的时间,保证视频播放的顺序、同步和准确性。
在视频编码中,DTS 是 Decoding Time Stamp 的缩写,表示解码时间戳。DTS 指示了每个视频帧在解码器中被解码的时间点。
DTS 的作用包括:
- 解码顺序:DTS 用于确定视频帧在解码器中被解码的顺序,即每个视频帧应该在解码器中的何时被解码。
- 解码器缓冲:解码器根据 DTS 确定解码每个视频帧的时机,并在适当的时间解码每个帧,以确保视频流的连续性和流畅性。
- 帧重排序:在某些情况下,视频编码器可能会对视频帧进行重新排序,以优化编码效率或者满足特定的编码需求。DTS 可以帮助解码器正确地对重新排序的视频帧进行解码。
DTS 在视频编码中,用于确定视频帧在解码器中的解码顺序和时机,保证视频流能够被正确地解码和播放。
假设一个视频文件包含以下几个视频帧,并且它们的解码顺序并不是按照显示顺序排列的:
- 帧A(解码时间:10 ms)
- 帧B(解码时间:30 ms)
- 帧C(解码时间:20 ms)
在这个例子中,帧B的解码时间晚于帧C,但根据显示顺序,帧B应该在帧C之前显示。这时就需要 DTS 来帮助解码器正确地按照解码顺序进行解码。
如果视频播放器仅根据解码顺序来播放视频,而没有考虑到 DTS,它可能会按照以下顺序播放视频帧:
- 解码帧A(解码时间:10 ms)
- 解码帧C(解码时间:20 ms)
- 解码帧B(解码时间:30 ms)
这样会导致帧B在帧C之后显示,与实际的显示顺序不符合。但如果播放器考虑到了 DTS,它会按照以下顺序播放视频帧:
- 解码帧A(解码时间:10 ms)
- 解码帧B(解码时间:30 ms)
- 解码帧C(解码时间:20 ms)
这样,视频播放器就能够根据 DTS 正确地按照显示顺序播放视频帧,确保视频能够按照正确的时间顺序呈现给观众,保持流畅性和连贯性。