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)。