音视频同步的原理及实现方案_二手音频_音频应用论坛 - Powered by AUIOAPP

音频应用论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
热搜: 音频应用

[音频] 音视频同步的原理及实现方案

[复制链接]
3ypqz 发表于 2006-10-18 08:38:00

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
音视频同步是我们观看视频的一个基本体验,尤其对于视频画面中能看到声源动作(如:嘴型)的场景,音视频同步问题非常影响体验。
  O) C, L* z3 V. Y8 c" k& {
# Z& |" j# a. O. @% ]' V5 {在短视频与直播APP中,采集端作为音视频的生产者,如果采集端产生的音视频源本身就无法保证同步,那么后面不管经过什么处理,都很难再让用户看到音视频同步的画面了,因此,在采集端保证音视频同步上尤其重要。
$ Y* g; v6 f+ F% E
* T+ Y3 f4 ~2 F0 ~. t7 \2 q: f$ a那么如何保证app在各种正常/非正常状况下尽量保证输出同步的音视频?本文就是讲述我们是如何解决上述问题的。
5 [9 }4 X9 [: e( y; S- ~1 K6 H7 s; u7 f  d
音视频同步的原理
6 n" X1 e: Y4 v: x
5 o$ L9 q1 C' S: G0 Q) C音视频采集的数据分别来自于麦克风与摄像头,而摄像头与麦克风其实是两个独立的硬件,而音视频同步的原理是相信摄像头与麦克风采集数据是实时的,并在采集到数据时给他们一个时间戳来标明数据所属的时间,而编码封装模块只要不改动音视频时间的相对关系就能保证音频与视频在时间上的对应。如此封装好数据之后,播放端就能够根据音视频的时间戳来播放对应的音视频,从实现音视频同步的效果。% X  f( {7 [  T8 `6 k
& _, l% D3 R' c' s3 b& y% r4 k& T0 v
时间戳参考标准
0 G9 B" X. S" b( e9 {/ P8 z4 w5 p* r, s
取格林威治时间做为对比标准,即音视频时间戳都为采集时间点相对于格林威治标准时间的时间差;1 N* {7 c6 d4 S( |2 Y- |
2 J, t1 j: F& i# k
取系统开机时间做为对比标准,即音视频时间戳都是采集时间点相对于手机开机时间的时间差。目前iOS上AVCaptureSession这套API就是参考这个时间标准给的时间戳。
6 V/ L( M8 y7 ]8 D6 w4 N; @8 s9 D5 }6 u! G+ H3 P! \! ?
其它时间戳标准  k. l( k/ n4 ]! X  S  b2 Q4 c: c& z
8 o6 B1 [( V5 K6 s
基于“开源项目1”的音视频同步探讨
& \: y  v. Q; _: v( E1 |5 \: [+ o; l; J, ~1 i
原生某开源框架
: f7 H: v; F* W2 M1 T- A/ _4 [7 H; J# N; F+ L# M2 A5 o
如图:
, M" i7 g7 J; `# w$ u1 a0 O! g3 Q
音视频同步的原理及实现方法* q+ Y# R, y8 L- J  ?: P) Q
; J$ U1 T% f2 [4 w5 n
 楼主| 3ypqz 发表于 2006-10-19 05:20:00
简介* I4 _4 l! E/ N! c8 K3 ]! i
* b, b. v' o5 n/ I& }
音/视频被采集到之后会先经过音/视频处理模块,音/视频在被处理之后才进入计算时间戳的模块。
4 u4 L* P- S& g% J# o7 j4 z5 W; G: a! v: L3 @
在第一帧到达时记一个计时起点,然后根据采集的帧间隔对接下来每一帧的时间戳进行计算:frameTimeStamp = lastFrameTimeStamp + frameDuration。! K1 u; \9 f/ W6 E' r
+ z% N- h: A9 _) W/ l
优点
/ y' `  O% Q: @" o. Z/ H" J- ]- I1 F) ]. A% U9 A
能输出frame duration稳定的音视频时间戳。* p' Z, h- @9 Q, R3 v7 N3 X8 B( Z1 }$ q
- b$ g  j& b6 P/ F' \! g8 n3 g8 Z
风险* L4 o: |, a2 t$ K
4 v2 v* H9 Q0 e' v4 ]8 t8 N# ^) c
无论是音频还是视频,在手机过热、性能不足等极端情况下有可能出现采集不稳定的情况,比如说预计1s采集30帧,实际只采集到28帧,而音视频的时间戳是通过累加来计算的,这样就有会出现音视频不同步的情况。
1 w  C" g; U: g  K" a
9 P3 s  g. G) L( V( Z& }Video Process(人脸检测、滤镜、3D贴纸)有可能无法在一帧时间内处理完当前帧,这样就会出现帧数比预期低的情况,从而出现音视频不同步。2 `7 R. o2 K  U3 P3 y/ d0 l

0 \8 @% [9 N7 R8 y! P9 U$ O% `$ U( B# S帧间隔涉及到无限小数时,因为计算机的精度有限会引发的时间戳偏移,此偏移会随着帧数的增加而逐渐被放大。: `2 l9 W* z# k8 H
/ N" s, p% `% B, h5 k
基于开源项目1的改进方案1, n: j1 O7 U# u! a' J& E9 f

" t# F* ]2 E/ }6 h' p如图:# k: V/ v/ O  F( z7 ^
8 K) R% Z* G) [) m0 f
音视频同步的原理及实现方法
5 a7 W" a2 C( [5 {5 }- o1 a. m+ \# A
时间戳的获取方法非常直接——每一帧都在改帧进入时间戳计算模块时获取当前系统时间作为时间戳。
5 A' }% E8 o- y! j
$ W9 Y2 }9 C- q) Y. K优点
$ u% ]) H* e9 ]% e5 s* v/ J* w2 R' _% i
APP性能正常的情况下肯定不会出现音视频不同步;
% P' i' W+ ^5 e1 i" g# ^$ Q( o* S) n: f& M6 \
能够实时纠正时间戳,只要APP正常运转,就能立即恢复正确的时间戳。
- I" G: `% @, v+ i* T, A
% {2 z0 w$ n+ D( K风险
( i. V( H9 g' F4 v) [3 A
( c* y, K, m# J8 D; t. s9 W依赖Video Process与Audio Process模块处理时长相近,而实际工程中因为人脸检测、贴纸等原因,Video Process可能会出现阻塞的情况,从而导致临时性的音视频不同步# v* u1 [. Q: a" r, S
8 p; c, s- P' \
在Audio Process与Video Process模块处理帧耗时不均匀的情况下会出现音视频时间戳不均匀的问题,能否正常播放依赖于终端
! O+ T: c- {7 w7 \5 q3 R
9 y! k+ N+ {' t/ m3 P基于开源项目1的一个改进方案2, k4 ?! e! Y" J4 ?& _$ G4 g

- m* d" m. a5 u% K! a如图:
9 X. C, X# ^2 \1 t7 H
3 b, h- C2 ?1 p4 T2 x
8 q# }- [+ Q+ I) ]. `6 C: w. H简介
& O' ^" I' u9 ?+ B
" v1 p2 V* S. t* Z音/视频被采集到之后,先获取采集模块提供的音视频时间戳,然后在音/视频处理模块透传采集模块获取到的音/视频时间戳,在时间戳计算模块继续透传采集模块给的时间戳。! u4 [' R/ I8 X% @& t

. ~1 @! M7 O3 S& U0 L优点. J1 {3 J' u  g  X
- c" _2 ?/ V3 Y
除非采集模块给出错误数据,否则音视频都一定是同步的。
& x8 ?: J# A7 U% ~0 x
( C5 ~2 ^7 F+ S# }) S风险
) ]! K2 a, t2 m2 f/ p2 v4 y  H! M& M# [2 n$ s8 o8 y$ J
可能会出现音视频时间戳不均匀的情况,尤其是在手机过热、性能不足等极端情况下。
$ I5 |8 {8 r- C, H: Z6 |& v
) C- c& `$ D& w! Y( q* X直播方向更进一步的优化探讨
# O% w/ B  w. g6 d- t" T1 y
/ E) |( A" e- l( e6 e大致流程如图:
3 w- |7 l& o/ s  l* R" z* _' I0 u* E# S6 |3 Q( c  x

, V8 W9 E* {" m& D8 ?; F简介3 I* z4 [+ I6 d

; {3 P6 j' @: G8 m音/视频被采集到之后,先获取采集模块提供的音视频时间戳,然后在音/视频处理模块透传采集模块获取到的音/视频时间戳。- ~- m$ K+ W4 Z, ?3 o, `! w1 R7 B

2 J# P! j! S$ A! D, n5 m. W1 v在时间戳计算模块透传视频时间戳,并根据下文中提到的方法计算音频时间戳。
 楼主| 3ypqz 发表于 2006-10-19 05:48:00
音频时间戳计算方法/ k3 v2 }$ j. s8 {- s( y- O

- r- c; T7 W! q, b+ I, t+ J# Q. I实时计算时间戳:当前时间戳=起始时间戳+帧数*帧采样数/采样率;  K, l" J) g9 o( u+ e

, O- \0 @9 x/ p. i如果时间戳偏移量超出阈值,纠正时间戳;
- i( P/ F% ~( F6 m
; \" q8 z. [; d" L4 W" T0 K! G6 G1 z" M纠正频率达到超出阈值,直接透传采集时间戳。. Z, M3 w7 e3 X; V! t% A

. E' y3 P0 T% [+ n9 s优点
8 z; ?  q, _; V% \4 V7 y2 z7 Q- o: [. X
能够提供一个稳定的音频时间戳,可以兼容帧间隔小幅抖动造成的音频时间戳不均匀;* t# ?; O. G/ q: S$ v
3 L. S/ I; l! h- Y8 e; q1 N* H
兼容性能不足时导致实际采集帧数低于帧率。
% G, q4 k" e4 x) v+ u7 v5 \* A/ o' X/ I5 D9 R
风险' l8 {- i3 z6 a( d, f

' X' V) |# v( h7 @1 P: k4 P. b纠正时间戳时可能会造成声音卡顿的感觉。; Q6 R1 ~4 s8 S- Y3 C8 F& H

* R4 `1 f1 G# G/ `7 {) a总结
( H& s% R3 r; ?' B' C7 D: R) G* Y7 ?
具体方案最好是针对实际应用场景有选择性的做优化,比如说,在可以控制播放器策略的情况,可以考虑根据自研播放器特性做时间戳处理。而如果播放器不可控,则尽量通过策略保障帧间隔稳定。
鹰歌 发表于 2006-10-24 07:58:00
好文章,不错啊,可以收藏学习了啊!~
声部 发表于 2007-1-6 17:29:00
聆听。。。。欣赏。。。。学习。。。
www.ycgc.net
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

软硬产品代理咨询服务:声卡:雅马哈UR22C、罗兰声卡、福克斯特、艾肯、阿波罗 、M-audio 、普瑞声纳 、福克斯特、 达思冠系列 音箱:吸顶NS-IW560C、吸顶NS-IW660 、NS-AW350、低音NS-SW050、低音NS-SW100;JBL 吸顶8124、CSS-8006BM;香蕉猴 gibbon系列;普瑞声纳E5XT、E4.5、 E3.5BT 有线话筒:舒尔PGA27、PGA48、MV51、mv88、mv88+、SM27 ;森海E945 、MK4、E835S;舒伯乐top248s;罗德NT1-A、VIDEOMIC、VIDEOMIC GO、VideoMicro、VideoMic NTG 无线领夹麦克风:罗德 wireless go II 一拖一、一拖二;猛犸lark150 耳机:森海HD300 pro、美奇 CR-Buds 、索尼7506、爱科技K240S、K240 MKII、K271 MKII、K52、K72、K92、先锋、飞利浦 1:飞利浦会务通/会议摄像头/全向麦克风/执法仪/录音笔 2:洋铭便携式移动演播室 / 切换台 / 摄控一体摄像机 / 虚拟演播室 / 微金课教室 / 色键器 3:逻兰音视频切换台 / 声卡 / 电子鼓 /电钢琴 /耳机 4:Blackmagic专业摄影机 /调色台 / 切换台/ 广播级转换器 / 监视器 / 采集卡 5:索尼专业摄像机/佳能专业摄像机/松下专业摄像机/ insta360专业摄像机 6:话筒:铁三角/ 舒尔/ 森海塞尔 / AKG / RODE/ BBS 7:音响:YAMAHA/ 声艺 / 皇冠 /JBL / 真力/咪宝/BOSE /美奇 8:声卡:RME/羚羊/IXI /艾肯/PreSonus普瑞声纳/Focusrite福克斯特/YAMAHA/雅马哈/ickb 9:耳机:铁三角/beyerdynamic拜亚动力/AKG爱科技/索尼/RunningMan/美技 10:思锐三脚架 /防潮箱 /米泊三脚架/意美捷三脚架/曼富图三脚架 11:XSW系列,300.500代理商,EWD数字系列代理,6000.9000定制产品,还包销了全国三个型号:XSW1-825,EW100 G4-945,EWD- kk 205

小黑屋|手机版|Archiver|音频应用 (鄂ICP备13005321号-1)

Powered by Audio app

快速回复 返回顶部 返回列表