本文主要阐述如何运行webRTC的官方入门示例demo,并简单搭建本地局域网服务器用于测试,可以使得两个手机端可以进行视频通话,感受webRTC的核心功能。

一、背景

1、webRTC的官方APP的demo下载路径如下:

https://github.com/webrtc/apprtc

WebRTC官方demo的主代码库里并不包含Android Studio工程,因此很多开发人员都不知道如何运行Android AppRTCMobile项目。

2、为了方便快速上手,国内知名webRTC大佬Piasy编写了一些Gradle脚本,并把WebRTC官方发布在Bintray的C++代码动态链接库(.so)放了进来,这样就方便安卓开发人员直接下载打开AS就可以编译运行调试。Piasy调整后的webRTC的demo下载路径如下:

https://github.com/HackWebRTC/webrtc/

3、piasy大佬调整后的demo属于全功能性的,可以有多种配置设置等。为了更加方便小白入门上手,本作者在piasy的demo基础上再一步简洁,界面调整,只保留本地回环和呼叫视频通话2个核心功能。本作者调整后的demo下载路径如下:

https://github.com/weekend-y/webRTC_demo_AS

二、我的开发环境

1、Androidstudio版本:4.1.1

2、ndk版本:r17c

3、Ubuntu系统:Ubuntu18.04.6(用于搭建本地服务器)

三、搭建本地局域网服务器

两个手机端利用webRTC进行视频通话,还需要有中间的服务端的。基于简单考虑,我们只考虑搭建本地局域网的方式来进行测试。本作者是使用Ubuntu系统来搭建的。

搭建过程也是基于piasy大佬的文章进行搭建的,参考文章如下:

开箱即用的 WebRTC 开发环境

首先需要安装docker,在Ubuntu系统上一键安装命令:

sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

如果网络访问不友好,也可以使用国内 daocloud 一键安装命令:

sudo curl -sSL https://get.daocloud.io/docker | sh

安装好之后,pull 镜像:

sudo docker pull piasy/apprtc-server

镜像拉成功后,还需要这个service的配置文件,可以直接使用我下面的这个内容,将内容拷贝复制到一个文件,并将文件命名为constants.py,并放到某个文件夹下:

