麦克风获取地方:
一,win-wasspi
WASAPISource::ProcessCaptureData()
麦克风和电脑混音都从此地方获取
二,win-dshow
Receive(bool isVideo, IMediaSample *sample)
YY虚拟摄像头情况下,视频数据是无编码状态,音频是无编码状态
videostart时间正常,audiostarttime时间不正常,此值不规律增加,会造成音频声音延后。
三,时间分析
2种处理方式都会在处理
source_output_audio_data 主要是此函数处理时间数据:
diff = uint64_diff(source->next_audio_ts_min, in.timestamp);
下一次时间和当前数据时间的差值
/* smooth audio if within threshold */
if (diff > MAX_TS_VAR && !using_direct_ts) //过大,跳时间
handle_ts_jump(source, source->next_audio_ts_min,
in.timestamp, diff, os_time);
else if (diff < TS_SMOOTHING_THRESHOLD) {//过小,正常赋值
if (source->async_unbuffered && source->async_decoupled)
source->timing_adjust = os_time - in.timestamp;
in.timestamp = source->next_audio_ts_min;
}
source->last_audio_ts = in.timestamp; // 记录新来音频数据时间
source->next_audio_ts_min =
in.timestamp + conv_frames_to_time(sample_rate, in.frames); 记录下一次时间
in.timestamp += source->timing_adjust; 如有跳跃时间,做时间偏移
sync_offset = source->sync_offset; //同步偏移的值
in.timestamp += sync_offset;
in.timestamp -= source->resample_offset; 从采样偏移
source->next_audio_sys_ts_min =
source->next_audio_ts_min + source->timing_adjust;
//下一次系统时间