mod_conference模块源码分析

2018-10-09  本文已影响47人  XDgbh

一、分析一个模块的源码步骤

    SWITCH_ADD_API(api_interface, "conference", "Conference module commands", conf_api_main, p);
    SWITCH_ADD_APP(app_interface, global_app_name, global_app_name, NULL, conference_function, NULL, SAF_NONE);
    SWITCH_ADD_APP(app_interface, "conference_set_auto_outcall", "conference_set_auto_outcall", NULL, conference_auto_function, NULL, SAF_NONE);
    SWITCH_ADD_CHAT(chat_interface, CONF_CHAT_PROTO, chat_send);

二、详细分析conference api

三、发起一个会议的流程

conference_app中通过参数或其他方式传入一个会议室号码,然后先检查该会议室是否存在并返回一个会议室对象conference=conference_find(conf_name, NULL);,如果不存在的话则创建一个conference = conference_new(conf_name, xml_cfg, session, NULL);
1)然后为这个会议室开启一个线程运行launch_conference_thread(conference);。该线程调用一个执行函数conference_thread_run,内部有一个while循环去处理会议成员之间的通信数据包。
2)视频会议会创建一个特别的视频线程launch_conference_video_thread(conference_obj_t *conference);,然后调用执行函数conference_video_thread_run,并修改会议对象视频状态conference->video_running = 1;。该函数内部有一个while循环,会一直通过switch_core_session_read_video_frame(session, &vid_frame, SWITCH_IO_FLAG_NONE, 0);函数读取每个vid_floor_hold成员的视频帧vid_frame,根据一个for循环遍历所有的成员并通过switch_core_session_write_video_frame(imember->session, vid_frame, SWITCH_IO_FLAG_NONE, 0);函数将该vid_frame转发给所有成员。
3)两个会议成员之间的视频转发流程

四、1.6版本通过relate api设置成员之间的联系,使一个成员可以绑定看另一个成员的视频

上一篇下一篇

猜你喜欢

热点阅读