视频播放音画同步处理

一、视频播放流程

播放一个视频,一般分一下几步完成

解复用(Demux):在媒体文件中将音频数据、视频数据、字母数据分离出来。

二、播放参数说明

视频帧率:一秒钟需要显示的画面,比如25FPS,意思就是一秒钟需要显示25张画面,

那么一张画面的持续时间就是1000/25=40ms。

音频采样率:一秒钟播放的样品个数。

音频数据公式:采样率x通道数*采样深度/8*数据持续时间。

三、音画同步阐述

依据视频帧率以及音频的帧率即可控制播放速度。声卡和显卡均是一帧数据来作为播放单位,如果单纯依据帧率来控制播放,理论上是可以控制音画同步的。

比如深度16bit,一个8K单声道的PCM的数据和25FPS的视频流为例:

一个512byte的PCM音频帧的播放时长:512*1000/(8000*16/2)=32ms

一帧视频画面的持续时间为1000/25 = 40ms

故在理想情况下,音视频完全不同,音视频播放过程如下:

但是实际情况下,如果用上面这种方式的话,慢慢的就会出现音视频不同步的情况,可能是视频播放快了,可能音频播放快了。原因如下:

1.一帧的播放时间,难以精准控制。音视频解码及渲染的耗时不同,可能造成每一帧输出的时间长短不一样,长久积累误差,不同步便会越来越明显。

2.音频数据输出是线性的持续不断的,但是视频输出不是线性的,视频渲染可能快,可能慢,从而导致音视频显示帧率上出现偏差。

所以,解决音视频播放同步的问题,引入了时间戳。

录制的时候:选择一个参考时钟,要求参考时钟上的时间是线性递增的,编码时依据参考时钟上的每个音视频数据块打上时间戳。

播放的时候:依据音视频时间戳及参考时钟,来调整播放速度。

所以,视频和音频同步实际上时一个动态的过程,一直围绕理想状态上不断调整音视频播放速度,来消除时间累计误差。

四、同步策略

实现 音视频同步,在播放时候需要选择一个参考时钟,读取帧上的时间戳,同时根据参考时钟来动态调整播放速度。参考时钟一般选择以下两种

1.将视频同步到音频上:以音频的播放速度为基准来同步视频。

2.将视频和音频同步到外部的时钟上:选择一个外部时钟为基准,视频和音频的播放速度均以该时钟为标准。

当播放源比参考时钟慢时,加快播放速度或者丢弃,播放快了则延迟播放速度。考虑人对声音的敏感度比较高,频繁调节音频会带来较差的体验,并且音频播放时钟为线性增长,一般的做法都是以时钟作为参考时钟,将视频同步到音频上。

相关推荐
jndingxin10 小时前
OpenCV视频I/O(8)视频采集类VideoCapture之从视频源中读取一帧图像函数read()的使用
人工智能·opencv·音视频
SEU-WYL11 小时前
基于深度学习的视频生成
人工智能·深度学习·音视频
小神.Chen14 小时前
YouTube音视频合并批处理基于 FFmpeg的
ffmpeg·音视频
EasyCVR18 小时前
安防监控/视频系统EasyCVR视频汇聚平台如何过滤134段的告警通道?
网络协议·音视频·视频编解码·视频监控·gb28181
Q8343158191 天前
华为 海思22AP10(SS524)H.265 编解码处理器用户指南
arm开发·人工智能·嵌入式硬件·音视频·硬件工程·h.265·视频编解码
PlumCarefree1 天前
mp4(H.265编码)转为本地RTSP流
音视频·harmonyos·h.265
Lijunyan12981 天前
Python、C++、java阶乘算法
python·其他·音视频·twitter·segmentfault
顶顶年华正版软件官方1 天前
小红书制作视频如何去原视频音乐,视频如何去原声保留背景音乐?
音视频·视频剪辑·会声会影
2的n次方_1 天前
【AIGC】内容创作——AI文字、图像、音频和视频的创作流程
人工智能·ai·音视频
fpcc2 天前
录制真人出镜视频一个简单方法
智能手机·音视频