热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【webrtc】demo测试peerconnection_server和peerconnection_client

文章目录前言启动服务器启动客户端1启动客户端2注意事项总结技术参考前言参考vs2019下载编译WebRTC最新源码编译完成后进入webrtc-checkout\src\out\p


文章目录

    • 前言
    • 启动服务器
    • 启动客户端1
    • 启动客户端2
    • 注意事项
    • 总结
    • 技术参考



imge




前言

参考 vs2019 下载编译 WebRTC 最新源码
编译完成后进入webrtc-checkout\src\out\project 目录,编译好的库文件和exe都在这个目录下面。


  • peerconnection_server.exe
  • peerconnection_client.exe

启动服务器

双击 peerconnection_server.exe 启动服务器

控制台显示以下内容表示服务器启动成功

(field_trial.cc:140): Setting field trial string:
Server listening on port 8888

也可以指定端口号启动,默认端口号:8888

./peerconnection_server --port=8888

启动客户端1

双击 peerconnection_client.exe 启动客户端1,默认server是本地地址。

**注意事项:**默认启动后是 localhost ,不知道为什么我必须改成 127.0.0.1 才可以连接服务器成功。

翻阅资料得出结果是因为 windows 把 localhost 解析为 ipv6 地址 ::1 而不是 127.0.0.1。查了hosts 把ipv6已经屏蔽了,127.0.0.1 localhost 也有,就是不能正常解析。

在这里插入图片描述


启动客户端2

在局域网的另一台电脑启动第二个客户端,填写运行 server 的主机 ip 地址
在这里插入图片描述
为了方便截图,我将两个客户端都运行再一台主机(需要有两个摄像头设备),一个客户端分配一个摄像头。如果只有一个硬件摄像头,可以安装 obs studio 启动虚拟摄像头作为第二个摄像头。

然后双击用户名进入 p2p 通话

在这里插入图片描述


注意事项

如果 p2p通话时候发生闪退,需要修改以下代码并重新编译

编译webrtc
ninja -C out/project -j 8

webrtc-checkout\src\modules\video_capture\windows\sink_filter_ds.cc

STDMETHODIMP CaptureInputPin::Receive(IMediaSample* media_sample) {//RTC_DCHECK_RUN_ON(&capture_checker_); // 这行代码注释掉&#xff0c;解决 p2p 连接闪退问题CaptureSinkFilter* const filter &#61; static_cast<CaptureSinkFilter*>(Filter());if (flushing_.load(std::memory_order_relaxed))return S_FALSE;if (runtime_error_.load(std::memory_order_relaxed))return VFW_E_RUNTIME_ERROR;if (!capture_thread_id_) {// Make sure we set the thread name only once.capture_thread_id_ &#61; GetCurrentThreadId();rtc::SetCurrentThreadName("webrtc_video_capture");}

sink_filter_ds.cc


总结

如果需要下断点调试则在另一台主机运行 peerconnection_client客户端1&#xff0c;调试主机打开 vs2019 将 peerconnection_client 项目设置为启动项目&#xff0c;F5 启动调试。




技术参考


  1. 本文部分技术点出处&#xff1a;FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发


推荐阅读
  • 本文将详细探讨 Linux 系统中的 netstat 命令,该命令用于查看网络状态和连接情况。通过了解 IP 地址和端口的基本概念,我们将更好地理解如何利用 netstat 命令来监控和管理网络服务。 ... [详细]
  • 本文详细介绍了Linux操作系统中的cp和scp命令,包括它们的基本使用方法、常见选项以及如何通过scp命令安全地在不同主机之间传输文件。 ... [详细]
  • VMware Horizon View 5.0桌面虚拟化部署实践与心得
    在近期的研究中,我花费了大约两天时间成功部署了桌面虚拟化环境,并在此过程中积累了一些宝贵的经验。本文将分享这些经验和部署细节,希望能对同样关注桌面虚拟化的同行有所帮助。 ... [详细]
  • 本文介绍了如何通过扩展 Panel 控件来实现滚动条位置的自动保存和恢复。类似于 Page 的 MaintainScrollPositionOnPostBack 属性,我们将在自定义的 TBPanel 控件中添加相同的功能。 ... [详细]
  • 本文档详细介绍了在 Kubernetes 集群中部署 ETCD 数据库的过程,包括实验环境的准备、ETCD 证书的生成及配置、以及集群的启动与健康检查等关键步骤。 ... [详细]
  • Java EE CDI:解决依赖关系冲突的实例
    在本教程中,我们将探讨如何在Java EE的CDI(上下文和依赖注入)框架中有效解决依赖关系的冲突问题。通过学习如何使用限定符,您将能够为应用程序的不同客户端提供多种接口实现,并确保每个客户端都能正确调用其所需的实现。 ... [详细]
  • Spring Boot 入门指南
    本文介绍了Spring Boot的基本概念及其在现代Java应用程序开发中的作用。Spring Boot旨在简化Spring应用的初始设置和开发过程,通过自动配置和约定优于配置的原则,帮助开发者快速构建基于Spring框架的应用。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中安装MySQL 5.5.37时遇到的启动失败和PID文件问题,并提供了详细的解决方案,包括日志分析、权限检查等步骤。 ... [详细]
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • 本文深入探讨网页游戏的开发流程,涵盖从程序框架设计到具体实现的技术细节,旨在为开发者提供全面的指导。 ... [详细]
  • Webpack中实现环境与代码的有效分离
    本文探讨了如何在Webpack中有效地区分开发与生产环境,并实现代码的合理分离,以提高项目的可维护性和加载性能。 ... [详细]
  • 本文详细介绍了如何在两台运行 Windows Server 2003 的计算机上配置两个 MySQL 实例以实现主从复制。每台计算机分别命名为 Master 和 Slave,确保系统分区及 MySQL 安装路径的正确配置。 ... [详细]
  • 今天发现Mysql的主从数据库没有同步先上Master库:mysqlshowprocesslist;查看下进程是否Sleep太多。发现很正常。showmaster ... [详细]
  • 本文将探讨从ASP.NET 1.1到2.0期间编译系统的重要变革。通过对比两个版本的即时编译模型,我们将揭示2.0版本中引入的新特性和改进之处。 ... [详细]
  • 在使用 Spring Cloud Config 作为配置中心时,若在配置文件中指定了请求路径但未能生效,本文将探讨其原因及解决方案。 ... [详细]
author-avatar
用户r8l5835vd6
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有