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

手机建网站模板太原建站模板系统

手机建网站模板,太原建站模板系统,昆山建设局网站查预售,自己主机做多个网站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.sadfv.cn/news/127214/

相关文章:

  • 建设网站有哪些星巴克网络营销案例分析
  • 关于网站建设管理的通知怎么做刷东西网站
  • 网站动态图是怎么做的找人做网站注意什么问题
  • 网站建设便宜网站后台管理系统进不去怎么办
  • 如何在百度网站收录提交入口家政网站建设方案
  • 免费网站制作器wordpress编辑模板标题
  • 网页给别人做的 网站后续收费吗wordpress文章静态化
  • 大学生网站策划书说明书好看的 网站后台模板
  • 网站建设与维护 书网络运维工程师需要具备什么证书
  • 做旅游网站的数据怎么来互联网网站开发的未来方向
  • ie建设企业网站进去无法显示汕头网站seo外包
  • 质量好网站建设价格客户关系管理定义
  • 从0到建网站辽源网站制作
  • 网络公司网站设计方案ppt河南省住建厅网站豫建设标
  • 网站建设寮步cms免费建站系统
  • 江苏徐州网站建设新浪云wordpress教程
  • 建设科技网络网站的意义和目的营销网站的问题与优势
  • 花钱做网站注意什么做h5的网站的区别
  • 电子商务网站建设课后习题网站二级目录建站
  • 网站开发与设计实验报告总结北京企业建网站定制价格
  • 网站访问量大公司部门职位名称大全
  • 郑州五合一网站建设wordpress分类目录打不开
  • 树形菜单网站广告模板app
  • 深圳自助网站建设网站建设市场多大
  • 网站哪类业务建设投入会带来间接收益微信小程序注册要钱吗
  • 有什么网站做图片宣传海报宁波市建设网
  • 东莞网站建设制作公司仙游网站建设
  • 济南地产行业网站开发wordpress问题
  • 东莞企业为什么网站建设cms监控手机客户端
  • 小说网站开发教程江西最新消息