当前位置: 首页 > news >正文

南京建设集团网站企业模板网站

南京建设集团网站,企业模板网站,肃宁县网站建设公司,wordpress做的网站效果https://www.yuque.com/caokunchao/rtendq/oq8w3qgs3g59whru 前言 版本webrtc m96 1、修改webrtc m96代码#xff0c;向外提供一个adm指针的接口出来 2、外部来获取指针进行设备的选择 3、外部获取音频裸流#xff0c;麦克风或者扬声器的数据 修改webrtc代码 1、修改H:\w…https://www.yuque.com/caokunchao/rtendq/oq8w3qgs3g59whru 前言 版本webrtc m96 1、修改webrtc m96代码向外提供一个adm指针的接口出来 2、外部来获取指针进行设备的选择 3、外部获取音频裸流麦克风或者扬声器的数据 修改webrtc代码 1、修改H:\webrtc\webrtc-checkout\webrtc\api\peer_connection_interface.hPeerConnectionFactoryInterface类 添加接口 class AudioDeviceModule; virtual rtc::scoped_refptrAudioDeviceModule GetAdmPtr() 0;2、修改H:\webrtc\webrtc-checkout\webrtc\pc\peer_connection_factory.h PeerConnectionFactory类该类继承PeerConnectionFactoryInterface实现GetAdmPtr()接口 #include modules/audio_device/include/audio_device.h #include media/base/media_engine.hrtc::scoped_refptrAudioDeviceModule GetAdmPtr() override {return context_-channel_manager()-media_engine()-voice().GetAdm();}3、修改代理H:\webrtc\webrtc-checkout\webrtc\pc\peer_connection_factory_proxy.h #include modules/audio_device/include/audio_device.h在 BEGIN_PROXY_MAP(PeerConnectionFactory) 下面添加代理方法 *** PROXY_METHOD0(rtc::scoped_refptrAudioDeviceModule,GetAdmPtr) *** END_PROXY_MAP(PeerConnectionFactory)4、修改H:\webrtc\webrtc-checkout\webrtc\media\base\media_engine.hVoiceEngineInterface类 添加接口 virtual rtc::scoped_refptr webrtc::AudioDeviceModule GetAdm() 0;5、修改H:\webrtc\webrtc-checkout\webrtc\media\engine\webrtc_voice_engine.hWebRtcVoiceEngine类 实现接口 rtc::scoped_refptrwebrtc::AudioDeviceModule GetAdm() override { return adm_; }外部切换设备 看我的krtcsdk源码 void MicImpl::Start() {RTC_LOG(LS_INFO) MicImpl Start call;KRTCGlobal::Instance()-worker_thread()-PostTask(webrtc::ToQueuedTask([]() {RTC_LOG(LS_INFO) MicImpl Start PostTask;KRTCError err KRTCError::kNoErr;do {// 1. 如果麦克风已经启动采集直接停止if (has_start_) {RTC_LOG(LS_WARNING) mic already start, mic_id: mic_id_;break;}// 2. 直接从webrtc获取adm模块指针rtc::scoped_refptrwebrtc::AudioDeviceModule audio_device KRTCGlobal::Instance()-push_peer_connection_factory()-GetAdmPtr();// 3. 检查系统是否存在麦克风设备int total audio_device-RecordingDevices();if (total 0) {RTC_LOG(LS_WARNING) no audio device;err KRTCError::kNoAudioDeviceErr;break;}// 4. 检查关联的mic_id是否能够在系统设备中找到int device_index -1;for (int i 0; i total; i) {char name[128];char guid[128];audio_device-RecordingDeviceName(i, name, guid);if (0 strcmp(guid, mic_id_.c_str())) {device_index i;break;}}if (device_index -1) {RTC_LOG(LS_WARNING) audio device not found, mic_id: mic_id_;err KRTCError::kAudioNotFoundErr;break;}// 5. 设置启用的麦克风设备if (audio_device-SetRecordingDevice(device_index)) {RTC_LOG(LS_WARNING) SetRecordingDevice failed, mic_id: mic_id_;err KRTCError::kAudioSetRecordingDeviceErr;break;}// 6. 设置为立体声采集audio_device-SetStereoRecording(true);// 7. 初始化麦克风if (audio_device-InitRecording() || !audio_device-RecordingIsInitialized()) {RTC_LOG(LS_WARNING) InitRecording failed, mic_id: mic_id_;err KRTCError::kAudioInitRecordingErr;break;}bool ok false;audio_device-PlayoutIsAvailable(ok);if (!ok) {RTC_LOG(LS_WARNING) PlayoutIsAvailable failed, mic_id: mic_id_;err KRTCError::kAudioInitRecordingErr;break;}int32_t ret audio_device-InitPlayout();if (audio_device-StartPlayout()) {RTC_LOG(LS_WARNING) StartPlayout failed!!!;err KRTCError::kAudioStartRecordingErr;break;}// 8. 启动麦克风采集if (audio_device-StartRecording()) {RTC_LOG(LS_WARNING) StartRecording failed, mic_id: mic_id_;err KRTCError::kAudioStartRecordingErr;break;}has_start_ true;} while (0);if (err KRTCError::kNoErr) {if (KRTCGlobal::Instance()-engine_observer()) {KRTCGlobal::Instance()-engine_observer()-OnAudioSourceSuccess();}}else {if (KRTCGlobal::Instance()-engine_observer()) {KRTCGlobal::Instance()-engine_observer()-OnAudioSourceFailed(err);}}})); }这里音频audio_device-StartRecording之前还必须加上audio_device-StartPlayout()否则会报错 (audio_device_core_win.cc:2351): Playout must be started before recording when using the built-in AEC 外部获取音频裸流 1、添加ADMDataObserver继承自webrtc::AudioDeviceDataObserver class ADMDataObserver : public webrtc::AudioDeviceDataObserver { private:virtual void OnCaptureData(const void* audio_samples,const size_t num_samples,const size_t bytes_per_sample,const size_t num_channels,const uint32_t samples_per_sec) override {}virtual void OnRenderData(const void* audio_samples,const size_t num_samples,const size_t bytes_per_sample,const size_t num_channels,const uint32_t samples_per_sec) override {}};OnCaptureData 音频采集麦克风数据OnRenderData需要播放的扬声器数据。。 2、创建webrtc::AudioDeviceModule rtc::scoped_refptrwebrtc::AudioDeviceModule audio_device_;worker_thread_-Invokevoid(RTC_FROM_HERE, []() {audio_device_ webrtc::AudioDeviceModule::Create(webrtc::AudioDeviceModule::kPlatformDefaultAudio,task_queue_factory_.get());audio_device_ webrtc::CreateAudioDeviceWithDataObserver(audio_device_, std::make_uniqueADMDataObserver());audio_device_-Init();});3、将audio_device_传入到webrtc::CreatePeerConnectionFactory即可。。 webrtc::CreatePeerConnectionFactory(network_thread_.get(), /* network_thread */worker_thread_.get(), /* worker_thread */signaling_thread_.get(), /* signaling_thread */audio_device_, /* default_adm */******参考资料 https://blog.csdn.net/qq_22658119/article/details/117664188 https://blog.csdn.net/weixin_39343678/article/details/99948451
http://www.tj-hxxt.cn/news/135849.html