# Copyright 2015 Google Inc. All Rights Reserved."""AppRTC Constants.
This module contains the constants used in AppRTC Python modules.
"""
import os# Deprecated domains which we should to redirect to REDIRECT_URL.
REDIRECT_DOMAINS =  ['apprtc.appspot.com', 'apprtc.webrtc.org', 'www.appr.tc'
]
# URL which we should redirect to if matching in REDIRECT_DOMAINS.
REDIRECT_URL = 'https://appr.tc'ROOM_MEMCACHE_EXPIRATION_SEC = 60 * 60 * 24
MEMCACHE_RETRY_LIMIT = 100LOOPBACK_CLIENT_ID = 'LOOPBACK_CLIENT_ID'# Turn/Stun server override. This allows AppRTC to connect to turn servers
# directly rather than retrieving them from an ICE server provider.
ICE_SERVER_OVERRIDE = None
# Enable by uncomment below and comment out above, then specify turn and stun
# ICE_SERVER_OVERRIDE  = [
#   {
#     "urls": [
#       "turn:hostname/IpToTurnServer:19305?transport=udp",
#       "turn:hostname/IpToTurnServer:19305?transport=tcp"
#     ],
#     "username": "TurnServerUsername",
#     "credential": "TurnServerCredentials"
#   },
#   {
#     "urls": [
#       "stun:hostname/IpToStunServer:19302"
#     ]
#   }
# ]ICE_SERVER_BASE_URL = 'http://SERVER_PUBLIC_IP:3033'
ICE_SERVER_URL_TEMPLATE = '%s/iceconfig?key=%s'
ICE_SERVER_API_KEY = os.environ.get('ICE_SERVER_API_KEY')# Dictionary keys in the collider instance info constant.
WSS_INSTANCE_HOST_KEY = 'host_port_pair'
WSS_INSTANCE_NAME_KEY = 'vm_name'
WSS_INSTANCE_ZONE_KEY = 'zone'
WSS_INSTANCES = [{WSS_INSTANCE_HOST_KEY: 'SERVER_PUBLIC_IP:8089',WSS_INSTANCE_NAME_KEY: 'wsserver-std',WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
}]WSS_HOST_PORT_PAIRS = [ins[WSS_INSTANCE_HOST_KEY] for ins in WSS_INSTANCES]# memcache key for the active collider host.
WSS_HOST_ACTIVE_HOST_KEY = 'wss_host_active_host'# Dictionary keys in the collider probing result.
WSS_HOST_IS_UP_KEY = 'is_up'
WSS_HOST_STATUS_CODE_KEY = 'status_code'
WSS_HOST_ERROR_MESSAGE_KEY = 'error_message'RESPONSE_ERROR = 'ERROR'
RESPONSE_ROOM_FULL = 'FULL'
RESPONSE_UNKNOWN_ROOM = 'UNKNOWN_ROOM'
RESPONSE_UNKNOWN_CLIENT = 'UNKNOWN_CLIENT'
RESPONSE_DUPLICATE_CLIENT = 'DUPLICATE_CLIENT'
RESPONSE_SUCCESS = 'SUCCESS'
RESPONSE_INVALID_REQUEST = 'INVALID_REQUEST'IS_DEV_SERVER = os.environ.get('APPLICATION_ID', '').startswith('dev')BIGQUERY_URL = 'https://www.googleapis.com/auth/bigquery'# Dataset used in production.
BIGQUERY_DATASET_PROD = 'prod'# Dataset used when running locally.
BIGQUERY_DATASET_LOCAL = 'dev'# BigQuery table within the dataset.
BIGQUERY_TABLE = 'analytics'

比如最终存放路径是:/xxx/xxx/constants.py

接下来就是运行这个服务,命令如下,其中需要自己修改constants.py的路径以及Ubuntu电脑的本地局域网的ip地址:

sudo docker run --rm \
-p 8080:8080 -p 8089:8089 -p 3478:3478 -p 3478:3478/udp -p 3033:3033 \
--expose=59000-65000 \
-e PUBLIC_IP=192.168.0.103 \
-v /xxx/xxx/constants.py:/apprtc_configs \
-t -i piasy/apprtc-server

运行截图如下:

到这里,用于测试视频通话的服务就运行起来了。

四、运行demo

下载本作者demo后,使用androidstudio打开工程,sync并编译完成:

demo中有一个地方需要自己修改,就是服务端的ip地址,需要将ip地址修改为上述搭建好服务的Ubuntu系统电脑的局域网ip地址,比如我的Ubuntu电脑,本地局域网ip地址是192.168.0.103,那么需要修改下面这个地方:

WebRTC_mydemo\app\src\main\res\values\strings.xml文件下的:

修改为自己的服务器的ip地址,然后编译,并运行到自己的手机上验证:

APP运行后如下:

为了验证本地服务器,以及整个联网流程是否正常,可以先点击下方的"LOOPBACK"按钮,进行本地回环测试,也就是自己手机和自己手机进行视频通话。首先需要手机和服务器在同一个局域网内,比如连接同一个wifi。若整个联网流程没问题,那么就会能够成功进入视频通话界面,同时看到自己的预览界面和对方的预览界面都是自己手机摄像头的画面。

若上一步没有问题,那么就可以测试两个手机的视频通话。

两部手机都安装demo APP,然后都连接与电脑同一个wifi,确保在同一个局域网下。然后在上方的ROOM id中输入同一个房间号比如1122,接着两部手机都点击下发的"CALL"按钮,进行呼叫和接通双方,这样两部手机之间就可以进行视频通话了。

至此,webRTC的第一个demo就成功运行了,并基于这个demo,可以进行二次开发,使用webRTC开发更复杂的功能。

webRTC入门示例demo相关推荐

  1. ADO.NET Entity Framework 入门示例向导(附Demo程序下载)

    ADO.NET Entity Framework 入门示例向导(附Demo程序下载) ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架, ...

  2. webrtc入门:14.pion webrtc中Data Channels示例

    Data Channels 在pion webrtc 中有非常多的示例,Data Channels 就是其中的一个,当我们第一次打开pion webrtc的示例时,可能会有点不知所措,不知道他要让我们 ...

  3. Spring MVC 入门示例讲解

    在本例中,我们将使用Spring MVC框架构建一个入门级web应用程序.Spring MVC 是Spring框架最重要的的模块之一.它以强大的Spring IoC容器为基础,并充分利用容器的特性来简 ...

  4. JVM插桩之一:JVM字节码增强技术介绍及入门示例

    字节码增强技术:AOP技术其实就是字节码增强技术,JVM提供的动态代理追根究底也是字节码增强技术. 目的:在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修 ...

  5. SpringMVC 入门示例讲解

    首先要了解什么是MVC,MVC全称是Model View Controller,是模型(Model)-视图(View)和控制器(Controller)的缩写,一种软件设计典范,用一种业务逻辑·.数据. ...

  6. ADO.NET Entity Framework 入门示例

    ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架,它使开发人员可以通过对象模型(而不是逻辑/关系数据模型)专注于数据.实体框架Entit ...

  7. Camunda入门(四) - 流程应用(支付流程)入门示例

    参考文章:Camunda入门(四) - 流程应用(支付流程)入门示例_罗小爬EX的博客-CSDN博客_camunda入门 1. 支付流程 - 场景设定 为了快速上手Camunda,结合Camunda官 ...

  8. Android WebRTC语音视频通话demo

    Android WebRTC简介 https://blog.csdn.net/Charon_Chui/article/details/80510945?utm_term=%E6%89%8B%E6%9C ...

  9. kettle 笛卡尔_Kettle-Spoon入门示例

    Spoon 是Kettle的设计调试工具 1.           微软ETL与Java 开源Kettle做下对比 微软Integration Services 项目 测试(仅2008版做比较,更高版 ...

最新文章

  1. oracle数据库导出灰色_oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)...
  2. 使用JustDecompile修改程序集
  3. vc获取n卡编号_电脑入门知识:通过显卡型号中字母和数字判断显卡性能
  4. oracle 9i sql_id,Oracle9i增添 wm_concat函数(转)
  5. 能测试快充真假的软件,苹果iOS 12可自行测试真假快充:山寨充电器将被洗牌
  6. [POJ3252]Round Number(数位dp)
  7. Object.prototype的成员介绍
  8. jsf入门实例_JSF错误消息示例教程
  9. HTTP、HTTP2、HTTPS、SPDY等的理解及在spring-boot中的使用
  10. System.Timers.Timer 与 System.Threading.Timer 小间隔
  11. 使用Roberts算子进行图像分割(Matlab自编程实现)
  12. 最全的芯片封装技术详细介绍(珍藏版)
  13. Hexo中yilia主题使用问题总结
  14. GoogleTest系列:TEST_P的基本用法
  15. 广工Anyview数据结构2021-C语言版--第一章
  16. 以太网MII接口类型大全 MII、RMII、SMII、SSMII、SSSMII、GMII、RGMII、SGMII、TBI、RTBI、XGMII、XAUI、XL、RXAUI
  17. Python .csv转Excle数据(csv数据为空格分割)
  18. 用Spring Boot开发API请求详解--API开发
  19. 海关179对接微信/支付宝/通联支付及报关
  20. 《移动软件开发》实验1:第一个微信小程序 实验报告

热门文章

  1. SLM7.1SR1SP05 配置(configuration guide+ link help) - 02 overview啥也没有不用看了
  2. Python根据离散概率分布采样
  3. PCB设计3W规则、20H原则、五五规则
  4. 优秀C/C++源代码网站
  5. 用Python编写成绩管理分析系统(故事升级版)
  6. 优盘插入组装电脑时显示驱动器可能已损坏要检查并修复驱动器请问如何才能修复??
  7. AutoCAD绘制齿轮泵装配图
  8. 【算法面试题】带环链表之灵魂三问!
  9. cdo 发送html,vba调用cdo发送邮件(qq邮箱)
  10. 生成唯一订单号 工具类