赞
踩
接口:<audio-io.c> input_and_output (struct audio_output *audio, uint64_t audio_time, uint64_t prev_time)
注释:清空所有混音器audio->mixes中的每个混音器的buff,并逐个将混音器的每个声道buff指针赋值给局部变量audio_output_data data[MAX_AUDIO_MIXES],调用已绑定的回调函数 audio->input_cb (audio->input_param, prev_time, audio_time, &new_ts, active_mixes, data)获取新的音频数据,通过修改局部变量data中各个指针的buff内容,来完成修改 audio->mixes 中的每个混音器的buff内容,audio->input_cb回调函数绑定的接口为 obs-audio.c 中的 audio_callback;
接口:<obs-audio.c> audio_callback (void *param,uint64_t start_ts_in, uint64_t end_ts_in, uint64_t *out_ts,uint32_t mixers, struct audio_output_data *mixes)
注释:获取音频码率 sample_rate ,音频声道 channels,遍历当前场景中的所有源( source ),加入到音频的渲染队列 audio->render_order 中 push_audio_tree (NULL, source, audio);以及 audio->root_nodes 中,da_push_back ( audio->root_nodes , &source );把系统自带的音频输入输出音频源(如音响和麦克风)加入到渲染队列 audio->render_order 中,source = data->first_audio_source;
while (source) {
push_audio_tree(NULL, source, audio);
source = (struct obs_source*)source->next_audio_source;
}
循环调用接口 obs_source_audio_render 对渲染队列中的所有源做音频数据渲染,每个渲染完成的音频数据存放在 source->audio_output_buf 中;
接口:<obs-source.c> void obs_source_audio_render(obs_source_t *source, uint32_t mixers,size_t channels, size_t sample_rate, size_t size)
注释:如果绑定了音频渲染器,则调用custom_audio_render:
static void custom_audio_render(obs_source_t *source, uint32_t mixers,size_t channels, size_t sample_rate)
将源的音频输出buff指针赋值给局部变量obs_source_audio_mix audio_data
audio_data.output[mix].data[ch] = source->audio_output_buf[mix][ch];
调用source->info.audio_render回调函
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。