最近在弄屏幕投影,采集系统声音(不是麦克风),系统画面(不是摄像头)。
中间出了很多问题:
麦克风音频的采集都有系统接口可以调用,而系统的声音的采集则有些麻烦;系统画面采集也是一样。
不说这个。
原先的处理流程;
当时为了使发送端与接收端的时间差尽可能的小,并且也由于系统声音可能没有, 因此接收端那边就没采用时间戳的形式来同步音视频。
原理,也是音频同步到视频。
音频处理说明:
因为网络不稳定,可能突然解析出大量音频数据,缓冲区满时就把缓冲区清空。
视频处理说明:
因为网络不稳定,可能突然解析出大量视频帧;当缓冲区里的帧数太多时,就播放的快点;当帧数太少时,就播放的慢点。
同步原理:
根据音频缓冲区里音频缓冲的时间 和 视频帧缓冲的数量,来同步。
问题描述:
音视频同步不是即时的,要过一会儿。而且经常出现不同步的情形,因为音频的采集有问题,可能有时候音频采集的断断续续。
解决办法:
音视频时间戳是解决问题的王道。
音频缓冲区规则不变(缓冲太多就清空),
使用 音频数据缓冲的时间,当前音频帧解析的时间戳,和当前视频帧解析的时间戳, 来控制视频帧播放的速率(就是正常的播放器)。其间处理一种特殊情况:只有视频,没 有音频的情况。
前提是:发送端的音视频时间戳一定要对,否则没办法。