相关文章:

  • 网站建设第三方广州企业网站哪家好
  • 网站导航菜单设计湛江wx
  • 网站被黑应该怎么做响应式模板
  • 营销型网站建设思路帝国CMS做的淘客网站
  • 网站自己做推广微信怎么做网站的动图
  • 网站短时间怎么做权重外贸网站建设步骤
  • 网站对公司的作用是什么意思网络营销培训学院
  • 网站照片加水印门户网站建设会议纪要
  • 用asp做的网站如何发布西安网站seo技术
  • 展馆的科普网站建设上海装修公司排名前20
  • 网站建设的英语济南网站搭建公司
  • 怎么做免流网站创立公司最低多少钱
  • 江苏营销型网站建设沈阳黄页88企业名录
  • 即墨做网站优化大师网站
  • 工业设计专业介绍企业网站优化报告
  • 谷歌浏览器 安卓下载啥叫优化
  • 律师行业协会网站建设网站认证收费吗
  • 给领导发网站建设可行性方案邮件怎么写福州百度seo
  • 门户网站建设方案公司科技设计网站建设
  • 做设计素材网站有哪些网站开发意见书
  • 微商城网站建设信息网站开发神书
  • 注册网站的软件公司注册资金可以随便填吗
  • 企业网站制作找什么人旅游app用户人群分析
  • 恋月wordpress珠海关键词优化平台
  • 沈阳网站建设开发维护九里徐州网站开发
  • 现在最好的免费的建站平台长沙公司网站设计报价
  • 网贷网站建设仁寿县建设局网站
  • 如何建设一个购物网站建wap网站
  • jsp做网站用什么封装字符串遂宁移动网站建设
  • 如何创建网站?影楼ps后期修片的教程