一、基本概念
(1)Sofia-sip:FreeSwitch使用了比较成熟的开源的SIP协议栈。
(2)EndPoint:互联协议接口模块。如SIP、H232.
(3)mod_Sofia:实现了SIP中的注册服务器、重定向服务器、媒体服务器等各种功能。他的定位是一个B2BUA,不能实现代理服务器。
(4)SIP profile:在mod_sofia中,SIPprofile相当于SIPUA,通过不同的配置参数配置一个UA的行为.每个SIP profile可以监听不同的IP地址和端口。
(5)GetWay:一个SIPprofile中可以有多个getway,可以直译为网关。用于定义一个远端服务器,使得FreeSwitch可以与其他服务器通信.FreeSwitch可以作为一个SIP客户端向远端服务器注册.
(6)本地SIP用户:FreeSwitch可以作为注册服务器,其他SIP客户端就可以向他注册。FreeSwitch就可以对配置用户目录中的注册信息中的用户进行鉴权。
(7)来话去话不是本地的,双方通话就需要通过中继方式。
从member->session->channel 拿 audio数据,做重采样处理,switch_buffer_write 写入member->audio_buffer, 数据会在conference当前会议线程来mux。
整体结构:
fs:mod_sip-sip, mod_conference.c--conference_video.c 先看构架,分层,module重点文件(freeswitch先知道的mod是控制层,sofia调用协议栈,其他介绍全没用,然后搜code具体函数有用); 看code,最后搜网页。
switch_core_state_machine.c switch_core_session_run
CS_INIT,CS_ROUTING,CS_EXECUTE
conference_video_muxing_write_thread_run 单独线程。
conference_video.c 处理业务逻辑,layout(zoom,x,y,type),配置codec.放入codec,取出放入queue
conference_video_write_frame感觉是放入codec.再哪里??最终感觉调用switch_io_event_hook_video_write_frame_video_write_frame_set?
mod_conference: list conference,conference add ,remove member .会议创建,删除等
发送,接收没找到,应该再mod_conference.
conference 比sip复杂一些。这部分得看书,好像涉及什么call leg, layer,canvas等概念
,,,,,,,,,,,,,,,,
会议就两个文件:conference_video.c:conference_video_muxing_write_thread_run
mod_conference.c //会议创建
conference_new {
//init,attach,mux
conference_video_init_canvas(conference, vlayout, &canvas);
//canvas is member?
conference_video_attach_canvas(conference, canvas, 0);
conference_video_launch_muxing_thread(conference, canvas, 0);
switch_mutex_unlock(conference->canvas_mutex);
}
业务逻辑:layout,混屏(每个流img根据坐标放入自己的区域),缩放每没看内容。codec 有。
输入是都是通过 switch_core_session_receive_msg (每个janus rtp),输出是每个member 的mux buffer.发给client具体都是调用switch_core
mod_sofia.c 控制init,sofia_read_video_frame,sofia_read_read_frame 读写控制
sofia.c 协议控制中心: invite,info,option....
//sip_payload 来自协议栈libssofia-si
r_sdp = sip->sip_payload->pl_data;
libsip(sofia-sip) 协议栈
,,,,,,,,,,,,,,,,
sofia_msg_thread_run 循环取消息
sofia_queue_message 循环放入消息
,,,,
mod_sofia,sofia.c-------to do
mod_sofia--调用libsip协议栈.信令通了.流媒体就是发relay流,conference合流,janus callback接收
画流程图.
,,,
switch_core_state_machine.c--状态机函数
,,,,,,,,,,,,,,,,,,,,
freeswitch主要是sip server. forward request.voip转发.
mcu只是一个非主要功能输入,业务处理合流or bridge,输出
num_message
switch_rtp_write_frame
janus,manager,freeswitch
mod_sofia模块, conference
mod_sofia.c 是应用层;G:aqy-sourcecodefreeswitch-1.8libssofia-sip 是sip协议栈---soa_static_generate_offer,
sofia.c:static void our_sofia_event_callbackjanus是媒体服务器---freeswitch配置 conference 合流---回到各自的relay 服务器,怎么发给用户呢?
有合流,缩放,layout再mod_video。codec再哪里呢?
conference_video.c



