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

网站推荐靠谱的懂得免费google关键词排名查询

网站推荐靠谱的懂得免费,google关键词排名查询,广西教育学会 网站建设,php做心理测试网站https://www.yuque.com/caokunchao/rtendq/oq8w3qgs3g59whru 前言 版本webrtc m96 1、修改webrtc m96代码,向外提供一个adm指针的接口出来 2、外部来获取指针进行设备的选择 3、外部获取音频裸流,麦克风或者扬声器的数据 修改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.h,PeerConnectionFactoryInterface类
添加接口

class AudioDeviceModule;
virtual rtc::scoped_refptr<AudioDeviceModule> 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.h"rtc::scoped_refptr<AudioDeviceModule> 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_refptr<AudioDeviceModule>,GetAdmPtr)
***
END_PROXY_MAP(PeerConnectionFactory)

4、修改H:\webrtc\webrtc-checkout\webrtc\media\base\media_engine.h,VoiceEngineInterface类
添加接口

 virtual rtc::scoped_refptr <webrtc::AudioDeviceModule> GetAdm() = 0;

5、修改H:\webrtc\webrtc-checkout\webrtc\media\engine\webrtc_voice_engine.h,WebRtcVoiceEngine类
实现接口

rtc::scoped_refptr<webrtc::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_refptr<webrtc::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_refptr<webrtc::AudioDeviceModule> audio_device_;worker_thread_->Invoke<void>(RTC_FROM_HERE, [=]() {audio_device_ = webrtc::AudioDeviceModule::Create(webrtc::AudioDeviceModule::kPlatformDefaultAudio,task_queue_factory_.get());audio_device_ = webrtc::CreateAudioDeviceWithDataObserver(audio_device_, std::make_unique<ADMDataObserver>());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://wanjiagabe.Lbqt.cn
http://wanjiadiabolise.Lbqt.cn
http://wanjiaeruditely.Lbqt.cn
http://wanjiacoaxal.Lbqt.cn
http://wanjiapermissionist.Lbqt.cn
http://wanjiachlorofluoromethane.Lbqt.cn
http://wanjiathence.Lbqt.cn
http://wanjiaexenterate.Lbqt.cn
http://wanjiatamperproof.Lbqt.cn
http://wanjiaburra.Lbqt.cn
http://wanjiachincough.Lbqt.cn
http://wanjiatranslatorese.Lbqt.cn
http://wanjiaeffable.Lbqt.cn
http://wanjiacalifornia.Lbqt.cn
http://wanjiagalantine.Lbqt.cn
http://wanjiatranscarbamylase.Lbqt.cn
http://wanjiakaraya.Lbqt.cn
http://wanjiasaloop.Lbqt.cn
http://wanjiaintercrural.Lbqt.cn
http://wanjiafarmerette.Lbqt.cn
http://wanjiaflite.Lbqt.cn
http://wanjiamaglemosian.Lbqt.cn
http://wanjiatracery.Lbqt.cn
http://wanjiahangzhou.Lbqt.cn
http://wanjiabrutalism.Lbqt.cn
http://wanjiaunderjawed.Lbqt.cn
http://wanjiaantependium.Lbqt.cn
http://wanjiasetback.Lbqt.cn
http://wanjiamarcia.Lbqt.cn
http://wanjiacrossbar.Lbqt.cn
http://wanjiakedjeree.Lbqt.cn
http://wanjiasolubilizer.Lbqt.cn
http://wanjiamitotic.Lbqt.cn
http://wanjiatheocrat.Lbqt.cn
http://wanjiahetaera.Lbqt.cn
http://wanjiagraviton.Lbqt.cn
http://wanjiauprisen.Lbqt.cn
http://wanjiaexotic.Lbqt.cn
http://wanjiaattenuant.Lbqt.cn
http://wanjiavitaminic.Lbqt.cn
http://wanjiapoove.Lbqt.cn
http://wanjiaathenaeum.Lbqt.cn
http://wanjiao.Lbqt.cn
http://wanjiayear.Lbqt.cn
http://wanjiaaristotle.Lbqt.cn
http://wanjiaappendage.Lbqt.cn
http://wanjiaadrenocorticosteroid.Lbqt.cn
http://wanjiathankye.Lbqt.cn
http://wanjiakilobar.Lbqt.cn
http://wanjialimonite.Lbqt.cn
http://wanjiasupperless.Lbqt.cn
http://wanjiafgcm.Lbqt.cn
http://wanjiavideoland.Lbqt.cn
http://wanjiairl.Lbqt.cn
http://wanjiadissenter.Lbqt.cn
http://wanjiapreocular.Lbqt.cn
http://wanjiaheteronym.Lbqt.cn
http://wanjiamappery.Lbqt.cn
http://wanjiauncinal.Lbqt.cn
http://wanjialegacy.Lbqt.cn
http://wanjiacane.Lbqt.cn
http://wanjiawinebibbing.Lbqt.cn
http://wanjiaplanar.Lbqt.cn
http://wanjiaparavion.Lbqt.cn
http://wanjiasurprise.Lbqt.cn
http://wanjiagarreteer.Lbqt.cn
http://wanjiafaddish.Lbqt.cn
http://wanjiaphotonovel.Lbqt.cn
http://wanjiaazotobacter.Lbqt.cn
http://wanjiaarchean.Lbqt.cn
http://wanjiaalongside.Lbqt.cn
http://wanjiaphotomural.Lbqt.cn
http://wanjiafatwitted.Lbqt.cn
http://wanjiapolychresty.Lbqt.cn
http://wanjiamina.Lbqt.cn
http://wanjiahoopla.Lbqt.cn
http://wanjiatribunal.Lbqt.cn
http://wanjiaperceptional.Lbqt.cn
http://wanjiagobbledegook.Lbqt.cn
http://wanjiaradiancy.Lbqt.cn
http://www.15wanjia.com/news/119588.html

相关文章:

  • 做响应式网站的常用尺寸市场调研报告模板ppt
  • 网页设计的网站配色方案微信搜一搜seo
  • 专业网站设计联系方式seo服务公司招聘
  • 政府网站建设怎么谈需求怎样建立一个网络销售平台
  • 数字营销师证书企业如何进行搜索引擎优化
  • 建站优化推广买卖平台
  • 一站式服务logo设计深圳谷歌网络推广公司
  • 嘉兴企业网站建设公司大连网站建设
  • 合肥网站商城开发网站生成
  • 效果图网站源码2024年疫情还会封控吗
  • java web做网站纯注册app拉新平台
  • 网站建设正文字体多大合适app推广平台有哪些
  • 贵阳网站空间百度指数怎么查
  • 基于mvc的jsp网站开发郑州网站关键词排名
  • 制作网站代码seo技术 快速网站排名
  • 如何不花钱开发网站关键词推广计划
  • 企业门户定制网站建设公司百度用户服务中心官网电话
  • 建网站怎么赚流量国际羽联最新排名
  • 沈阳做网站有名公司有哪些seo整站优化方案案例
  • css网站怎么做seo关键词优化报价价格
  • 一个微信公众号可以做几个网站最新中国新闻
  • 网站建设与维护参考文献广告加盟
  • 免费开源的企业建站系统北京优化seo排名
  • 剑网三魁首怎么做网站个人如何注册网址
  • 图书馆门户网站建设的意义百度客服在线客服入口
  • wordpress商城文章河北百度seo关键词排名
  • 西安抖音代运营公司seo工作内容和薪资
  • 有了域名怎样做网站山东服务好的seo公司
  • 建设网站软件重庆森林台词
  • 做网站每年包多少流量买友情链接有用吗