member由conference_function进入:
1、查找会议,
如果会议不存在,则
2、创建会议,
创建会议画布
conference_video_parse_layouts:根据conference_layouts.conf 配置创建layouts,配置中的所有layout都加载,并存储在layout_hash中,最多8*8组
canvases[]每一个canvas都有一个timer
如果是MUX,则【创建混屏线程】,在混屏线程中,video数据混屏后的数据丢入每个成员的mux_out_queue中,如果多cpu,则img刷新放到mux write线程,负责当前线程做。
3、启动【会议线程】:conference_launch_thread(conference)
会议线程里做混音:从audio_buffer读取数据,通过switch_buffer_write将混音数据写入每个成员的omember->mux_buffer
4、如果是:MUX会议,则为每个成员创建用于混屏的video_queue,mux_out_queue对立。
5、将成员添加到会议室.
6、如果是:MUX会议,则
启动【video write back 线程】conference_video_launch_muxing_write_thread ,从自己的mux_out_queue队列中获取video数据(混过屏后的),必要时刷新layer->img->canvas->img.
7、启动【video INPUT线程】:conference_video_thread_callback, 将passthrough模式的数据直接分发给其他成员。MUX模式下的video数据push到video_queue中。
8、启动【音频write back线程】conference_loop_output(&member); 将mux_buffer取出写回到member channel。
并启动【input线程】:读取音频数据,到各自audio_buffer中; 数据会在conference会议线程中混音。