本文主要阐述如何运行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大佬的文章进行搭建的,参考文章如下:
首先需要安装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 = 100
LOOPBACK_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开发更复杂的功能。