linphone mediatreamer simple demo 之 录音
2017-07-04 09:01
405 查看
代码来源于https://github.com/Xianleewu/mediastreamer2-demo
做了一些小修改,以适应新版版本 linphone-sdk-3.11.1
在win32环境下运行通过
本文章仅个人记录用
那么这个msTee是干什么用的呢,找到其源文件,发现有这么句描述
A filter that reads from input and copy to its multiple outputs
配合具体源码:
做了一些小修改,以适应新版版本 linphone-sdk-3.11.1
在win32环境下运行通过
本文章仅个人记录用
#include <stdio.h> #include <mediastreamer2/mediastream.h> #include <mediastreamer2/mscommon.h> #include <mediastreamer2/mssndcard.h> #include <mediastreamer2/msfilerec.h> int main(void) { MSFactory* _factory = NULL; _factory = ms_factory_new_with_voip(); MSFilter *msReader = NULL; MSFilter *msRecorder = NULL; MSFilter *msPlayer = NULL; MSFilter *msTee = NULL; MSTicker *mTicker = NULL; MSSndCard *recoCard = NULL; MSSndCard *playCard = NULL; int sampRate = 44110; int nChannels = 2; ortp_init(); ortp_set_log_level_mask("FAN",ORTP_MESSAGE | ORTP_WARNING | ORTP_ERROR | ORTP_FATAL); ms_init(); recoCard = ms_snd_card_manager_get_default_capture_card(ms_snd_card_manager_get());//获取麦克风 playCard = ms_snd_card_manager_get_default_playback_card(ms_snd_card_manager_get());//获取喇叭 if (!recoCard || !playCard) { ortp_error("can not get an sound card !"); goto end; } /* 初始化四个filter */ msReader = ms_snd_card_create_reader(recoCard); msPlayer = ms_snd_card_create_writer(playCard); msRecorder = ms_filter_new(MS_FILE_REC_ID); msTee = ms_filter_new(MS_TEE_ID); ms_filter_call_method(msReader, MS_FILTER_SET_SAMPLE_RATE, &sampRate); ms_filter_call_method(msReader, MS_FILTER_SET_NCHANNELS, &nChannels); ms_filter_call_method(msPlayer, MS_FILTER_SET_SAMPLE_RATE, &sampRate); ms_filter_call_method(msPlayer, MS_FILTER_SET_NCHANNELS, &nChannels); ms_filter_call_method(msRecorder, MS_FILTER_SET_SAMPLE_RATE, &sampRate); ms_filter_call_method(msRecorder, MS_FILTER_SET_NCHANNELS, &nChannels); ms_filter_call_method(msRecorder, MS_FILE_REC_OPEN, "recorder.wav"); ms_filter_call_method_noarg(msRecorder, MS_FILE_REC_START); /* 开启ticker线程,它将从msReader中读取音频流 */ mTicker = ms_ticker_new(); /* -> 直接播放 麦克风输入-> mstee -> 录制到recorder.wav */ ms_filter_link(msReader, 0, msTee, 0); ms_filter_link(msTee, 0, msRecorder, 0); ms_filter_link(msTee, 1, msPlayer, 0); ms_ticker_attach(mTicker, msReader); //等待msticker 5s,5s后退出程序 ms_sleep(5); ms_ticker_detach(mTicker, msReader); ms_filter_unlink(msReader, 0, msTee, 0); ms_filter_unlink(msTee, 0, msRecorder, 0); ms_filter_unlink(msTee, 1, msPlayer, 0); ms_filter_call_method_noarg(msRecorder, MS_FILE_REC_CLOSE); ms_filter_destroy(msReader); ms_filter_destroy(msRecorder); ms_filter_destroy(msPlayer); ms_filter_destroy(msTee); ortp_message("done"); end: ms_factory_destroy(_factory); return 0; }
那么这个msTee是干什么用的呢,找到其源文件,发现有这么句描述
A filter that reads from input and copy to its multiple outputs
配合具体源码:
static void tee_process(MSFilter *f){ TeeData *d=(TeeData*)f->data; mblk_t *im; int i; while((im=ms_queue_get(f->inputs[0]))!=NULL){ for(i=0;i<f->desc->noutputs;i++){ if (f->outputs[i]!=NULL && !d->muted[i]) ms_queue_put(f->outputs[i],dupmsg(im)); } freemsg(im); } }作用就是将一个输入流复制成多个输出流
相关文章推荐
- linphone mediatreamer simple demo 之 录音
- IM比较SipDroid/IMSDroid/CSipsimple/Linphone/Webrtc
- freeswitch系列三 SIP软电话xlite、linphonec接入kamailio+freeswitch
- Windows Phone Push Notification 原理与Demo
- linphone 分析4 接电话分析
- freepbx的SIP通话客户端X-lite Yate eyeBeam Linphone
- 关于vs2008编译linphone-3.5.2
- Linphone on BlackBerry呼叫xlite报错问题的解决
- linphone内部原理分析
- linphone中h264的 RTP打包(二)
- [Linphone Android]Linphone介绍
- linphone-LinphoneCallLogImpl文件对应的JNI层文件分析
- linphone-LinphoneChatMessageImpl文件对应的JNI层文件分析
- 开源移动端IM比较SipDroid,IMSDroid,CSipsimple,Linphone,webrtc
- [Linphone Android] 应答请求
- Linphone 拨打电话流程
- 基于Linux开源VOIP系统LinPhone[一]
- 2016 9月版本的linphone for android make 不能执行py,pl,sh等脚本问题
- netty simple demo