当前位置:   article > 正文

音视频推流端 OBS 框架学习和源码分析_如何引用libobs

如何引用libobs

音视频推流端 OBS 框架学习和源码分析

1.获取混音后的音频数据:

接口:<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

2.各个source音频遍历:

接口:<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 中;

3.各个source音频渲染:

接口:<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回调函

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/194929
推荐阅读
相关标签
  

闽ICP备14008679号