freeswitch支持录音和录像功能,录音功能主要是通过mod_sndfile、mod_shout等模块实现的,录像模块是通过mod_mp4v2和mod_av模块实现。
mod_sndfile录制wav
mod_shout录制mp3
mod_mp4v2录制MP4文件
mod_av是在1.6.x版本中提供的新模块
把mod_av放到了1.5.x的版本中,利用该模块实现了播放视频文件、连接摄像头等功能。录像功能利用mod_mp4v2模块实现,并发可以达到几十路vga同时录像,高并发下音视频比较同步,耗费cpu也不高,瓶颈主要体现在带宽上。
Freeswitch 录音之内核
一、注册回调函数
应用程序调用switch_ivr_record_session->
switch_core_media_bug_add向fs内核注册mediabug接口回调函数record_callback监听流媒体(读写模式)
二、内核调用switch_core_session_read_frame获取来话语音
1、调用endpoint的read_frame函数获取endpoint的语音。
2、调用media bug的回调函数record_callback通知应用程序获取语音数据。
3、应用程序如果设置通道变量RECORD_USE_THREAD为true,内核开启线程录音,内核会把录音数据缓冲到thread_buffer,再通过线程来读取缓冲写文件。否则直接写文件。(如果录音丢数据,可采用线程方式录音)
4、内核写文件
内核为每个录音缓冲池pre_buffer,将需要写入文件的数据写入到此缓冲内,当缓冲数据大小大于 SWITCH_DEFAULT_FILE_BUFFER_LEN = 65536时,内核从缓冲池中获取数据写文件。应用程序可以通过设置通道变量enable_file_write_buffering来设置 SWITCH_DEFAULT_FILE_BUFFER_LEN的大小。
三、内核调用switch_core_session_write_frame写入语音
1、调用endpoint的write_frame函数给endpoint发送语音
2、调用media bug的回调函数record_callback通知应用程序获取语音数据
3、同步骤二(3)。
freeswitch 接通后再录音:
用法:
<action application="set" data="media_bug_answer_req=true"/>
http://blog.163.com/lorraine_gu/blog/static/24348001020167385347309?ignoreua