实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 ·...

110
品和20170417 [email protected] 2017-04-17

Upload: others

Post on 12-Jun-2020

49 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册发发发布布布 20170417

[email protected]

2017-04-17

Page 2: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。
Page 3: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

Contents

1 产产产品品品介介介绍绍绍 1

2 开开开始始始使使使用用用 15

3 Web / JavaScript 25

4 Android 43

5 iOS 63

6 其其其它它它平平平台台台 (Windows, Linux, OS X) 75

7 服服服务务务器器器API 77

8 私私私有有有云云云和和和企企企业业业解解解决决决方方方案案案 97

9 103

i

Page 4: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

ii

Page 5: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

CHAPTER 1

产品介绍

了了了解解解实实实时时时猫猫猫

实实实时时时猫猫猫

• 实时猫提供快速,灵活,高品质的视频通信云技术和解决方案。

• 使用实时猫的通信云产品,在网站和软硬件中快速嵌入实时通信能力。

• 选择实时猫的解决方案服务,打造自有的通信系统和平台。

• 欲了解公司信息,请查看目标 (page 12)。

产产产品品品和和和服服服务务务

WebRTC视视视频频频通通通信信信云云云

公公公有有有云云云 通过SDK连接 WEBRTC (Web Real-Time Communication) 云,轻松嵌入灵活的双向的实时音视频通信功能,管理连接,优化质量。产品支持 PC, Web, Android, iOS, Windows,macOS, Linux平台。

私私私有有有云云云在复杂网络和指定服务器,半小时内部署私有的实时猫WebRTC云。迅速匹配企业业务模式,解决独特需求。

本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

了解更多特点 (page 2)。

解解解决决决方方方案案案

1

Page 6: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

解解解决决决方方方案案案 按需设计、开发、交付有音视频实时通讯功能的本地应用、网页、Web系统、移动App、智能硬件终端和复杂通信服务。

了解更多私有云和企业解决方案 (page 97)。

技技技术术术演演演示示示

访问实时猫 -演示页面试用在线技术演示,产品效果。

WebRTC视频通信云

特特特点点点

云云云功功功能能能

快快快速速速开开开发发发

• SDK使用简单,各平台逻辑一致,样例充足,快速上手

• 文档和高级功能完善,技术支持及时

高高高度度度灵灵灵活活活

• 可控自定的通信逻辑,高度灵活的连接和展示方式

• 支持双人、多人,单向、双向,视频、语音通信

质质质量量量保保保证证证

• 智能接入,智能链路,智能重连,多种手段提高点对点通信质量

• 提供连接测试工具,连接数据分析工具,服务健康状态监控等工具集合

跨跨跨平平平台台台兼兼兼容容容

• 支持 PC, Web, Android, iOS, Windows, macOS等系统

• 全面兼容主要浏览器内无插件嵌入直连1

易易易于于于管管管理理理

• 从整个视频项目,到具体每次连接,均可在控制台标记和管理

• 开放的服务器API控制连接信息、权限和视频云计算

2 Chapter 1. 产产产品品品介介介绍绍绍

Page 7: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

高高高性性性价价价比比比

• 点对点通信传输结合智能服务器辅助,最大限度降低视频成本

• 持续提供视频会议中间件产品,快速实现特定场景

• 可私有化和深度定制的基础设施结构

客客客户户户端端端基基基本本本功功功能能能

• 检测设备兼容性

• 获取本地音视频

• 多人音视频通信

– 智能接入通信云

– 视频大小和质量调整

– 通信过程控制

• 消息和数据传输

客客客户户户端端端进进进阶阶阶功功功能能能

• 本地视频截图

• 聊天和互动白板

• 文件传输

开开开发发发者者者控控控制制制台台台功功功能能能

• 项目管理

• 连接查询

• 质量监控

• 连接测试

• 支持服务

使使使用用用流流流程程程

1. 开开开始始始

• 注册开发者账号 (page 17)

• 了解开发流程 (page 15)

• 在 Web / JavaScript (page 25) , Android (page 43) , iOS (page 63) 中,选择需要的SDK,开始试用

1.3. 使使使用用用流流流程程程 3

Page 8: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

2. 深深深入入入开开开发发发

• 阅读客户端SDK开发 (page 20)

• 了解服务器API (page 77)

• 阅读对应SDK下的样样样例例例程程程序序序和参参参考考考文文文档档档

3. 工工工具具具和和和支支支持持持

• 使用连接测试工具 (page 22)调试连接问题

• 访问开发者控制台 (page 17)监控和分析通信

• 访问联系我们/获取支持 (page 12)获取技术支持

常常常见见见问问问题题题

适适适合合合哪哪哪些些些视视视频频频场场场景景景???

适合单双向自由、点对点、小规模的实时视频通信场景。比如一对一视频通话,视频客服通话,在线招聘,小班教学,小型在线研讨室和会议室等。

如如如何何何自自自定定定义义义符符符合合合业业业务务务和和和场场场景景景需需需要要要的的的功功功能能能???

了解更多开发流程 (page 15)。

支支支持持持多多多少少少路路路视视视频频频???

在国内平均网络条件下,一般可支撑8人在同一虚拟会话中同时发言。在一人发言,其它参与者仅收听,或者仅音频通信的情况下,同一会话中支持的人数可以增加数倍。

每个开发者账号每分钟新建虚拟会话数量上限100个,会话总数不设上限。

了解更多网络要求和音视频质量 (page 8)。

是是是否否否支支支持持持 SIP网网网关关关???

私有云和企业解决方案 (page 97)提供 SIP (Session Initiation Protocol)网关服务。

版版版本本本和和和版版版本本本支支支持持持周周周期期期???

1.0版本以上实时猫视频通信云,提供至少3年的长期运行维护,接口向后兼容性,以及技术支持。

4 Chapter 1. 产产产品品品介介介绍绍绍

Page 9: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

是是是否否否可可可以以以切切切换换换为为为企企企业业业私私私有有有云云云???

可以通过修改一行代码,快速切换至私有云。在私有云基础上,实时猫还提供更复杂的通信服务能力定制。

了解更多私有云产品,部署,以及公私有云对比信息,请访问 私有云和企业解决方案(page 97)。

是是是否否否提提提供供供成成成套套套解解解决决决方方方案案案或或或开开开发发发外外外包包包服服服务务务???

实时猫提供针对大中型用户的专业解决方案服务。

了解更多私有云产品,部署,以及公私有云对比信息,请访问 私有云和企业解决方案(page 97)。

参参参见见见:

欲了解更多实时猫的技术细节,请参考客户端SDK开发 (page 20)

浏浏浏览览览器器器、、、平平平台台台和和和设设设备备备兼兼兼容容容性性性

兼兼兼容容容性性性速速速览览览

平台 支持情况

Web 提供 JavaScript SDK,兼容 Chrome,Firefox,Opera以及绝大多数国产浏览器

Android 提供 Android SDK,Web端也兼容Android原生浏览器和ChromeMobile浏览器

iOS 提供 iOS SDKWin/Mac/Linux提供混合式SDK

浏浏浏览览览器器器

实时猫以WebRTC技术为基础,因此需要浏览器内核至少提供基本的WebRTC支持。

简而言之,当前,在 Chrome, Firefox,以及绝大多数国产浏览中可以顺利兼容实时猫,但在 IE和 Safari浏览器无法使用实时猫。在不远的将来,Windows 10内置的 Edge浏览器和各平台的Safari浏览器都将支持实时猫。

桌桌桌面面面浏浏浏览览览器器器

下表为2016-8-20日的兼容性测试结果

Android浏浏浏览览览器器器

Android 4.0以上版本的系统原生浏览器,以及 Chrome Mobile浏览器,均支持实时猫。

经第三方厂商修改的 Chrome浏览器是否支持实时猫,需要开发者进行测试。

1.5. 浏浏浏览览览器器器、、、平平平台台台和和和设设设备备备兼兼兼容容容性性性 5

Page 10: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

我们推荐选择使用全功能的实时猫Android SDK (page 43)进行Android原生应用开发。

iOS浏浏浏览览览器器器

目前,无论 iOS内置的移动版 Safari浏览器,还是 iOS上的 Chrome Mobile,都不支持直接访问含有实时猫Web页面。因此需要使用实时猫iOS SDK来完成原生应用开发。

据近期资料显示,iOS和 OS X中的 Safari浏览器正在增加对WebRTC技术的支持。

注注注解解解: 屏幕分享功能

目前,如需使用实时猫的浏览器内无插件分享屏幕/窗口功能,分享出屏幕的主持方,必须使用Chrome内核的浏览器。

移移移动动动设设设备备备

实时猫 Android SDK (page 43)和 iOS SDK (page 63)提供了对移动设备实时猫开发的原生SDK支持。更详细的兼容性信息可以访问各SDK介绍页面了解。

混混混合合合式式式(Hybrid)应应应用用用

如果希望在混合式应用开发中嵌入实时猫,可以考虑以下方案

• JS跨平台的 Electron

• JS跨平台的 Crosswalk

• C++和JS跨平台的 Qt5 Webengine

• Android平台的 Android Webview v36 (即Android 5.0 Lollipop)及以上

• Java跨平台的 JxBrowser

• Windows平台的 CefSharp

桌桌桌面面面操操操作作作系系系统统统

为了最大程度的利用 Chrome内核对 WebRTC技术的优化,实时猫暂不提供 Windwos, macOS,和 Linux下的原生 SDK。在未来,实时猫将优先开发支持 GTK+的SDK。

如需从桌面操作系统连接实时猫,我们首先建议使用 HTML + JS + Electron的方式构建混合式桌面应用,打通Web与桌面系统。

定价

6 Chapter 1. 产产产品品品介介介绍绍绍

Page 11: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

WebRTC视视视频频频通通通信信信公公公有有有云云云

价价价格格格

公有云智能P2P视频通信,按总使用时间 (𝑝× )计费,每端每分钟 0.01元人民币。

目前,每个开发者账号每月1日赠送3000分钟本月的免费使用时间。

计计计算算算和和和计计计价价价

最最最小小小计计计价价价单单单位位位是是是什什什么么么???

10秒钟。不足10秒的通信按10秒计算。

小小小技技技巧巧巧: 价格计算举例

1. 一对一视频场景,如果平均每天有5对用户连接,每对用户使用20分钟,则月总使用时间约为 5 × 2 × 20Σ × 30) = 6000Σ,价格为 Φ6000Σ − 3000Σ𝑀9) × 0.01𝐶 = 30𝐶/Φ。

2. 平均四人参与的讨论场景,如果平均每天发起20个讨论室,平均每人使用时间30分钟,则月总是用时间约为 20 × 4 × 30Σ × 30) = 72000Σ,价格为 Φ72000Σ − 3000Σ𝑀9) ×0.01𝐶 = 690𝐶/Φ。

账账账户户户和和和财财财务务务

按按按什什什么么么周周周期期期结结结算算算账账账单单单?

按月结算,先使用,后付费。 *每月1日将发送上月的账单到您的邮箱。 *如果未用完本月赠送时间,将不会收到账单,也无需支付。 * 如果您的实时猫预付款账户上还有充足的余额,将自动使用余额支付账单。 *如果账单发送7天后仍未支付,通信功能将被暂停。

可可可否否否以以以其其其它它它方方方式式式计计计费费费、、、付付付款款款,,,可可可否否否签签签订订订使使使用用用合合合同同同???

对于企业用户和特定需求的客户,提供灵活的计费方式和服务合同。请联系我们/获取支持(page 12)。

功功功能能能相相相关关关

公公公有有有云云云是是是否否否提提提供供供录录录制制制,,,服服服务务务器器器Relay模模模式式式,,,混混混屏屏屏等等等功功功能能能???

目前以上功能仅供私有云客户使用,如果您的业务需要这些功能,请直接联系我们/获取支持 (page 12)。

1.6. WebRTC视视视频频频通通通信信信公公公有有有云云云 7

Page 12: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

是是是否否否有有有用用用量量量和和和价价价格格格接接接口口口???

公有云不提供用量和账单的API接口,但实时猫的 开发者控制台 提供完整的用量和账单信息。如果开发者的业务中需要计量功能,请根据具体情况在业务层自行设计开发。

网网网络络络要要要求求求和和和音音音视视视频频频质质质量量量

一一一、、、实实实时时时猫猫猫的的的支支支撑撑撑能能能力力力

实时猫的通讯可以抽象成一种点对点(P2P)的连接架构。如果要探讨实时猫对于不同应用场景的支撑能力,就需要理解P2P的实时通信模型。

P2P实实实时时时通通通信信信模模模型型型

在一对一的对称通讯模型中,要将自己的视频发送给对方,会产生一道上传的数据流;要获取对方的视频,会接收一道下载的数据流,这样就会产生双向网络流量。

对于任意一端,要正常使用进行通讯,需要保证每一时刻,网络上传带宽大于上传数据的码率,且下载带宽大于下载数据的码率。

对于任意一道数据流,数据传输是否通畅是由A、B两端同时决定的。只有两端在该数据流方向上的带宽同时满足要求,才能保障双方视频清晰流畅(音频、屏幕分享均同理)。

一一一对对对一一一通通通讯讯讯的的的网网网络络络要要要求求求

一对一网络通讯的质量,主要由带宽和丢包率决定,以下表格是在丢包率 < 2%时,一对一通讯所需的最小带宽。

视视视频频频通通通讯讯讯(((帧帧帧率率率取取取15fps)))

分辨率 总像素数(kilopixel) 平均码率(kbps) 波动幅度(kbps)160x120 19 150 64240x160 38 270 80320x240 77 500 100480x320 154 1600 120640x480 307 1800 160800x640 512 2000 2001024x768 786 2100 200

说明

1. 该表格为网络状况理想时的统计值,现实情况会有所偏差(由于视频内容不同或网络状况波动等情况,导致比特率可能会瞬时产生50%左右的变化)。

2. 如果您调整视频帧率,也会导致需求的网络带宽有所增加。

屏屏屏幕幕幕///窗窗窗口口口分分分享享享(((帧帧帧率率率取取取15fps)))

8 Chapter 1. 产产产品品品介介介绍绍绍

Page 13: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

分辨率 总像素数(kilopixel) 码率-剧烈变化(kbps) 码率-相对静止(kbps)640x480 307 4 2-31024x768 768 10-15 51280x1024 1311 20-25 20-30

分分分享单个窗口情况下,当用户拖动窗口时,码率将跃升为[码率-剧烈变化]时的8-10倍。

音音音频频频

音频流总保持在50kbps±10%

多多多人人人通通通讯讯讯网网网络络络要要要求求求

在P2P连接中,多道数据流相互独立,互不影响。

比如,在一种常见的多媒体视频会议模型:

• 某公司5人视频会议,会议允许主持人分享屏幕和自己的音视频,除主持人外还允许2个人同时发言,其他2个人为听众只观看和听讲。

• 设屏幕分享的数据传输速率:Vp

• 视频的码率:Vo

• 音频的码率:Vs

以上数据均可从第二小节的一对一的网络要求中获取。

简单地可以算出该场景下,为保持通讯流畅,不同人所需的最小带宽:

主持人 发言人 听众

上传带宽 5(Vp+Vo+Vs) 5Vs 忽略不计

下载带宽 5Vs Vs+Vp+Vo 3Vs+Vp+Vo

音音音视视视频频频传传传输输输的的的网网网络络络参参参数数数分分分析析析

网网网络络络质质质量量量概概概念念念和和和参参参数数数

带带带宽宽宽

网络带宽即数据传输速率,是衡量网络特征的重要指标。上传带宽过低会导致对方获取到的您的音视频卡顿和丢包。下载带宽过低会导致您获取到的对方的音视频卡顿和丢帧。

延延延迟迟迟

数据包从发送到接收之间的时间差值,是在网络中传输所用的时间。延迟过高,不影响音视频质量,但会影响音视频的实时性。

丢丢丢包包包率率率

1.7. 网网网络络络要要要求求求和和和音音音视视视频频频质质质量量量 9

Page 14: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

单位时间内,在数据传输过程中,丢失数据包数量占所发送数据包数量的比率。由于视频文件在 IP网络中的传输通常是被打包成固定大小的分组,不同的分组包含了不同编码类型的分片信息。一旦发生丢包则产生初始损伤,直接对丢包所在的帧的解码产生影响,同时这种丢包还会对相关帧的编解码产生影响,从而形成传播损伤,因此丢包对视频用户体验质量的影响非常大,会导致卡顿和模糊。

抖抖抖动动动

不同的数据包的延迟变化。网络中的抖动使得视频流到达接收端缓冲区的时间不恒定,通常如果视频流数据包抖动的时间超出一定的阈值范围,解码器将会丢弃此包,直接影响视频流在终端的显示。也会导致视频的卡顿和丢帧。

帧帧帧率率率

每秒显示的视频帧数。影响画面流畅度。帧率越大,视频越流畅;帧率越小,视频越有跳动感。一般人眼所看视频帧率高于24的时候,就会认为是连贯的。

针针针对对对质质质量量量问问问题题题的的的解解解决决决方方方案案案

影影影响响响质质质量量量的的的因因因素素素

网网网络络络因因因素素素

1. 上传或下载带宽不足,关闭其他占用网络流量的应用或使用更好性能的网络。

2. 网络连接质量欠佳。可能由于不稳定的无限网络,或有故障的硬件网络设备引起(网线、接口、路由器、交换机等)。

3. 不同运营商之间的连接。例如一端处于电信的网络,另一端处于联通的网络,二者之间的P2P网络连接很有可能会受到不同运营商连接中的网络限制,而导致连接状况不佳。

其其其他他他因因因素素素

1. 原始的视频源质量,分辨率低或者对焦模糊摄像头和麦克风会导致较差的音视频体验。

2. 声声声音音音输输输入入入源源源干干干扰扰扰:::

• 两端都使用无消除回声机制的笔记本电脑

• 两端都不使用耳机

• 终端音频输出设备音量过大,干扰到输入设备

• Android系统使用不适当改版的软硬件和驱动

• 多个同时连入实时猫的设备距离过近

10 Chapter 1. 产产产品品品介介介绍绍绍

Page 15: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

无无无法法法连连连接接接

请按照以下步骤判断

1. 首先判断是否为浏览器问题,请使用最新版的Chrome浏览器进行测试。

2. 请判断是否存在网络连接问题,请关闭防火墙、VPN等服务。

3. 由于复杂的网络结构引起。尝试使用Relay模式进行连接。

卡卡卡顿顿顿和和和丢丢丢帧帧帧

动动动态态态获获获取取取质质质量量量评评评分分分( Mean opinion score, MOS )

实时猫的音视频通讯服务质量评价算法可以实时获取您的通讯质量评分,捕捉到您每一次卡顿和丢帧,我们将会实时监测该评分,从而作出最合理的服务保障。

主主主动动动降降降低低低分分分辨辨辨率率率和和和FPS

实时猫会实时判断网络状况来调整视频效果,在网络状况不佳时,实时猫会尝试降低分分分辨辨辨率率率和 FPS,保障视频流畅性。在网络情况恢复良好时,实时猫会尝试提高分分分辨辨辨率率率和 FPS,优化用户体验。

注注注意意意: 如果网络状况和视频源录制信息的变化频率过高,我们的自动反馈调整机制则无法及时做出判断。此时,您需要根据自身的网络状况主动设置分分分辨辨辨率率率和 FPS的上限值,以保障通讯的流畅性。

多多多视视视频频频源源源的的的处处处理理理

根据多人通讯网络要求,在视频源数量多的情况下,带来的网络压力线性递增。因而可能会出现在单一视频源流畅的情况下,多视频源卡顿严重的情况,此时,可以优先分析以下因素:

1. 查看终端的内存占用情况,如果内存占用过大,请关闭耗费内存的进程,观察视频流畅度。

2. 检测终端的可用上传和下载网络带宽,根据多人视频的网络要求中的计算方法,判断是否满足音视频流畅条件。

小小小技技技巧巧巧: 如果您无法自行解决问题,请使用连接测试工具 (page 22)中的连连连接接接测测测试试试工工工具具具,进行可调整、跨平台、可视化的测试,并获得一个日志号。随后将具体问题和该日志号一并告知实时猫工作人员,以便分析和解决问题。

关于我们

1.7. 网网网络络络要要要求求求和和和音音音视视视频频频质质质量量量 11

Page 16: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

目目目标标标

实时猫专注于实时通信平台研发,为交流方式的革新提供更多可能。

公公公司成立于2014年底,是面向下一代实时通信云计算的优秀初创企业,核心成员来自各大知名企业。实时猫的业务涵盖跨平台、多场景下的音视频通信云和SDK,并探索发展以音视频通信流为目标的云计算平台。并提供公有云,私有云,解决方案等交付方式。产品被企业级客户和互联网公司广泛采用。公司位于北京市海淀区。

历历历史史史

1. 公司前身于2012成立于香港,研发和使用无插件视频通信技术,为国际教育、企业通信等多个垂直行业提供解决方案。

2. 公司早期专门为企业IT研发部门提供音视频私有云技术和解决方案,后逐步转型为公众服务提供商。

3. 2014年,实时猫品牌创立,专为中国企业和开发者提供视频通信云技术和解决方案服务。

4. 2016年10月,经过近两年的试运行,实时第一个正式版本上线。

目前,公司已借助私有云业务实现了长期稳定运行,正在逐步开放和产品化云技术和中间件,让更广大的开发者和行业用户轻松使用音视频实时通信云。

联联联系系系我我我们们们/获获获取取取支支支持持持

面对复杂的新兴技术,实时响应解决问题的效率至关重要。我们将提供高水平的答疑和技术支持服务,让业务和技术专家直接帮助企业高效处理具体问题。

私有云和解决方案客户,可直接联系负责对接项目的工程师,获得及时的针对性反馈。

联联联系系系方方方式式式

方式 信息 说明

技术支持邮箱 [email protected] 工作日4小时内回复,其它24小时内

问题提交 Issues on Github 用于提交开发问题和报告Bug客服和技术支持电话

400 640 6411 每日8:00-22:00接听

开发者交流群 QQ 530719965 申请加入须留言”WebRTC”其它号码 国内 +86 010 59797139 海外 +852 51254737地址 北京市海淀区上地十街辉煌国际

东6楼454邮编 100082

小小小技技技巧巧巧:

• 普通优先级的问题,我们推荐使用问问问题题题提提提交交交系统,或发送邮件到技技技术术术支支支持持持邮邮邮箱箱箱解决。

• 高优先级问题和复杂业务合作咨询,我们推荐拨打 400电电电话话话联系。

12 Chapter 1. 产产产品品品介介介绍绍绍

Page 17: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

参参参见见见:

实时猫网站 -联系页面

当当当前前前文文文档档档信信信息息息

version 0.5 Beta

date 2017-04-17

copyright 版权信息

本文档版权以及『实时猫』商标,属北京乐塔克科技有限公司所有。

除非特别授权,本文档使用 Creative Commons 署名-非商业性使用-禁止演绎4.0协议。

1.10. 联联联系系系我我我们们们/获获获取取取支支支持持持 13

Page 18: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

14 Chapter 1. 产产产品品品介介介绍绍绍

Page 19: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

CHAPTER 2

开始使用

基本流程

开开开发发发流流流程程程

简简简易易易流流流程程程

• 前往开发者控制台,注册成为开发者,新建一个 Project(项项项目目目)。

• 使用开开开发发发者者者控控控制制制台台台生成一个可用的 Session(会会会话话话),并通过该 Session生成两个 Token(令令令牌牌牌)。

• 选择一个平台的SDK,参考对应的文档开发。核心工作是下载SDK,并在两个终端中填入相同的 Session和不同的 Token,以发起连接。

注注注意意意: 每个有效 Token仅代表一端的一次连接,如果两端使用同一个 Token,或重复使用同一个 Token,将导致连接错误。

要按需动态生成 Token,请阅读开发流程 (page 15)。

15

Page 20: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

复复复杂杂杂流流流程程程

• 假设开发者的项目分为 开开开发发发者者者前前前端端端 (Web端, Android, iOS等等),以及开开开发发发者者者后后后端端端,即业务后台逻辑和接口。

• 本来,与简简简易易易流流流程程程一样,开开开发发发者者者前前前端端端可以通过引入对应的 SDK,填入 Token,发起连接。但在具体应用场景中, Session和 Token不能手动前往开开开发发发者者者控控控制制制台台台生成,需要动态创建。

• 这就需要用 Project的 API Key和 Secret做身份证明,来调用服服服务务务器器器RESTful API,动态生成需要的 Session 和 Token 。一般而言,出于安全考虑,开发者需要在 开开开发发发者者者后后后端端端,存储 API Key和 Secret,并调用服服服务务务器器器RESTful API,按需得到 Session和 Token后,再传给开开开发发发者者者前前前端端端。

• 这样的设计保证开发者有最大的灵活性设计通讯的场景,流程,并自定义验证机制。

• 如需查看 Session/Token 情况,分析连接状况,或者进行调试,均可访问 开发者控制台(page 17)

16 Chapter 2. 开开开始始始使使使用用用

Page 21: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

控制台和项目管理

开开开发发发者者者控控控制制制台台台

点点点击击击访访访问问问开开开发发发者者者控控控制制制台台台

开发者控制台是开发者使用实时猫公有云的 账账账户户户管管管理理理面面面板板板 ,连连连接接接监监监控控控平平平台台台,以及 服服服务务务器器器API调调调用用用界界界面面面。开发者通过注册账号,登录使用该控制台。

在企业私有云版本中,同样包含一个开发者控制台,该控制台不仅包含与公有云类似的界面和功能,还针对私有云的具体硬件情况,提供更多管理和监控功能。

项项项目目目管管管理理理

项项项目目目

当开发者需要在自己的网站、桌面或者移动端应用接入实时猫服务时,需要在控制台建立相对应的实时猫应用,并获得该应用唯一的 API Key和 Secret。一个开发者帐号可以创建多个项目,但请不要重复创建无意义的项目。当项目不再使用后,可以在实时猫控制台中停用项目。

APIKey和和和 Secret

每当开发者创建一个项目(Project),实时猫会为项目生成一个唯一的APIkey和对应的Secret,以供开发者标识和管理这个项目。

2.2. 开开开发发发者者者控控控制制制台台台 17

Page 22: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

APIKey相当于项目的识别号,客户端和服务器端都通过这个Key来使用实时猫服务。

每个项目的APIKey都有对应的一个Secret,相当于项目的密码,调用服务器端API时,需要提供该Secret。

调用API时需要在请求的标头(Header)中包含API KEY和API Secret,否则将返回错误代码RTCAT-ERROR-001。

X-RTCAT-APIKEY: ApiKeyX-RTCAT-SECRET: ApiSecret

APIKey和Secret应该是保密不公开的,仅保存在开发者的应用业务服务器,以免被滥用甚至遭到攻击。一旦Secret泄露时请及时登录控制台,进入项目点击重置,然后将新的APIKey和Secret应用到服务器。

危危危险险险: 重置Secret后,所有用旧Secret的应用将永久无法连接。

开发概念

参参参见见见:

阅读本章,需要先了解以下内容:

开发者控制台 (page 17)

Session (会会会话话话)

每个 Session代表着一个视频房间,房间内的用户可以互相通信。会话的创建,连接和管理取决于开发者的需要。

Session Type (会话类型)

会话分为 p2p (点对点)和 relay (服务器)。

p2p下用户之间优先采用端对端连接,如果端对端效果不佳则经智能服务器转发技术优化。这种模式适合4-8人的小型会话。根据电脑和带宽的不同,最大可以支持15人以内的中型会话。

relay面向中大型的会话,该模式下视频流经过服务器压缩转发给其他人,能支持人数更多的会议。

警警警告告告: 目前, relay类型正在测试中。除非开发者进行录制功能内部测试,否则应总是选择 p2p。

创建和管理 Session

开发者既可以选择手动从 实时猫控制台 生成 Session ,也可以通过调用 服务器RESTful API 生成。在实际开发场景中,一般需要开发者动态调用 服务器RESTful API的具体方法。

Session建立时,开发者可以将业务中需要的房间名、编号等附加信息,存入会话的可选参数 data中,以供连接各方查询,该参数可最大存储1024个字符。

18 Chapter 2. 开开开始始始使使使用用用

Page 23: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

会话创建后返回的 Session ID可能需要开发者在应用的前后台进行存储和维护。Session ID 的格式为32位16进制字符串(UUID4),形如 12345678-90ab-4def-0123-4567890abcdf。

Session的有效期和作废

默认情况下, Session仅在15天内有效,因此应该通过服务器API随用随生成。开发者可以创建的会话数量不设上限。

如果希望该会话不被删除,应在控制台中将会话标记为 permanent (永久)。这样,该会话将在控制台中置顶,而且永远不会过期。

客户的一端想要连入会话则需要有效的 Token (令牌),Token由 Session生成。

Token (令令令牌牌牌)

如果 Session代表会话房间,那么 Token就是该房间的门卡,用来验证用户的身份和权限。一个 Token只能访问生成他的 Session。

Token的分类

Token分为两类: Publisher(发布者)和 Subscriber (订阅者)。 Publisher有发布视频,音频,文字和文件,共享屏幕等权限;而 Subscriber则仅仅能接收这些信息,发布权限被从连接底层限制。

和 Session一样, Token的创建,连接和管理也可以由开发者自由定制。

警警警告告告: 如果您不能确定是使用 Publisher还是 Subscriber类型,那么总应该使用 Publisher类型

创建和管理Token

Token 可以通过调用 服务器API 生成,也可以在控制台手动生成。 创建时,需要提供 Token所在的 Session ID,还需要提供令牌类型 type以及可选的附加信息:data。

Token的连接类型采用 p2p还是 relay,由生成 Token的 Session类型决定。

令牌创建后返回的 Token ID 可能需要开发者在应用的前后台进行存储和维护。Token ID的格式也是32位16进制字符串 (UUID4)。

Token的有效期和作废

与 Session一样,令牌 Token仅在15天内有效,因此应该通过服务器API随用随生成。开发者可以创建的令牌数量不设上限。

一般情况下, Token应该一次使用,即用即弃。如果由于设计逻辑的原因,您希望该令牌一直不被删除,应在控制台中将令牌标记为 permanent。这样,该会话将在控制台中置顶,而且永远不会过期。

客客客户户户端端端SDK

实时猫客户端SDK是连接实时猫公私有云的开发者工具。使用实时猫客户端SDK后,开发者

2.3. 项项项目目目管管管理理理 19

Page 24: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

只需关注实时通信连接的逻辑,而无需关注音视频的处理和通信实现。

欲了解各客户端SDK的使用方法,请返回实时猫文档-首页 (page 1)

客客客户户户端端端SDK开开开发发发

Stream (流流流)

Stream (流)

是对客户端音视频的封装,分为 LocalStream (本地流)和 RemoteStream (远程流)。流都需要通过在播放器 (player)播放才能显示。

LocalStream

由客户端生成,通过P2P类型和服务器类型会话建立的连接传输。

RemoteStream

则是在接收流的客户端,由 Receiver (接收器)接收的流,每一个 RemoteStream对应一个其他人的 LocalStream。当网络情况不佳时,可以通过调用 RemoteStream的 stream.disableVideo方法,不接收 RemoteStream的视频,减小相应的带宽消耗,从而保障音频的流畅。如果对 LocalStream调用 stream.disableVideo方法,所有接收方都会失去该 LocalStream对应 RemoteStream的视频。

释放

如果不再使用客户端音视频设备,可以通过 LocalStream的 stream.release方法释放资源。

动态调整

LocalStream在生成时可以设置视频分辨率,目前不支持开发者动态调节流的视频分辨率大小。

Session (会会会话话话)

Session

是对会话的封装,通过连入 Session ,用户可以与其他人建立连接,并发送 Stream和数据。

Session的连入

通过调用 session.connect方法进行。连入成功会触发 connected事件,并返回当前已连入此 Session的所有 Token,此后,可通过 in事件,监听其它 Token连入;通过 out事件,监听 Token退出。连入失败则会触发 error事件,并返回错误信息。

消息传递

Session连入成功后即可调用 session.sendMessage或 session.broadcastMessage方法发送或广播消息,通过监听 message事件,可以接收此消息。

P2P类型

20 Chapter 2. 开开开始始始使使使用用用

Page 25: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

P2P类型会话提供了 session.send 方法和 session.sendTo 方法, 分别用于给 Session中的所有 Token 和某个 Token 发送 Stream 和数据。在发送时, 用户可以设置 attr标签用来标记。发送成功后,发送方会触发 local事件,返回 Sender。接收方则触发 remote事件,返回 Receiver。

服务器类型

服务器会话则提供了 session.link和 session.unlink方法用于与实时猫relay服务器连接。

Session的主动退出

可以通过调用 session.disconnect方法进行。退出成功将会触发 disconnect事件,退出后,所有通过此 Session创建的 Sender和 Receiver都会关闭。

Sender (发发发送送送器器器)

Sender

对应 Session建立的一个连接的发送端。每个 Sender都有一个随机的 id作为唯一标示用于和 Receiver(接收端)相对应。

P2P类型

P2P类型会话下, session.send或 session.sendTo方法调用成功后,通过 local事件回调返回 Sender。服务器类型会话下, session.link方法调用成功后,通过 local事件返回 Sender。

Sender的释放

Sender 随着 Session 的退出而关闭。也可以通过 close 方法主动关闭,对应的Receiver也会随之关闭。

消息传递

用户可以通过 Sender发送消息和文件, Sender仅在 p2p模式下才支持发送文件和消息。

Receiver (接接接收收收器器器)

Receiver

对应 Session建立的一个连接的接收端。每个 Receiver都有一个随机的 id作为唯一标示用于和 Sender相对应。

Receiver的回调

P2P和服务器类型会话均是在 session.send或 session.sendTo方法调用成功后,通过 remote事件回调返回 Receiver。

Receiver的释放

Receiver的连接随着 Session退出而关闭,也可以通过 close方法主动关闭,对应的Sender也会随之关闭。

消息传递

2.4. 客客客户户户端端端SDK开开开发发发 21

Page 26: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

用户可以通过 Receiver接收消息和文件, Receiver仅在 p2p模式下才支持接收文件和消息。

参参参见见见:

开发流程 (page 15)

开发者工具

连连连接接接测测测试试试工工工具具具

简简简介介介

本工具用于快速分析测试网络状况和视频效果,监测具体环境(操作系统、硬件设备、软件配置、网络状况)下使用实时猫的一对一音视频连接效果。

目前,本工具支持Web, Android, iOS, Windows以及Mac平台。

点击在线访问连接测试工具

使使使用用用说说说明明明

开开开始始始使使使用用用

Web端。使用支持的浏览器,直接访问连接测试工具下的Web链接即可。

Android端,需要下载安装App。手机浏览器访问连接测试工具,下载 apk文件并安装。第一次启动时,App会申请Android设备的摄像头和麦克风的访问权限,必须选择同意。

Windows和Mac端,需要下载安装软件。浏览器访问连接测试工具,下载对应的 exe或 dmg文件,安装运行即可。

使使使用用用步步步骤骤骤

1. 输入房间号,房间号相同的两个端会进入同一音视频测试房间。可以选择随机生成一个房间号。

2. 在设置菜单中,调整音视频参数选项。第一次使用时,可先尝试使用默认值连接,之后再根据实际应用情况进行调整。

3. 点击连接进入音视频房间,每个房间只能容纳两人。

功功功能能能

开关音视频

切换我方音视频的开关状态。

实实实时时时状状状态态态

悬浮在对方视频窗口上方的实时数据。

连连连接接接统统统计计计图图图

本区域提供统计音视频连接情况的折线图。图中的统计数据来源于实实实时时时状状状态态态区域的数据。

22 Chapter 2. 开开开始始始使使使用用用

Page 27: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

• CodecName视频编解码器格式.

• Height & Width视频高宽(分辨率),单位 pixels。

• Bitrate (BPS)音视频传输的比特率,单位 kByte/s。

• CurrentDelayMs (DLY)实时视频延迟,即对方该路视频传输到我方设备的总网络延迟,单位 ms。

• PacketLossRate (PLR)丢包率,在视频数据网络传输过程中,每秒钟的丢包数量/总数量,单位 %。

• Fps (FPS):帧率,每秒钟实际接收并成功解码播放的视频帧数,单位frames/second。

• VideoJitter (VJ)视频延迟抖动,单位 ms。

• VideoMos (MOS) 平均主观意见评分,是根据参数估算的视频主观效果感受值。5优,4良,3尚可,2差,1劣。

小小小技技技巧巧巧: 欲进一步了解各连接质量参数的含义,可以访问网络要求和音视频质量(page 8)

上传日志

点击该按钮后,工具将自动统计接下来20秒钟的的音视频数据信息,然后上传统计数据到实时猫的日志系统。

在遇到音视频卡顿、模糊等质量问题时,可以使用本功能,获得一个日志号。随后将具体问题和该日志号一并告知实时猫工作人员,以便分析和解决问题。

转换方向

切换移动设备的前后摄像头。

2.5. 连连连接接接测测测试试试工工工具具具 23

Page 28: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

24 Chapter 2. 开开开始始始使使使用用用

Page 29: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

CHAPTER 3

Web / JavaScript

简简简介介介和和和下下下载载载

实实实时时时猫猫猫 JavaScript SDK

基基基本本本介介介绍绍绍

• 实时猫 Web (JavaScript) SDK支持从浏览器端调用实时猫的功能,可以实现浏览器内完全定制的无插件实时视频通讯。

• 由于浏览器的安全要求,开发时服务器必须使用 HTTPS安全连接。

下下下载载载/引引引入入入

选择以下方式中的任意一种加载实时猫JavaScript SDK,

使使使用用用实实实时时时猫猫猫CDN

新建一个HTML网页,在网页的<head>和</head>之间,添加以下代码:

<script src="//cdn.realtimecat.com/realtimecat/realtimecat-0.4.min.js"></→˓script>

使使使用用用包包包管管管理理理软软软件件件

使用Bower作为包管理器,运行以下命令:bower install realtimecatjs

使用NPM,运行以下命令:

25

Page 30: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

npm install realtimecatjs

在使用包管理软件安装完成后,仍需要在具体HTML页面中,引入下载好的实时猫JavaScriptSDK。

前前前提提提知知知识识识

• 开发流程 (page 15)

• 客户端SDK开发 (page 20)

• 实时猫 Web (JavaScript) SDK所有组件都基于 EventEmitter实现,所有类都直接或者间接继承于 EventEmitter,开发者请务必先了解 EventEmitter后,再阅读样例代码。

快快快速速速开开开始始始

本章将介绍如何使用实时猫JavaScript SDK,快速在简单的网页中嵌入多人实时视频功能。教程的核心的内容有两部分:

1. 从网页访问本机摄像头

2. 实现多人网页视频通讯

要完成教程,需要有以下Web开发知识:

• 基础HTML

• 基础JavaScript

完成教程过程中,还需要在实时猫的‘控制台‘_注册一个免费的开发者账号。并将制作好的页面放到本地或远程的HTTP服务器上,如果放在远程的HTTP服务器上,则必须使用 HTTPS安全连接。

从从从网网网页页页访访访问问问摄摄摄像像像头头头

在实现多人视频之前,我们先来引入实时猫,完成一个访问本机摄像头的小任务。

将下面这段代码复制并保存为 camera.html,用支持WebRTC的浏览器打开页面。当浏览器询问是否允许访问摄像头和话筒时,选择同意,就可以在浏览器中看到自己的视频了。

列表 3.1: camera.html

<!DOCTYPE html><html lang="zh-CN">

<head>

<meta charset="utf-8"><title>实时猫访问摄像头 Demo</title>

<!-- 实时猫 RealTimeCat JavaScript SDK --><script src="https://unpkg.com/[email protected]"></script>

26 Chapter 3. Web / JavaScript

Page 31: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

</head>

<body>

<!-- 定义一个id为self的视频容器 --><div id="self"></div>

<script>(function(){

// 创建本地视频流RTCat.createStream().then((stream) => {

stream.play("self");}).catch((e) => {

console.error(e);})

})()</script>

</body>

</html>

以上就是一个调用实时猫在网页内显示本地摄像头内容的简单示例,接下来我们将两个用户的视频在页面中连接起来。

实实实现现现多多多人人人网网网页页页视视视频频频通通通讯讯讯

在上面 camera.html样例的基础上,我们来设计实现两个页面间的视频通讯。

• 登录实时猫控制台。

• 新建一个项目(Project)

每个视频应用都对应一个实时猫项目。要新建一个项目,在‘控制台‘_页面中点击创建项目按钮,输入任意名称即完成创建,并得到一组属于该项目的 API Key和 Secret。

• 创建会话(Session)和令牌(Token)

创建好项目后,就可以进入项目的详情页面,创建视频会议室了。

在实时猫中,一个会话(Session)可以近似地看做一个视频会议室,持有有相同会话ID用户将被连接到同一个会议室。会话中的一个令牌(Token)则是进入该会话的一个有效口令。

进入刚刚创建的项目详情页面,在这个界面中创建一个Session,并生成两个该Session下的Publisher类型Token。得到的两个Token字符串需要记下来,分别称为 Token1, Token2。

下面开始制作 demo1.html和 demo2.html两个可以视频通讯的页面。

与 camera.html类似,这两个页面要能访问到本地摄像头。再通过实时猫JavaScript SDK的功能可以来建立连接,建立连接的凭据是共用的 Session1和两个文件各自不同的 Token1和Token2。这样,两名用户就可以连入同一个会话中。

3.2. 快快快速速速开开开始始始 27

Page 32: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

复制下面的代码保存到 demo1.html,将其中的 Token1替换为刚才从实时猫控制台获取的Token1字符串。同样的,复制 demo1.html文件到 demo2.html,将其中的 Token1替换为从实时猫控制台获得的 Token2。

以下是 demo1.html的样例:

列表 3.2: demo1.html

<!DOCTYPE html><html lang="zh-CN">

<head>

<meta charset="utf-8"><title>实时猫 Demo</title>

<!-- jQuery --><script src="https://unpkg.com/[email protected]"></script><!-- 实时猫 RealTimeCat JavaScript SDK --><script src="https://unpkg.com/[email protected]"></script>

</head>

<body>

<div id="media-list"></div>

<script>(function ($) {

var localStream;var mediaList = document.querySelector('#media-list');

/*************************************** 建立会话

***************************************/// 使用token新建会话,// 请将此处的Token替换为 从http://dashboard.shishimao.com/生成

的TokenRTCat.createSession("Token1").then((session) => {

bindSessionEvents(session);

RTCat.createStream().then((stream) => {

localStream = stream;displayStream('self', stream);session.send({stream: stream});

}).catch((err) => {

console.log(err)})

}).catch((err) => {

console.log(err);

28 Chapter 3. Web / JavaScript

Page 33: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

});

function bindSessionEvents(session) {

session.on('in', (token)=> {console.log('someone in', token);if(localStream){

session.sendTo({to: token, stream: localStream});}

});

session.on('out', (token)=> {console.log('someone out', token);

});

session.on('remote', (receiver)=> {var id = receiver.getId();receiver.on('stream', (stream)=> {

displayStream(id, stream);});receiver.once('close', ()=> {

$('#v-' + id).parent().remove();});

});

session.on('disconnected', () => {console.log('session disconnect');

});

}

/********************************* 工具函数

********************************/// 显示流function displayStream(id, stream) {

// Video containervar videoContainer = document.createElement("div");videoContainer.setAttribute('style', "width: 300px;

→˓height:300px;");

// Video playervar videoPlayer = document.createElement('div');videoPlayer.setAttribute("id", "v-" + id);

videoContainer.appendChild(videoPlayer);mediaList.appendChild(videoContainer);

stream.play("v-" + id);}

}).apply(this, [jQuery]);</script>

</body></html>

3.2. 快快快速速速开开开始始始 29

Page 34: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

在上面的代码中,实时猫将会把所有的本地和远程视频显示在 id为 media-list的 <div>中。

要测试视频连接功能,需要将 demo1.html 和 demo2.html 部署在任意HTTP服务器上。这里的HTTP服务器可以是XAMPP,MAMP,Apache,Nginx等软件,也可以是Python Simple-HTTPServer或者某些IDE自带的HTTP测试服务器。如果部署到局域网或者互联网服务器上,则必须使用 HTTPS安全连接。

部署完成后,在浏览器的两个不同窗口中分别打开两个页面。如果两个窗口中的视频能够互相联通,说明实时猫已经成功嵌入页面中。

如果这两个页面已经部署到了局域网或者互联网服务器上,我们可以将 demo2.html的链接发给朋友,访问 demo2.html,开始实时视频。

总总总结结结

我们已经使用实时猫完成了一个简单的应用。上面 demo1.html 文件展示了建立基本的视频连接的主要过程。可以看到实时猫JavaScript SDK提供了整个视频连接周期中的各类控制功能。当然,上面示例中用于建立连接的令牌(Token)是固定写在代码中的,如果需要动态的获取和生成令牌来适应具体的应用场景,还需要通过自建的后端机制与我们的服务器RESTfulAPI通讯。

样样样例例例程程程序序序

检检检测测测浏浏浏览览览器器器兼兼兼容容容性性性

基基基本本本介介介绍绍绍

• 本例通过实时猫 JS SDK实现对浏览器兼容性检测。

• 实时猫 JS SDK 目前支持三个等级的浏览器检测,从低到高依次为 media , data ,screen,分别对应是否支持音视频连接,点对点数据传输,屏幕分享。即可视为实时猫 JS SDK最小支持音视频连接,如果检测结果中 media为 false,则可视为此浏览器不支持实时猫 JS SDK。

• 目前支持的检测的浏览器类型: Chrome , 360安全浏览器(检测结果可能为Chrome) ,360极速浏览器(检测结果可能为Chrome) , QQ浏览器 ,百度浏览器 ,搜狗浏览器 ,傲游浏览器 ,猎豹浏览器(无法检测到浏览器版本号) , IE , EDGE , Safari , Firefox。

• 注意:建议总是监听 error事件,遇到不兼容浏览器能及时处理。

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_js_demo1

• 获取后请按Readme中的使用说明操作。

代代代码码码说说说明明明

30 Chapter 3. Web / JavaScript

Page 35: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

列表 3.3: index.html

1 var options = {2 browser:false,3 compatibility:true,4 network:true5 };6

7 RTCat.detect(options,function (message,error) {8 if(error){9 //返回错误,即 实时猫 JS SDK 不支持 此浏览器

10 console.log(error);11 }else{12 if(message.compatibility.data){13 //支持点对点数据14 }15 if(message.compatibility.screen){16 //支持屏幕分享17 }18 }19 });

• 如果检测结果中 media为 false,则回调方法直接返回错误。 message为本地的具体信息,具体请参考接口,error兼容性错误。

• options 为检测项设置,根据开发者需要返回相对应的检测结果(在不输入该参数情况下,RTCat.detect方法将会默认全部检测),如果将 options.network设定为true,则将会在耗费一段时间后(用于统计网络速度)返回检测结果。

• RTCat.detect方法仅起检测作用,并不影响视频连接,但是如果开发者不确定用户浏览器类型,建议每次先检查浏览器后调用实时猫 JS SDK。

• 所有实时猫 JS SDK以回调形式返回的接口(不含事件触发器接口)都支持 Promise,即上面的方法也可写成

1 RTCat.detect().then(function(message){2 if(message.compatibility.data){3 //支持点对点数据4 }5 if(message.compatibility.screen){6 //支持屏幕分享7 }8 }).catch(function(error){9 //返回错误,即 实时猫 JS SDK 不支持 此浏览器

10 console.log(error);11

12 });

获获获取取取本本本地地地音音音视视视频频频

基基基本本本介介介绍绍绍

• 本例通过实时猫 JS SDK实现获取并播放本地流以及本地流的其它高级使用方法。

• 实时猫 JS SDK目前支持 5种本地流[url]。默认为 音视频流,本地流在使用前都要先通过 init 方法初始化。初始化成功后会触发 accepted 方法。初始化成功后的本地

3.3. 样样样例例例程程程序序序 31

Page 36: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

流可以通过 play 方法播放, 实时猫 JS SDK 会给每个播放的本地流生成一个播放器(player,实质为一个HTML video标签)用于显示流。开发者可用通过 getPlayer获得播放器,通过播放器来修改显示窗口的样式。对于不再使用的本地流可以通过 stop回收本地流资源和播放器。

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_js_demo2

• 获取后请按Readme中的使用说明操作。

代代代码码码说说说明明明

列表 3.4: index.html

1 stream = new RTCat.Stream();2 stream.on('accepted', function () {3 //在 id 为 local 的 div 中播放本地流4 stream.play('local');5 });6 stream.init();

• 以上代码的执行顺序为 第1行 -> 第6行 -> 第2行 -> 第4行 。 第1行为通过 RTCat.Stream()构造函数来创建本地流,可以通过构造函数指定本地流类型和具体参数。

• play方法通过指定 id选择器来确定播放位置,也可使用类选择器。具体使用方法参考xxx

• 本地流的所有方法都只有在初始化成功后才能使用,即在 accepted回调返回后才可使用。

高高高级级级主主主题题题

选选选择择择音音音视视视频频频输输输入入入设设设备备备

列表 3.5: demo1_1.html

1 RTCat.getCameraDevices(function (error,videoDevices) {2 ...3 });4

5 RTCat.getAudioInputDevices(function (error,audioDevices) {6 ...7 });8

9 ...10 stream = new RTCat.Stream({11 videoSource:cameras.val(),12 audioSource:audios.val()});13 stream.on('accepted', function () {14 //在 id 为 local 的 div 中播放本地流15 stream.play('local');

32 Chapter 3. Web / JavaScript

Page 37: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

16 });17 stream.init();

• RTCat.getCameraDevices 回 调 返 回 可 用 的 摄 像 头 设 备 , RTCat.getAudioInputDevices回调返回可用的音频设备。两个接口均返回MediaDeviceInfo对象的数组, MediaDeviceInfo 的 label 属性指的设备名称,deviceId 属性指的是设备编号,实时猫 JS SDK通过 deviceId来选择音频或视频输入设备。

• 通过 Stream 构造函数中 videoSource 参数来选择摄像头输入设备,通过audioSource参数来选择音频输入设备。

视视视频频频截截截图图图功功功能能能

列表 3.6: demo1_2.html

1 ...2 img.src = stream.capture();

• 本地流初始化后,可通过 capture方法来截取本地流,截图成功返回数据链接。还可配置截图格式和质量,详情参考文档。

• 截图同样适用于远程流。

互互互动动动白白白板板板

基基基本本本介介介绍绍绍

• 本例介绍如何通过实时猫 JS SDK实现互动白板功能。

• 本例主要为了介绍 Session通信功能,比如如何建立连接,发送数据等,所以本文不会介绍 Canvas的使用,本例的 canvas.js中的包含所有 Canvas操作的代码。

• 本例为互动白板最小实现,不包含错误处理。

3.3. 样样样例例例程程程序序序 33

Page 38: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

流流流程程程图图图例例例

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_js_demo3

• 获取后请按Readme中的使用说明操作。

代代代码码码说说说明明明

列表 3.7: demo3.html

1 var apikey = "x",2 secret="x",3 p2p_session="x";4

5 var token_url = "https://api.realtimecat.com/v0.3/sessions/"+p2p_session+→˓'/tokens';

6

7 $.ajax({8 'url':token_url,9 'method':'POST',

10 'headers':{11 'X-RTCAT-APIKEY':apikey,12 'X-RTCAT-SECRET':secret

34 Chapter 3. Web / JavaScript

Page 39: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

13 },14 'data':{15 'session_id':p2p_session,16 'type':'pub'17 }18 }).done(function(msg){19

20 var token = msg.uuid;21

22 session = new RTCat.Session(token);23 session.on('connected',function () {24 session.on('message',function (content) {25 messageHandler(content);26 });27 });28 session.connect();29 }).error(function(error){30 console.log(error)31 });32

33

34 function boardCoast(packet) {35 session.broadcastMessage(packet);36 }

• 首先通过实时猫 RESTful API获得 Token , 开发者应该通过自己的服务器向实时猫RESTful API发起请求获得 Token,然后通过开发者请求自己的服务器来获得 Token,以确保 APIKey和 Secret的安全。这里因为例子的原因把请求放在了客户端,之后的例子也按照同样的方式,不再赘述。

• 获得 Token后,通过 Token初始化 Session,在连接之前注册需要监听的事件,因为本例只关注消息处理,所以只注册 message事件。注册事件后,通过 connect方法连接 Session。

• 连接 Session成功后,就能通过 sendMessage或 broadcastMessage方法发送消息了。sendMessage是某个 Token发送消息,broadcastMessage是给 Session中的所有 Token发送消息。然后通过监听的 message方法接收消息,之后就可以根据自己定义消息数据处理消息了。

• 消息文本一次发送的长度限制为 262144 。目前消息格式支持 Object , String,Array,其中 Object和 Array也是转化为 文本之后的长度。本例中,把消息分装成对象后,通过 broadcastMessage方法发送。

多多多人人人音音音视视视频频频通通通信信信

基基基本本本介介介绍绍绍

• 本例介绍如何通过实时猫 JS SDK实现多人音视频通信。

• 本例主要介绍如何通过 Session, Receiver实现多人音视频通信功能。

• 本例使用的是 p2p模式连接。

• 本例为多人音视频最小实现,不包含错误处理。

3.3. 样样样例例例程程程序序序 35

Page 40: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_js_demo4

• 获取后请按Readme中的使用说明操作。

代代代码码码说说说明明明

列表 3.8: demo4.html

1 stream = new RTCat.Stream();2 stream.on("accepted", function () {3 stream.play("local");4 session = new RTCat.Session(token);5 session.on("connected", function () {6 session.on('remote', function (receiver) {7 receiver.on('stream',function(stream){8 remote_stream = stream;9 var div = document.createElement('div');

10 div.setAttribute('id','video-'+receiver.getId());11 document.querySelector('body').appendChild(div);12 stream.play('video-'+receiver.getId());13 });14 }).on('in', function (token) {15 // 建立连接成功后,发送 stream16 session.sendTo({to:token,stream:stream})17 });18 // 建立连接成功后,发送 stream19 session.send({stream:stream});20 });21 session.connect();22 }).init();

• 创建本地流和连接 Session的方法请参考获得本地流和互动白板,这里不再赘述。连接 Session成功后,触发 connected事件,连接成功的 Session可以通过 remote事件监听 Receiver,之后可通过 Receiver来接收远程流,再通过 in事件监听连入Session的 Token,之后连入的 Token可以通过 sendTo方法发送本地流。 send方法是连入 Session成功后,给所有 Token发送本地流。

• session.send方法会和 Session中的每一个 Token建立一个通道,这个通道在发送端对应 Sender,在接收端对应 Receiver。因此发送端的 Sender如果断开,与之相对应的接收端的 Receiver也会断开。 session.sendTo方法只与一个 Token建立通道。本例没有涉及到 Sender发送消息,所以没有监听 local。

文文文字字字聊聊聊天天天和和和文文文件件件传传传输输输

基基基本本本介介介绍绍绍

• 本例介绍如何通过实时猫 JS SDK中的 Session, Receiver,Sender实现文字聊天和文件传输功能。

• 本例使用的是 p2p模式连接。

• 本例为文字聊天和文件传输的最小实现,不包含错误处理。

36 Chapter 3. Web / JavaScript

Page 41: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_js_demo5

• 获取后请按Readme中的使用说明操作。

代代代码码码说说说明明明

列表 3.9: demo5.html

1 session = new RTCat.Session(token);2 session.on("connected", function () {3 session.on('local', function (sender) {4 var id = sender.getReceiverToken();5 sender.on('close',function () {6 console.log("sender close");7 delete senders[id]8 });9 senders[id] = sender;

10 });11 session.on('remote', function (receiver) {12 receiver.on('message',function(message){13 var name = receiver.getSenderToken().substr(0,7);14 messageContent.scrollTop(messageContent[0].scrollHeight);15 messageContent.append('<p>'+name+' :'+message+'</p>');16 console.log("message:",message)17 });18 receiver.on('file',function(file){19 file.save();20 });21 }).on('in', function (token) {22 //data 为 true 时,连接后建立数据通道23 session.sendTo({to:token,data:true})24 });25 //data 为 true 时,连接后建立数据通道26 session.send({data:true});27 });28 session.connect();29

30 ...31 function broadcastMessage(message) {32 for(var i in senders){33 senders[i].sendMessage(message);34 }35 }36

37 function broadcastFile(file) {38 for(var i in senders){39 senders[i].sendFile(file);40 }41 }

• 连接 Session的方法请参考互动白板,这里不再赘述。连接 Session成功后,触发connected事件,连接成功的 Session可以通过 remote事件监听 Receiver,之后可通过 Receiver来接收消息和文件,再通过 in事件监听连入 Session的 Token,之后连入的 Token 可以通过 sendTo 方法发送数据通道。 这里通过 send 方法给所有

3.3. 样样样例例例程程程序序序 37

Page 42: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

Token发送数据通道。

• send 方法会和 Session 中的每一个 Token 建立一个通道,这个通道在发送端对应Sender ,在接收端对应 Receiver 。 因此发送端的 Sender 如果断开连接,与之相对应的接收端的 Receiver也会断开连接。 sendTo方法只与一个 Token建立通道。Sender 可以用于发送文件和发送消息,实时猫 JS SDK 目前只支持 Web 之间通过Sender和 Receiver发送消息和发送文件,如果需要各个平台相互发送消息,可以通过 Session实现。

• 开发者需要存储需要处理 Sender。

错错错误误误信信信息息息和和和日日日志志志

基基基本本本介介介绍绍绍

• 本例介绍实时猫 JS SDK错误信息处理和日志调试。

• 错误信息分为 开发错误,兼容性错误,使用错误。开发错误是开发者自己的错误操作照成的,这些错误信息会直接输出到控制台。兼容性错误为浏览器兼容性错误,浏览器兼容性错误并不影响使用。使用错误是开发者在使用实时猫 JS SDK时,实时猫 JSSDK内部出现了错误,大部分错误都可以通过 on('error')的方式捕捉。

错错错误误误信信信息息息

警警警告告告: 建议总是监听 error事件,以及时处理错误

常常常见见见开开开发发发者者者错错错误误误

• Uncaught TypeError: Uncaught, unspecified "error" event. 开发者没有对错误进行捕捉。

• failed: Error during WebSocket handshake: Unexpected responsecode: 403重复使用 Token

• failed: HTTP Authentication failed; no valid credentialsavailable无效 Token

• failed: Error during WebSocket handshake: Unexpected responsecode: 405 Session类型和 Token不匹配。

• failed: Error during WebSocket handshake: Unexpected responsecode: 406服务器不支持该类型的 Session

常常常见见见兼兼兼容容容性性性错错错误误误

• DOMException: Error processing ICE candidate

• DOMException: The play() request was interrupted by a call topause()

38 Chapter 3. Web / JavaScript

Page 43: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

错错错误误误代代代码码码

1xxxx: 流流流错错错误误误 10001:LOCAL_STREAM_NOT_INIT,

10002:REMOTE_STREAM_NOT_RECEIVED,

10003:STREAM_ALREADY_PLAYED,

10004:STREAM_ALREADY_STOPPED,

10005:LOCAL_STREAM_ACCEPTED_DENIES,

2xxxx: 会会会话话话错错错误误误 20001:TOKEN_IS_NULL,

20002:SESSION_CONNECT_ERROR’,

20003:PROTOCOL_ERROR,

20004:MESSAGE_TYPE_NOT_SUPPORTED,

20005:MESSAGE_LENGTH_OUT_LIMIT,

20006:LINK_WITHOUT_STREAM_ERROR,

3xxxx: 接接接收收收器器器错错错误误误 30001:INTERNAL_ERROR,

30002:CHANNEL_ERROR,

4xxxx: 发发发送送送器器器错错错误误误 40001:INTERNAL_ERROR,

40002:CHANNEL_ERROR,

40003:SEND_FILE_PARALLEL_ERROR,

40004:CHANNEL_NOT_OPEN,

40005:SENDER_NOT_CONNECTED

日日日志志志

• 发送端可以通过 sender.on('detect_audio') , sender.on('detect_video'), sender.on('detect_net') , sender.on('detect_video_bw') 分 别 监听 发 送 端 音 频 状 态 , 视 频 状 态 , 网 络 状 态 , 视 频 带 宽 状 态 。 目 前sender.on('detect_audio') , sender.on('detect_video') 合并成 sender.on('log') ,建议使用 sender.on('log')。

• 接 收 端 可 以 通 过 receiver.on('detect_audio') , receiver.on('detect_video') , receiver.on('detect_net') , receiver.on('detect_video_bw')分别监听接收端音频状态,视频状态,网络状态,视频带宽状态。目前 receiver.on('detect_audio') , receiver.on('detect_video')合并成 receiver.on('log') ,建议使用 receiver.on('log')。其中,接收端可通过 receiver.on('log')方法监听 mos,通过 mos来评估当前视频状况。

高高高级级级主主主题题题:::屏屏屏幕幕幕分分分享享享

基基基本本本介介介绍绍绍

• 本例介绍如何通过实时猫 JS SDK实现屏幕分享功能以及制作 Chrome和 Firefox插件。

3.3. 样样样例例例程程程序序序 39

Page 44: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

• 本例基于多人音视频通信。

• 使用本例前请先安装屏幕分享插件。

• 使用Chrome浏览器的用户可以通过谷歌商店 https://chrome.google.com/webstore/detail/realtimecat-screensharing/kopddpjmdlllnpkpcphndjiaohbakkjb?hl=zh-CN&gl=US安 装 插 件 。 国 内 用 户 也 可 以 下 载crx文 件 https://shishimao.com/rooms/downloads/RealTimeCat-ScreenSharing-Extension_v0.2.0.crx , 并 将 该 文 件 拖 拽 到 浏 览 器chrome://extensions页面安装。

• 使用Firefox浏览器的用户请通过火狐商店 https://addons.mozilla.org/en-US/firefox/addon/realtimecat-screensharing/安装插件

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_js_demo7

• 获取后请按Readme中的使用说明操作。

代代代码码码说说说明明明

列表 3.10: index.html

1 stream = new RTCat.Stream({type:'screen'});

• 将本地流类型换成 screen即可。这里 extensionId默认为 实时猫屏幕分享插件。

高高高级级级教教教程程程

制制制作作作和和和发发发布布布浏浏浏览览览器器器插插插件件件

• 从 https://github.com/RTCat/rtc-browser-extension.git clone项目源代码。

• 获取源代码后请按照README中说明操作。

参参参考考考文文文档档档

JavaScript SDK参参参考考考文文文档档档

点点点击击击访访访问问问 JavaScript SDK参参参考考考文文文档档档

本文档提供了实时猫JavaScript (Web)平台SDK的完整参考资料,包括全部函数,方法,事件的列表和用法。

40 Chapter 3. Web / JavaScript

Page 45: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

版版版本本本和和和更更更新新新

实时猫 Web (JavaScript) SDK当前版本为 v0.4

v0.4

0.4 新版功能: 增加 Mos 平均主观意见评分。 增加用户内部测试的服务器Relay 模式。 增加 localStream.release() 方法,用于回收本地流资源。 增加 rtcat.detect()用于测试浏览器兼容性和网速。 增加 stream.detectVolume()方法,用于检测音量。 增加以下事件

1.2.3.4.5.6. 1 Sender:2 sender.on('file_channel_open') 发文件通道打开3 sender.on('file_channel_close') 发文件通道关闭4 sender.on('file_channel_error') 发文件通道出错5

6 Receiver:7 receiver.on('file_channel_open') 发文件通道打开8 receiver.on('file_channel_close') 发文件通道关闭9 receiver.on('file_channel_error') 发文件通道出错

在 0.4 版更改: 将 Stream 分为 本地流 LocalStream 和 远程流RemoteStream , 本地流和远程流继承 抽象流 AbstractStream 修改LocalStream 构造函数 修改 Session 构造函数 stream.stop() 只回收播放器,可以用 play()重新播放,回收本地流资源需使用 localStream.release() 修改以下方法和事件名

1.2.3.4.5. 1 LocalStream:2 stream.on('access-accepted') -> stream.on('accepted')3 stream.on('access-failed') -> stream.on('error')4

5

6 Session:7 session.on('send_error') -> session.on('error')8 session.on('connect_error') -> session.on('error')9 session.on('channel_error') -> session.on('error')

10

11 Sender:12 sender.attr -> sender.getAttr()13 sender.getReceiver() -> sender.getReceiverToken()14 sender.on('file_sending_error') -> sender.on('error')15 sender.on('send_error') -> sender.on('error')16 sender.on('sender_connect_error') -> sender.on('error')17 sender.on('dataChannel_error') -> sender.on('channel_error')18 sender.on('dataChannel_close') -> sender.on('channel_close')19 sender.on('dataChannel_open') -> sender.on('channel_open')20

21 Receiver:22 receiver.attr -> receiver.getAttr()23 receiver.getSender() -> receiver.getSenderToken()24 receiver.on('receiver_connect_error') -> receiver.on('error')25 receiver.on('dataChannel_error') -> receiver.on('channel_error

→˓')26 receiver.on('dataChannel_close') -> receiver.on('channel_close

→˓')27 receiver.on('dataChannel_open') -> receiver.on('channel_open')

3.4. 参参参考考考文文文档档档 41

Page 46: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

0.4版后已移除: 移除 LocalStream.getCapture()

v0.3

0.3新版功能: 增加用户内部测试的服务器 Relay模式

在 0.3版更改: 修复和 Android端连接时, Android端无音视频的问题 修复 Firefox的兼容性问题

0.3版后已移除: 移除旧的RTCat.Detect对象

42 Chapter 3. Web / JavaScript

Page 47: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

CHAPTER 4

Android

简简简介介介和和和下下下载载载

基基基本本本介介介绍绍绍

当前实时猫 Android SDK最新版本为 0.6

实时猫 Android SDK提供以下基本功能:

1.1.1.2.1.• 仅支持 Android 4.1+(API 16)

• 音视频频通信

• 通过服务器的数据传输 (暂不支持文件传输)

• 点对点文件,数据传输

• 降噪处理

• 可自定义音频输出设备 ,并支持实时切换

• 可自定义摄像头设备,并支持实时切换 (部分x86设备可能出现不识别 USB摄像头的情况)

• 可自定义视频硬解码 (目前支持 VP8, VP9, H.264,Android默认使用 VP8编码)

• 摄像头自动对焦

• 视频和音频调试功能

• Android手机屏幕分享功能(支持 Android 5.0+ (API 21))

实时猫 Android SDK v0.4可以和实时猫Javascript SDK v0.3版本相互通信。

实时猫 Android SDK v0.5、v0.6 版本 可以和 实时猫Javascript SDK v0.4 版本、 实时猫iOS SDK v0.2相互通信。

43

Page 48: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

下下下载载载/引引引入入入

下载JAR文件v0.6

下载SO文件v0.6

推推推荐荐荐Android开开开发发发者者者使使使用用用/升升升级级级到到到v0.6 SDK

下载JAR文件v0.5

下载SO文件v0.5

用用用法法法

1.在 AndroidManifest.xml中增加以下权限

1 <uses-feature android:name="android.hardware.camera" />2 <uses-feature android:name="android.hardware.camera.autofocus" />3 <uses-feature android:glEsVersion="0x00020000" android:required="true"

→˓/>4

5 <uses-permission android:name="android.permission.CAMERA" />6 <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS

→˓" />7 <uses-permission android:name="android.permission.RECORD_AUDIO" />8 <uses-permission android:name="android.permission.INTERNET" />9 <uses-permission android:name="android.permission.WRITE_EXTERNAL_

→˓STORAGE"/>10 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE

→˓"/>11 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE

→˓"/>

注意 : 如果需要文件传输功能和蓝牙功能需要自行增加权限。

Android 6由于权限机制不同,需要开发者自行获得相机和麦克风权限,如需存储文件,请自行获得文件存储权限。

1 String[] permssions = {2 Manifest.permission.RECORD_AUDIO,3 Manifest.permission.CAMERA4 };5 ActivityCompat.requestPermissions(this,permssions, 111);

2.导入 jar和 so文件

以 Android Studio为例

44 Chapter 4. Android

Page 49: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

把 jar和 so文件移到如上图位置后,右键点击 jar文件,选择 Add As Library

3.通过实时猫开发者后台或者实时猫服务器 RESTful API获得 Session和 Token进行通信。具体实现请参考下面章节的样例程序。

前前前提提提知知知识识识

• 开发流程 (page 15)

• 客户端SDK开发 (page 20)

• 观察者设计模式 (Observer Pattern)

• 工厂设计模式 (Factory Pattern)

样样样例例例程程程序序序

获获获取取取本本本地地地音音音视视视频频频

基基基本本本介介介绍绍绍

• 本例通过 实时猫 Android SDK 实现获取并播放本地流以及本地流的其它高级使用方法。

4.2. 样样样例例例程程程序序序 45

Page 50: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_android_demo1

• 获取后请按 README中的使用说明操作。

代代代码码码说说说明明明

列表 4.1: AndroidManifest.xml

1 <uses-feature android:name="android.hardware.camera" />2 <uses-feature android:name="android.hardware.camera.autofocus" />3 <uses-feature android:glEsVersion="0x00020000" android:required="true"

→˓/>4

5 <uses-permission android:name="android.permission.CAMERA" />6 <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS

→˓" />7 <uses-permission android:name="android.permission.RECORD_AUDIO" />8 <uses-permission android:name="android.permission.INTERNET" />9 <uses-permission android:name="android.permission.WRITE_EXTERNAL_

→˓STORAGE"/>10 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE

→˓"/>11 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE

→˓"/>

• 增加权限, Android 6还需要增加如下运行时权限。

列表 4.2: MainActivity.java

1 String[] permssions = {2 Manifest.permission.RECORD_AUDIO,3 Manifest.permission.CAMERA4 };5 ActivityCompat.requestPermissions(this,permssions, 111);

列表 4.3: MainActivity.java

1 videoPlayer =(VideoPlayer)findViewById(R.id.video_player);2 cat = new RTCat(MainActivity.this,true,true,true,false,

→˓AppRTCAudioManager.AudioDevice.SPEAKER_PHONE,RTCat.CodecSupported.H264,→˓L.VERBOSE);

3 cat.addObserver(new RTCat.RTCatObserver() {4 @Override5 public void init() {6 isRTCatInit = true;7 }8 });9 cat.init();

• RTCat为 实时猫 Android SDK入口。通过 RTCat配置实时猫 Android SDK相关参数,具体内容请参考文档。

• RTCat.RTCatObserver.init接口,在 RTCat初始化完成时调用。

• RTCat.init方法用于初始化 RTCat。

46 Chapter 4. Android

Page 51: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

列表 4.4: MainActivity.java

1 localStream = cat.createStream(true,true,15,RTCat.VideoFormat.Lv9,→˓LocalStream.CameraFacing.FRONT);

2 localStream.addObserver(new LocalStream.StreamObserver() {3 @Override4 public void afterSwitch(boolean b) {5

6 }7

8 @Override9 public void error(Errors errors) {

10

11 }12

13 @Override14 public void accepted() {15 localStream.play(videoPlayer);16 }17 });18 localStream.init();

• LocalStream 为 本地流 ,通过 LocalStream 构造函数配置 本地流 相关属性,如分辨率,fps,摄像头朝向等,具体内容请参考文档。然后通过 init() 初始化LocalStream。初始化成功后触发 accepted事件,最后在播放器中播放本地流。

• VideoPlayer用于播放流, VideoPlayer在使用前,需要通过 RTCat初始化。

列表 4.5: MainActivity.java

1 if(localStream != null){2 localStream.release();3 localStream = null;4 }5

6 if(videoPlayer != null)7 {8 videoPlayer.release();9 videoPlayer = null;

10 }11

12 if (cat !=null){13 cat.release();14 cat = null;15 }

• 本地流,播放器,RTCat用完需要按顺序回收。

高高高级级级主主主题题题

切切切换换换摄摄摄像像像头头头

4.2. 样样样例例例程程程序序序 47

Page 52: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

列表 4.6: MainActivity.java

1 localStream.switchCamera();

• 通过 switchCamera()方法切换摄像头。

视视视频频频截截截图图图功功功能能能

列表 4.7: MainActivity.java

1 localStream.takePicture(new LocalStream.CaptureCallback() {2 @Override3 public void onCapture(final Bitmap bm) {4 runOnUiThread(new Runnable() {5 @Override6 public void run() {7 iv.setImageBitmap(bm);8 }9 });

10 }11 });

• localStream.takePicture 方 法 通 过 LocalStream.CaptureCallback.onCapture回调返回截图后的 Bitmap

互互互动动动白白白板板板

基基基本本本介介介绍绍绍

• 本例通过实时猫 Android SDK实现互动白板功能。

• 本例主要为了介绍 Session通信功能,比如如何建立连接,发送数据等。关于白板的具体实现方法,请参见 Demo。

• 本例为互动白板最小实现,不包含错误处理。

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_android_demo2

• 获取后请按 README中的使用说明操作。

代代代码码码说说说明明明

列表 4.8: MainActivity.java

1 RTCatRequests requests = new RTCatRequests(Config.APIKEY, Config.SECRET);2 token = requests.getToken(Config.SESSION, "pub");3 session = cat.createSession(token, Session.SessionType.P2P);4

5 session.addObserver(new Session.SessionObserver() {

48 Chapter 4. Android

Page 53: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

6 @Override7 public void in(String token) {8

9 }10

11 @Override12 public void out(String token) {13

14 }15

16 @Override17 public void connected(ArrayList wits) {18

19 }20

21 @Override22 public void remote(Receiver receiver) {23

24 }25

26 @Override27 public void local(Sender sender) {28

29 }30

31 @Override32 public void message(String token, final String message) {33 runOnUiThread(new Runnable() {34 @Override35 public void run() {36 paintView.receiveFromOthers(message);37 }38 });39 }40

41 @Override42 public void error(String s) {43 Log.e(TAG,s);44 }45

46 @Override47 public void close() {48 finish();49 }50 });51

52 session.connect();

• 使用 RTCatRequests对象获取会话 Token。

• 使用 RTCat.createSession方法,凭借获取的 Token创建会话对象。

• Session.addObserver用于监听 Session事件。

• 在 Session 连接成功之后,即可通过 Session.sendMessage 或 Session.broadcastMessage发送消息。

4.2. 样样样例例例程程程序序序 49

Page 54: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

列表 4.9: MainActivity.java

1 public void broadcastMessage(String msg){2 session.broadcastMessage(null,msg);3 }

• 通过 broadcastMessage 发送消息,通过 Session.SessionObserver.message接收消息。

多多多人人人音音音视视视频频频通通通信信信

基基基本本本介介介绍绍绍

• 本例通过实时猫 Android SDK实现多人音视频通信。

• 因为手机性能的限制,建议连接 Android端连接数不超过 6。本例限制连接 4人。

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_android_demo3

• 获取后请按 README中的使用说明操作。

代代代码码码说说说明明明

列表 4.10: MainActivity.java

1 class SessionHandler implements SessionObserver {2 @Override3 public void in(String token) {4

5 ...6 if (session.getWits().size() < 3)7 {8 session.sendTo(localStream,true,null, token);9 }

10 }11

12 ...13

14 @Override15 public void connected(ArrayList wits) {16 l("connected main");17

18 String wit = "";19 for (int i = 0; i < wits.size(); i++) {20 if( i == 3)21 {22 break;23 }24 try {25 wit = wit + wits.get(i);26

50 Chapter 4. Android

Page 55: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

27 } catch (Exception e) {28 e.printStackTrace();29 }30 }31

32 session.send(localStream,true,null);33 }34

35 @Override36 public void remote(final Receiver receiver) {37 try {38 receivers.put(receiver.getId(), receiver);39

40 receiver.addObserver(new ReceiverObserver() {41 ...42 });43

44 receiver.response();45 } catch (Exception e) {46 l(e.toString());47 }48

49

50 }51

52 @Override53 public void local(final Sender sender) {54 senders.put(sender.getId(), sender);55 sender.addObserver(new SenderObserver() {56 ...57 });58 }59 }

代代代码码码说说说明明明

• 创建本地流和连接 Session 的方法请参考 获得本地流 和 互动白板 ,这里不再赘述。连接 Session 成功后,触发 SessionObserver.connected,回调返回所有已连入Session 的 Token。此时可以通过 session.send 给 Session 中的所有 Token 发送本地流。当有新的 Token``连入时,触发 ``SessionObserver.in,回调返回连入 Session的 Token。此时可以通过 session.sendTo给新连入的 Token发送本地流。

• session.send 方法会和 Session 中的每一个 Token 建立一个通道,这个通道在发送端对应 Sender ,在接收端对应 Receiver 。sendTo 方法只与一个 Token 建立通道。连接成功后,通过 SessionObserver.local,回调返回连入 Sender,通过SessionObserver.remote,回调返回连入 Receiver。

文文文字字字聊聊聊天天天

基基基本本本介介介绍绍绍

• 本例通过实时猫 Android SDK实现文字聊天。

4.2. 样样样例例例程程程序序序 51

Page 56: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

• 本例可和 Web的文字聊天互通。

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_android_demo4

• 获取后请按 README中的使用说明操作。

代代代码码码说说说明明明

列表 4.11: MainActivity.java

1 public void sendMessage(View view){2 String message = editText.getText().toString().trim();3 textView.append("self :" + message + "\r\n");4 editText.setText("");5 for(Map.Entry<String, Sender> entry : senders.entrySet()) {6 String key = entry.getKey();7 Sender value = entry.getValue();8 value.sendMessage(message);9 // do what you have to do here

10 // In your case, an other loop.11 }12 }13

14 @Override15 public void remote(final Receiver receiver) {16 try {17 receivers.put(receiver.getId(), receiver);18

19 receiver.addObserver(new Receiver.ReceiverObserver() {20 ...21

22 @Override23 public void message(final String message) {24 Log.d(TAG,message);25 runOnUiThread(new Runnable() {26 @Override27 public void run() {28 textView.append(receiver.getSenderToken().

→˓substring(0,7) + ":" + message + "\r\n");29 }30 });31

32

33 }34

35 ...36 });37

38 receiver.response();39 } catch (Exception e) {40 l(e.toString());41 }42

52 Chapter 4. Android

Page 57: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

43

44 }

• 通 过 sender.sendMessage 发 送 消 息 , 然 后 接 收 方 通 过 Receiver.ReceiverObserver.message 方法接收消息。消息文本长度限制为 1024 *256。

错错错误误误信信信息息息和和和日日日志志志

基基基本本本介介介绍绍绍

• 本例介绍实时猫 Android SDK错误信息处理和日志调试。

• 错误信息分为 开发错误 ,使用错误。开发错误是开发者自己的错误操作照成的,这些错误信息会直接输出到控制台。使用错误是开发者在使用实时猫 Android SDK时,实时猫 Android SDK内部出现了错误,由每个对象的 Observer.error捕捉。

常常常见见见开开开发发发者者者错错错误误误

错错错误误误代代代码码码

日日日志志志

高高高级级级主主主题题题:::音音音视视视频频频编编编解解解码码码

基基基本本本介介介绍绍绍

• 本例通过实时猫 Android SDK实现视频编码选择。

• 实时猫 Android SDK目前不支持音频编码选择。

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_android_demo6

• 获取后请按Readme中的使用说明操作。

代代代码码码说说说明明明

• RTCat.isVp8HwEncodeSupported , RTCat.isVp9HwEncodeSupported , RTCat.isH264HwEncodeSupported用于判断是否支持该类型的硬件编解码器。

• 通过 RTCat构造函数设置编码类型。

高高高级级级主主主题题题:::仿仿仿微微微信信信布布布局局局

基基基本本本介介介绍绍绍

• 本例通过实时猫 Android SDK实现类似微信的视频窗口的布局变化。

4.2. 样样样例例例程程程序序序 53

Page 58: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

• 本例基于多人音视频通信。

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_android_demo7

• 获取后请按 README中的使用说明操作。

代代代码码码说说说明明明

列表 4.12: TestMainActivity.java

1 localVideoPlayer = (VideoPlayer) findViewById(R.id.local_video_render);2 localRenderLayout = (VideoPlayerLayout) findViewById(R.id.local_video_

→˓layout);3 localRenderLayout.setPosition(0,0,100,100);4

5 remoteVideoPlayer = (VideoPlayer) findViewById(R.id.remote_video_render);6 remoteRenderLayout = (VideoPlayerLayout) findViewById(R.id.remote_video_

→˓layout);7 remoteRenderLayout.setPosition(0,0,0,0);

• 在只有本地视频情况下,将本地的视频窗口大小设置为全屏,远程视频窗口大小设置为0。

列表 4.13: TestMainActivity.java

1 public void stream(final Stream stream) {2 runOnUiThread(new Runnable() {3 @Override4 public void run() {5 if(isRemotePlay)6 return;7 t(receiver.getFrom() + " stream");8 cat.initVideoPlayer(remoteVideoPlayer);9 remoteRenderLayout.setPosition(0,0,100,100);

10 localRenderLayout.setPosition(60,0,40,40);11 localVideoPlayer.setZOrderMediaOverlay(true);12 localVideoPlayer.requestLayout();13 stream.play(remoteVideoPlayer);14 isRemotePlay = true;15 }16 });17 }

• 当有远程视频连入时,在 Receiver.ReceiverObserver.stream中,修改布局。

列表 4.14: TestMainActivity.java

1 public void out(final String token) {2 runOnUiThread(new Runnable() {3 @Override4 public void run() {5 l(token + " is out");6 remoteRenderLayout.setPosition(0,0,0,0);7 localRenderLayout.setPosition(0,0,100,100);

54 Chapter 4. Android

Page 59: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

8 remoteVideoPlayer.requestLayout();9 remoteVideoPlayer.release();

10 isRemotePlay = false;11 }12 });13 }

• 当有远程视频断开时,在 Session.SessionObserver.out中,修改布局。

高高高级级级主主主题题题:::发发发送送送文文文件件件

基基基本本本介介介绍绍绍

• 本例 README通过实时猫 Android SDK实现发送文件功能。

• 目前支持 10M以下大小的文件传输

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_android_demo7

• 获取后请按 Readme中的使用说明操作。

代代代码码码说说说明明明

列表 4.15: MainActivity.java

1 fileSend = new File(sendFilePath);2

3 for (Sender sender:senders4 ) {5 sender.sendFile(fileSend);6 }

• 通过Sender.sendFile发送文件

列表 4.16: MainActivity.java

1 public void remote(final Receiver receiver) {2 try {3 receivers.add(receiver);4

5 receiver.addObserver(new Receiver.ReceiverObserver() {6 @Override7 public void stream(RemoteStream remoteStream) {8

9 }10

11 @Override12 public void message(final String s) {13

14 }15

4.2. 样样样例例例程程程序序序 55

Page 60: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

16 @Override17 public void close() {18

19 }20

21 @Override22 public void error(Errors errors) {23

24 }25

26 @Override27 public void log(JSONObject jsonObject) {28

29 }30

31

32 @Override33 public void file(final File file) {34 runOnUiThread(new Runnable() {35 @Override36 public void run() {37

38 receiveFileNameText.setText(file.→˓getAbsolutePath());

39 }40 });41 fileReceive = file;42 //TODO File43 }44 });45

46 receiver.response();47 } catch (Exception e) {48 Log.e(TAG,e.getMessage());49 }50 }51

52 @Override53 public void local(Sender sender) {54 senders.add(sender);55 sender.addObserver(new Sender.SenderObserver() {56 @Override57 public void close() {58

59 }60

61 @Override62 public void error(Errors errors) {63

64 }65

66 @Override67 public void log(JSONObject o) {68

69 }70

71 @Override

56 Chapter 4. Android

Page 61: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

72 public void fileSending(final int x) {73 runOnUiThread(new Runnable() {74 @Override75 public void run() {76 sendFileProgressText.setText(x + "%");77 }78 });79 }80

81 @Override82 public void fileFinished() {83 runOnUiThread(new Runnable() {84 @Override85 public void run() {86 //TODO87 sendFileNameText.setText(sendFilePath);88 }89 });90 }91 });92 }

• 在 ReceiverObserver中,检测 fileReceiving事件,用于文件的接受。

• 在 SenderObserver中,监测 fileSending和 fileFinished事件,用于观察文件发送进度。

高高高级级级主主主题题题:::屏屏屏幕幕幕分分分享享享

基基基本本本介介介绍绍绍

• 本例 README通过实时猫 Android SDK实现屏幕分享功能。

• 只支持 Android5.0以上系统版本。

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_android_demo10

• 获取后请按 Readme中的使用说明操作。

代代代码码码说说说明明明

列表 4.17: MainActivity.java

1 MediaProjectionManager manager =→˓(MediaProjectionManager)getSystemService(Context.MEDIA_PROJECTION_→˓SERVICE);

2 Intent intent = manager.createScreenCaptureIntent();3 startActivityForResult(intent, SCREEN_REQUEST_CODE);

• 在 Activity发起屏幕捕获请求。

4.2. 样样样例例例程程程序序序 57

Page 62: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

列表 4.18: MainActivity.java

1 @Override2 protected void onActivityResult(int requestCode, int resultCode, Intent

→˓data) {3 if(requestCode == SCREEN_REQUEST_CODE){4 if(resultCode == RESULT_OK){5 localStream = rtCat.createStream(true,true,userFps,userWidth,

→˓userHeight,data);6 //TODO localstream7 }else {8 //TODO handle refuse9 }

10 }else{11 ...12 }13 }

• 在 用 户 选 择 同 意 屏 幕 分 享 后 , 通 过 onActivityResult , 使 用 RTCat.createStream方法创建屏幕分享流。

参参参考考考文文文档档档

Android SDK参参参考考考文文文档档档

点点点击击击访访访问问问 Android SDK参参参考考考文文文档档档

本文档提供了实时猫Android平台SDK的完整参考资料,包括全部函数,方法,事件的列表和用法。

版版版本本本和和和更更更新新新

v0.6

0.6新版功能: 修复低版本 Android的消息和文件传输Bug

1.2. 增增增加加加屏屏屏幕幕幕分分分享享享功功功能能能,本本本地地地流流流(((LocalStream)增增增加加加屏屏屏幕幕幕分分分享享享流流流的的的构构构建建建方方方法法法

(a) 屏屏屏幕幕幕分分分享享享:::首首首先先先创创创建建建 ScreenCaptureIntent,,,发发发起起起屏屏屏幕幕幕捕捕捕获获获请请请求求求,,,在在在此此此 ActivityResult中中中创创创建建建屏屏屏幕幕幕分分分享享享的的的本本本地地地流流流(LocalStream)

1 protected void onCreate(Bundle savedInstanceState) {2 ....3 MediaProjectionManager manager =

→˓(MediaProjectionManager)TestScreenShareActivity.this.→˓getSystemService(Context.MEDIA_PROJECTION_SERVICE);

4 Intent intent = manager.createScreenCaptureIntent();5 TestScreenShareActivity.this.

→˓startActivityForResult(intent, SCREEN_REQUEST_CODE);6 }7

58 Chapter 4. Android

Page 63: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

8 protected void onActivityResult(int requestCode, int→˓resultCode, Intent data) {

9 if(requestCode == SCREEN_REQUEST_CODE){10 if(resultCode == RESULT_OK){11 localStream = rtCat.createStream(true,true,

→˓userFps,userWidth,userHeight,data);12 //TODO localstream13 }else {14 //TODO handle refuse15 }16 }else{17 ...18 }19 }

在 0.6版更改:

1. 修修修改改改日日日志志志信信信息息息输输输出出出形形形式式式:

(a) SenderObserver 的 log(JSONObject json) 修改为 log(WebRTCLog.SenderClientLog log) 用于日志信息获取

(b) ReceiverObserver 的 log(JSONObject json) 修 改 为log(WebRTCLog.ReceiverClientLog log)用于日志信息获取

2. 修修修改改改文文文件件件传传传输输输接接接口口口:

(a) SenderObserver删除 fileSending(int x)方法

(b) ReceiverObserver 删 除 file(File file) 方 法 。 增 加receiveFile(String fileName)、receiveFileFinish(File file)方法

(c) receiveFile(String fileName) 在收到 Sender 的文件传输请求时触发, receiveFileFinish(File file)在文件传输完成时触发

(d) Receiver增加 responseFile()方法,用于响应文件传输请求

v0.5

0.5新版功能: Receiver日志增加 mos

1.2. 增增增加加加文文文件件件传传传输输输功功功能能能:

(a) Sender增加 sendFile(File file)方法

1 //目前支持最大传输 10M2 sender.sendFile(file);

(b) ReceiverObserver增加 file(File file)方法,用于接受文件

1 @Override2 public void file(final File file) {3 runOnUiThread(new Runnable() {4 @Override5 public void run() {6 receiveFileNameText.setText(file.

→˓getAbsolutePath());7 }8 });

4.3. 参参参考考考文文文档档档 59

Page 64: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

9 fileReceive = file;10 //TODO File11 }

(c) SenderObserver增加 fileSending(int x)和 fileFinished()两个方法,用于检测文件发送进度

1 @Override2 public void fileSending(final int x) {3 runOnUiThread(new Runnable() {4 @Override5 public void run() {6 sendFileProgressText.setText(x + "%");7 }8 });9 }

10

11 @Override12 public void fileFinished() {13 runOnUiThread(new Runnable() {14 @Override15 public void run() {16 //TODO17 sendFileNameText.setText(sendFilePath);18 }19 });20 }

在 0.5 版更改: 本地流需要先进行初始化 init() ,初始化成功后触发accepted() 修改以下方法名:

1.2. 1 Sender:2 sender.getTo() -> sender.getReceiverToken()3

4 Receiver:5 receiver.getFrom() -> receiver.getSenderToken()6

7 LocalStream:8 localStream.dispose() -> localStream.release()

3. RtCat类中,检测硬件支持编解码方法修改为静态方法

4. RTCat类中,增加 addObserver和 init两个方法

5. RTCat类中,修改初始化方式

1 cat = new RTCat(TestLocalStreamActivity.this,true,true,true,→˓false, AppRTCAudioManager.AudioDevice.SPEAKER_PHONE,RTCat.→˓CodecSupported.H264, L.VERBOSE);

2 cat.addObserver(new RTCat.RTCatObserver() {3 @Override4 public void init() {5 runOnUiThread(new Runnable() {6 @Override7 public void run() {8 //createLocalStream();9 }

60 Chapter 4. Android

Page 65: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

10 });11 }12 });13 cat.init();

0.5版后已移除.

v0.4

0.4新版功能: 支持Android 6.0 增加本地视频流截屏功能

v0.3

0.3新版功能: 更好地兼容部分品牌(小米,魅族,酷派等)的低端设备 修复v0.2在部分机型中崩溃的问题

v0.2

0.2 新版功能: 增加音频输出设备切换功能 增加视频硬编码选择功能,目前支持 VP8 ,VP9和 H.264 增加摄像头自动对焦功能

4.3. 参参参考考考文文文档档档 61

Page 66: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

62 Chapter 4. Android

Page 67: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

CHAPTER 5

iOS

简简简介介介和和和下下下载载载

实时猫 iOS SDK已于 2016.11.9完成更新。

基基基本本本介介介绍绍绍

当前实时猫 iOS SDK最新版本为 0.2

实时猫 iOS SDK提供以下基本功能:

1.2.1.2.1.2.3.• 支持 iPhone 4S+, iPad 2+,以及 iOS 6+ .

• 音视频通信

• 通过服务器的数据传输 (暂不支持文件传输)

• 点对点文件和数据传输

• 降噪处理

• 可自定义音频输出设备,并支持实时切换

• 可自定义摄像头设备,并支持实时切换

• 摄像头自动对焦

• 可自定义视频硬解码 (目前支持 VP8, VP9, H.264,iOS默认使用 H.264编码)

• 摄像头自动对焦

• 视频和音频调试功能

实时猫 iOS SDK v0.2可以和实时猫Javascript SDK v0.4 ,实时猫 Android SDK v0.5版本相互通信。

63

Page 68: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

下下下载载载/引引引入入入

下载Framework文件v0.2

用用用法法法

1. 建议使用 Xcode 8,在 Build Phases -> Link Binary With Libraries 中,导入以下系统 Framework和实时猫 iOS SDK,效果如下图:

• RTCatSDK.framework

• AudioToolbox.framework

• AVFoundation.framework

• CoreGraphics.framework

• CoreMedia.framework

• CoreVideo.framework

• GLKit.framework

• libicucore.dylib (libicucore.A.tbd in Xcode 7+)

• libc++.dylib (libc++.tbd in Xcode 7+)

• libsqlite3.dylib (libsqlite3++.tbd in Xcode 7+)

• OpenGLES.framework

• QuartzCore.framework

• UIKit.framework

• VideoToolbox.framework

64 Chapter 5. iOS

Page 69: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

2. 把 Build Settings -> Other Linker Flags改为 -all_load

注注注::: 实时猫 iOS SDK 目前不支持 bitcode , 需修改 Build Settings -> EnableBitcode为 No,如下图:

在 iOS 10 以上系统需要获得 摄摄摄像像像头头头 和 麦麦麦克克克风风风 权限,需要在 Info.plist 中添加如下信息:

1 <?xml version="1.0" encoding="UTF-8"?>2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.

→˓com/DTDs/PropertyList-1.0.dtd">3 <plist version="1.0">4 <dict>

5.1. 简简简介介介和和和下下下载载载 65

Page 70: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

5 ...6 <key>NSCameraUsageDescription</key>7 <string>摄像头权限</string>8 <key>NSMicrophoneUsageDescription</key>9 <string>麦克风权限</string>

10 </dict>11 </plist>

前前前提提提知知知识识识

参参参见见见:

开发流程 (page 15)

客户端SDK开发 (page 20)

警警警告告告: 实时猫 iOS SDK正在更新中,将于 2016年10月发布最新版本。

旧版本下载链接 [https://cdn.realtimecat.com/realtimecat/rtc-ios-sdk-0.1.zip]

样样样例例例程程程序序序

获获获取取取本本本地地地音音音视视视频频频

基基基本本本介介介绍绍绍

• 本例通过实时猫 iOS SDK实现获取并播放本地流以及本地流的其它高级使用方法。

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_ios_demo1

• 获取后请按 README中的使用说明操作。

代代代码码码说说说明明明

列表 5.1: info.plist

1 <?xml version="1.0" encoding="UTF-8"?>2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.

→˓com/DTDs/PropertyList-1.0.dtd">3 <plist version="1.0">4 <dict>5 ...6 <key>NSCameraUsageDescription</key>7 <string>摄像头权限</string>8 <key>NSMicrophoneUsageDescription</key>9 <string>麦克风权限</string>

66 Chapter 5. iOS

Page 71: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

10 </dict>11 </plist>

• 在 iOS 10以上系统需要获得摄摄摄像像像头头头和麦麦麦克克克风风风权限,需要在 Info.plist中添加如上信息。

列表 5.2: ViewController.m

1 RTCatVideoPlayer *_localPlayer;2 _localPlayer = [[RTCatVideoPlayer alloc] initWithFrame:rLocal];3 _localPlayer.delegate = self;4 [_videoContainer addSubview:_localPlayer.view];5 RTCat *_cat = [RTCat shareInstance];6 _stream = [_cat createStreamWithVideo:YES audio:YES facing:RTCAT_

→˓CAMERA_FRONT fps:15 height:rLocal.size.height width:rLocal.size.width];7 [_stream playWithPlayer:_localPlayer];8 [self.view addSubview:_localPlayer.view];

列表 5.3: 1.Get-Local-Stream/ViewController.swift

1 cat = RTCat.shareInstance()2 localStream = cat.createStream(withVideo: true, audio: true)3 videoPlayer = RTCatVideoPlayer.init(frame: UIScreen.main.bounds, type:

→˓RTCatVideoPlayerType.RTCAT_REMOTE_VIDEO_PLAYER)4 videoPlayer.delegate = self5 localStream.play(with: videoPlayer)6 self.view.addSubview(videoPlayer.view)

• RTCat为 实时猫 iOS SDK入口。

• RTCatLocalStream为 本地流。可配置本地流的相关属性,如分辨率,FPS等。

• RTCatVideoPlayer用于播放流。

高高高级级级主主主题题题

切切切换换换摄摄摄像像像头头头

列表 5.4: ViewController.m

1 [_stream switchCamera];

• 通过 switchCamera方法切换摄像头。

视视视频频频窗窗窗口口口大大大小小小自自自适适适应应应

列表 5.5: ViewController.m

1 -(void)didChangeVideoSize:(RTCatVideoPlayer *)videoPlayer→˓Size:(CGSize)size{

2 CGRect bounds = _videoContainer.bounds;3

4

5 float A_W = bounds.size.width;

5.2. 样样样例例例程程程序序序 67

Page 72: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

6 float A_H = bounds.size.height;7

8 float B_W = size.width;9 float B_H = size.height;

10

11 float W,H;12

13 if(A_W/A_H < B_W/B_H){ //定宽14 W = A_W;15 H = W * B_H/B_W;16 }else{ //定高17 H = A_H;18 W = H * B_W/B_H;19 }20

21 bounds.size.width = W;22 bounds.size.height = H;23

24 _localPlayer.view.frame = bounds;25 _localPlayer.view.center = CGPointMake(CGRectGetMidX(bounds),

→˓CGRectGetMidY(bounds));26

27 [self.view setNeedsLayout];28 }

列表 5.6: 1.Get-Local-Stream/ViewController.swift

1 func didChangeVideoSize(_ videoPlayer: RTCatVideoPlayer!, size:→˓CGSize) {

2 var bounds = self.view.bounds3 let A_W = bounds.size.width4 let A_H = bounds.size.height5

6 let B_W = size.width7 let B_H = size.height8

9 var W:CGFloat,H:CGFloat10

11 if(A_W/A_H > B_W/B_H){ //定宽12 W = A_W13 H = W * B_H/B_W14 }else{ //定高15 H = A_H16 W = H * B_W/B_H17 }18

19 bounds.size.width = W20 bounds.size.height = H21

22 videoPlayer.view.frame = bounds23 videoPlayer.view.center = CGPoint.init(x: bounds.midX, y: bounds.

→˓midY)24

25 self.view.setNeedsLayout()26 }

• 通过监听 RTCatVideoPlayer.delegate的 didChangeVideoSize方法,获取视频

68 Chapter 5. iOS

Page 73: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

的大小,从而进行计算并调整视频播放器的大小。

互互互动动动白白白板板板

基基基本本本介介介绍绍绍

• 本例通过实时猫 iOS SDK实现互动白板功能。

• 本例主要为了介绍 Session通信功能,比如如何建立连接,发送数据等。关于白板的具体实现方法,请参见 Demo。

• 本例为互动白板最小实现,不包含错误处理。

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_ios_demo2

• 获取后请按 README中的使用说明操作。

代代代码码码说说说明明明

列表 5.7: ViewController.m

1 session = [cat createSessionWithToken:tokenId];2 [session addDelegate:self];3 [session connect];

列表 5.8: 2.White-Board/ViewController.swift

1 session = cat.createSession(withToken: tokenId)2 session.add(_:self);3 session.connect()

• 使用 RTCat createSessionWithToken 方法,凭借获取的 Token 创建会话RTCatSession对象。

• 使用 RTCatSession connect方法,进入 Session。

• RTCatSession addDelegate用于监听 RTCatSession的委托事件。

列表 5.9: ViewController.m

1 @implementation ViewController(SessionDelegate)2

3 -(void)session:(RTCatSession*)session in:(NSString *)token{4 NSLog(@"%@ is in",token);5 }6

7

8 -(void)session:(RTCatSession*)session out:(NSString *)token{9 NSLog(@"%@ is out",token);

10 }11

12 -(void)session:(RTCatSession*)session connected:(NSArray *)tokens{13 NSLog(@"connected");

5.2. 样样样例例例程程程序序序 69

Page 74: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

14 }15

16 -(void)session:(RTCatSession *)session message:(NSString *)message→˓from:(NSString *)token{

17 NSData *data = [message dataUsingEncoding:NSUTF8StringEncoding];18 NSError *error = nil;19 id object = [NSJSONSerialization20 JSONObjectWithData:data21 options:022 error:&error];23

24 if([object isKindOfClass:[NSDictionary class]])25 {26 NSDictionary *results = object;27 NSString *type = [results objectForKey:@"point"];28 float x = [[results objectForKey:@"x"] floatValue];29 float y = [[results objectForKey:@"y"] floatValue];30

31 [_whiteBoard drawOtherHandle:type X:x Y:y];32 }33 }

列表 5.10: 2.White-Board/ViewController.swift

1 func session(_ session: RTCatSession!, connected tokens: [Any]!) {2 print("session is connected")3 }4

5 func session(_ session: RTCatSession!, in token: String!) {6 print("\(token) is in")7 }8

9 func session(_ session: RTCatSession!, out token: String!) {10 print("\(token) is out")11 }12

13

14 func session(_ session: RTCatSession!, message: String!, from token:→˓String!) {

15 let data = message.data(using: String.Encoding.utf8)16 let object: Any? = try? JSONSerialization.jsonObject(with: data!,

→˓options: [])17 if (object is [AnyHashable: Any]) {18 var results = object as! [AnyHashable : Any]?19 let type = (results?["point"] as? String)20 let x = (results?["x"]) as? Float21 let y = (results?["y"]) as? Float22 self.whiteBoard.drawOtherHandle(type, x: x!, y: y!)23 }24 }

• 在 RTCatSessionDelegate中,可以监听会话的中产生的事件,例如其他人的进入、退出、错误等。

• 在本例中,通过 RTCatSessionDelegate sessionMessage方法,接受画板绘制消息后进行处理。

70 Chapter 5. iOS

Page 75: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

列表 5.11: ViewController.m

1 [session broadcastMessage:message];

• 通过 RTCatSession broadcastMessage发送消息。

多多多人人人音音音视视视频频频通通通信信信

基基基本本本介介介绍绍绍

• 本例通过实时猫 iOS SDK实现多人音视频通信。

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_ios_demo3

• 获取后请按 README中的使用说明操作。

代代代码码码说说说明明明

列表 5.12: ViewController.m

1 -(void)session:(RTCatSession *)session local:(RTCatSender *)sender{2 sender.delegate = self;3 }4

5 -(void)session:(RTCatSession *)session remote:(RTCatReceiver *)receiver{6 receiver.delegate = self;7 [receiver response];8 }

列表 5.13: 3.Multi-Party/ViewController.swift

1 func session(_ session: RTCatSession!, local sender: RTCatSender!) {2 sender.delegate = self3 }4

5 func session(_ session: RTCatSession!, remote receiver: RTCatReceiver!) {6 receiver.delegate = self7 receiver.response()8 }

• 在 RTCatSessionDelegate中,监听 sessionLocal和 sessionRemote事件。在sessionLocal 中添加对 Sender 的委托,在 sessionRemote 中添加对 Receiver的委托。

• Sender是发送端的对象,其 RTCatSenderDelegate用于监听发送端的事件,例如连接关闭、错误、及信息日志。

• Receiver是接受端的对象,使用 Receiver response方法回应发送端的数据连接请求。其 RTCatReceiverDelegate用于监听接收端的事件,除了和发送端相同的连接关闭、错误、及信息日志事件之外。更重要的是用于接受发送端传送的数据,例如音视频流、文字消息、以及文件。

5.2. 样样样例例例程程程序序序 71

Page 76: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

列表 5.14: ViewController.m

1 -(void)receiver:(RTCatReceiver *)receiver stream:(RTCatRemoteStream→˓*)stream{

2 dispatch_async(dispatch_get_main_queue(), ^{3 [self playStream:[receiver getSenderToken] stream:stream];4 });5 }6

7 @end

列表 5.15: 3.Multi-Party/ViewController.swift

1 func receiver(_ receiver: RTCatReceiver!, stream: RTCatRemoteStream!) {2 self.playStream(receiver.getSenderToken(), stream)3 }

• 在此样例中, RTCatReceiverDelegate主要用于接受音视频流。

• 具体远程视频的播放位置,大小排布等处理方式,请参考 Demo。

文文文字字字聊聊聊天天天

基基基本本本介介介绍绍绍

• 本例通过实时猫 iOS SDK实现文字聊天。

下下下载载载源源源代代代码码码

• 源码地址为:https://github.com/RTCat/rtcat_ios_demo4

• 获取后请按 README中的使用说明操作。

代代代码码码说说说明明明

列表 5.16: ViewController.m

1 for (RTCatSender *sender in senders) {2 NSLog(@"send message %@ to %@ ",mes,[sender getReceiverToken]);3 [sender sendMessage:mes];4 }

列表 5.17: 4.Message/MessageViewController.m

1 for sender in senders {2 sender.sendMessage(mes)3 }

• 通过 RTCatSender sendMessage发送消息。此样例中使用群发模式。在具体应用中可以通过使用不同的 RTCatSender对象发送给不同的接受者。

72 Chapter 5. iOS

Page 77: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

列表 5.18: ViewController.m

1 -(void)receiver:(RTCatReceiver *)receiver Message:(NSString *)message{2 NSLog(@"recevie message %@ from %@",message,[receiver getSenderToken]);3 }

列表 5.19: 4.Message/MessageViewController.m

1 func receiver(_ receiver: RTCatReceiver!, message: String!) {2 print("receiver message :\(message!) from :\(receiver.getSenderToken()!

→˓)")3 }

• 通过 RTCatReceiverDelegate监听消息事件,获取 RTCatSender发送的消息。

参参参考考考文文文档档档

iOS SDK参参参考考考文文文档档档

点点点击击击访访访问问问 iOS SDK参参参考考考文文文档档档

本文档提供了实时猫iOS平台SDK的完整参考资料,包括全部函数,方法,事件的列表和用法。

5.3. 参参参考考考文文文档档档 73

Page 78: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

74 Chapter 5. iOS

Page 79: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

CHAPTER 6

其它平台 (Windows, Linux, OS X)

75

Page 80: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

76 Chapter 6. 其其其它它它平平平台台台 (Windows, Linux, OS X)

Page 81: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

CHAPTER 7

服务器API

服服服务务务器器器 API介介介绍绍绍

简简简介介介

通过调用实时猫服务器端API,可以管理项项项目目目、创建和修改 Session, Token,进行视频录制等。

风风风格格格、、、协协协议议议和和和调调调用用用地地地址址址

服务器端API符合RESTful API风格,使用任何后端开发语言,通过发送 HTTP Request 请求即可调用。

服务器API的调用根地址为:

https://api.realtimecat.com/

不同版本API以版本号 v<major.minor> 区分,例如 https://api.realtimecat.com/v0.4。不同版本API共享数据对象,例如在v0.3下修改了某Session,在v0.4下获取此Session将是修改后的状态。

当某一版本API发布后,其中包含的接口将保持不变,新版本出现的新接口会提供更多功能,而新版本中的原接口可能修正一些潜在问题,并尽量保持调用参数和返回对象不变,强烈建议使用最新版本的API。

警警警告告告: 所有API调用接口地址均不含结尾斜杠 /。

警警警告告告: 如果遇到服务器证书错误,例如使用旧版本java时会发生 sun.security.provider.certpath.SunCertPathBuilderException: unable to findvalid certification path to requested target 错误,请更新JDK至 8u101或更新版本,其他语言请手动添加证书信任。

77

Page 82: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

身身身份份份验验验证证证(Authentication)

在实时猫开发者控制台中创建项目后,可以查看到项目的 API key和 API secret,任何服务器端API的调用都需要在 HTTP Request请请请求求求的头头头信信信息息息 Header中,发送以下项目信息进行验证:

X-RTCAT-APIKEY: API keyX-RTCAT-SECRET: API secret

例如,在Linux终端下使用 curl创建一个Session:

curl -X POST \-d "type=p2p" \-H "X-RTCAT-APIKEY: 00000000-0000-0000-0000-000000000000" \-H "X-RTCAT-SECRET: FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF" \https://api.realtimecat.com:443/v0.4/sessions

返回:

{"uuid":"01234567-89ab-cdef-0123-456789abcdef","label":null,"type":"p2p",→˓"permanent":false,"data":null,"time_created":"2016-08-18T02:24:16.437816Z→˓","live_days":30,"expire_in":"2016-09-17T02:24:16.437Z"}

注注注解解解: 不同开发语言,不同的HTTP库下添加Header的方法不同,请根据具体情况使用。

注注注解解解: 本质上,实时猫开发者控制台中管理 Session和 Token,就是在调用相应的服务器端API。

返返返回回回值值值和和和错错错误误误返返返回回回

服务器端API调用后的返回的状态码为‘‘2xx‘‘时API调用成功,‘‘4xx‘‘时调用失败,这两种情况下返回的消息体都是可以被解析为JSON对象的字符串(状态码为‘‘204‘‘时无消息体)。

失败时的返回JSON对象如下:

{"error": "错误代码","description": "错误描述"

}

比如,

Response Code: 401 Unauthorized

Response Body:

{"error": "RTCAT-ERROR-101","description": "无效的验证头信息。请传入X-RTCAT-APIKEY和X-RTCAT-SECRET。"

}

78 Chapter 7. 服服服务务务器器器API

Page 83: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

注注注解解解: 返回消息体的编码

返返返回的消息体的默认编码格式为utf-8,当某些客户端不能自动识别时,会出现中文乱码的情况,你可以在请求的 头头头信信信息息息 中手动添加 Accept: application/json; charset=utf-8来让返回的消息头带有 Content-Type: application/json;charset=utf-8的编码标识,从而让客户端自动解码为utf-8。

注注注解解解: 调用失败时的调试

1. 首先查看返回的错误代码,并进行相应处理。常见的错误包括:错误的调用地址,HTTPRequest Header格式错误,未指定或错误指定了 APIKey和 Secret,以及调用参数不全。

2. 尝试使用线上 HTTP Request工具,如 hurl.it,测试调用效果。

3. 如果通过调用成功获得了 Session和 Token,但未能成功连接,需要优先检查 Session和Token的类型 Type是否正确。

4. 如果仍然无法解决问题,请联系我们/获取支持 (page 12)。

版版版本本本和和和更更更新新新

目前服务器API的版本号为 v0.4。

0.4新版功能: 新增了项目管理接口。

在 0.4版更改: DELETE方法的返回状态码改为200,返回JSON对象消息体。

0.3新版功能: 新增了仅用于测试的服务器视频录制接口。

在 0.3版更改: 所有 persistent相关接口,现已重命名为 permanent。 所有单数形式的 token相关接口,现已重命名为复数 tokens。

参参参见见见:

服务器 API参考文档 (page 79)

服服服务务务器器器 API参参参考考考文文文档档档

更更更新新新历历历史史史

2016年8月15日 V0.4

1.1.1.1.2.• 增加项目管理接口 /v0.4/project/detail,/v0.4/project/update,/v0.4/project/reset,/v0.4/project/delete,可以使用 API Key和 API Secret修改项目了。

• DELETE /v0.4/sessions/{session_id}接口成功状态码改为200,添加JSON消息体 {"delete": 1}。

• DELETE /v0.4/tokens/{token_id} 接口成功状态码改为200,添加JSON消息体{"delete": 1}。

2016年4月5日 V0.3

7.2. 服服服务务务器器器 API参参参考考考文文文档档档 79

Page 84: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

• 增加录制接口 /v0.3/records,使用Token主键Id可以录制视频。

2015年10月25日 V0.2

• 获取列表接口支持分页。

• 支持永久Session和Token类型,新增修改、删除 Session接口, 获取、修改、删除 Token接口,分类获取永久或非永久的 Session、Token列表接口。

• GET /v0.2/sessions 返 回 结 果 分 页 表 示 , 每 个Session对 象 添 加 属 性persistent,data,time_created,live_days,expire_in。

• `POST /v0.2/sessions 增加参数 persistent,data,live_days,返回对象添加属性 persistent,data,time_created,live_days,expire_in。

• POST /v0.2/tokens接口废弃,用新接口 POST /v0.2/sessions/{session_id}/tokens代替。

2015年9月15日 V0.1

• 最初上线的版本,提供基本的Session,Token管理功能。

服服服务务务器器器 API V0.4接接接口口口列列列表表表

Project(项项项目目目)

URL Method Function/v0.4/project/detail GET 获取此项目信息

/v0.4/project/update PATCH 更新此项目

/v0.4/project/delete DELETE 删除此项目

/v0.4/project/reset POST 重置此项目API Secret

Session(会会会话话话)

URL Method Function/v0.4/sessions GET 获取Session列表/v0.4/sessions POST 创建一个Session/v0.4/sessions/permanent GET 获取永久Session列表/v0.4/sessions/nonpermanent GET 获取临时Session列表/v0.4/sessions/{session_id} GET 获取一个Session的信息/v0.4/sessions/{session_id} PATCH 修改一个Session/v0.4/sessions/{session_id} DELETE 删除一个Session

80 Chapter 7. 服服服务务务器器器API

Page 85: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

Token(令令令牌牌牌)

URL Method Function/v0.4/sessions/{session_id}/tokens GET 获取session_id下Token列表/v0.4/sessions/{session_id}/tokens POST 创建一个session_id下的Token/v0.4/sessions/{session_id}/tokens/permanent GET 获取session_id下永久Token列表/v0.4/sessions/{session_id}/tokens/nonpermanent GET 获取session_id下临时Token列表/v0.4/tokens/{token_id} GET 获取一个Token的信息/v0.4/tokens/{token_id} PATCH 修改一个Token/v0.4/tokens/{token_id} DELETE 删除一个Token

录录录制制制

*目目目前前前录录录制制制功功功能能能处处处于于于开开开发发发阶阶阶段段段,,,接接接口口口还还还在在在修修修改改改中中中,,,请请请勿勿勿用用用于于于生生生产产产环环环境境境*

URL Method Function/v0.4/records GET 获取录制纪录列表

/v0.4/records POST 开始/停止录像/v0.4/records/{record_id} GET 获取一个录像记录的信息

/v0.4/records/{record_id} PATCH 修改一个录像记录

服服服务务务器器器 API参参参考考考

获获获取取取此此此项项项目目目信信信息息息

地址: https://api.realtimecat.com:443/v0.4/project/detail

方法: GET

参数: 无

返回:

200 OK

{"uuid": "项目主键Id","user_id": "所有者主键Id","name": "项目名","memo": "项目描述","enable": "是否启用","enable_relay": "是否开启rel模式","api_key": "API Key","secret": "API Secret","time_created": "创建时间"

}

更更更新新新此此此项项项目目目

地址: https://api.realtimecat.com:443/v0.4/project/update

方法: PATCH

7.2. 服服服务务务器器器 API参参参考考考文文文档档档 81

Page 86: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

参数:

参数 类型 必填 说明

name string 否 项目名,长度为50,默认为空memo boolean 否 项目描述,长度为1024,默认为空

返回:

200 OK

{"uuid": "项目主键Id","user_id": "所有者主键Id","name": "项目名","memo": "项目备注","enable": "是否启用","enable_relay": "是否开启rel模式","api_key": "API Key","secret": "API Secret","time_created": "创建时间"

}

删删删除除除此此此项项项目目目信信信息息息

地址: https://api.realtimecat.com:443/v0.4/project/delete

方法: DELETE

参数: 无

返回:

200 OK

{"delete": "1"

}

重重重置置置此此此项项项目目目API Secret

地址: https://api.realtimecat.com:443/v0.4/project/reset

方法: POST

参数: 无

返回:

200 OK

{"uuid": "项目主键Id","user_id": "所有者主键Id","name": "项目名","memo": "项目备注","enable": "是否启用","enable_relay": "是否开启rel模式",

82 Chapter 7. 服服服务务务器器器API

Page 87: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

"api_key": "API Key","secret": "修改后的API Secret","time_created": "创建时间"

}

获获获取取取Session列列列表表表

地址: https://api.realtimecat.com/v0.4/sessions

方法: GET

参数:

参数 类型 必填 说明

page string 否 页数, URL参数page_size string 否 每页大小,URL参数,最大为100,默认为25

返回:

200 OK

{"page": "当前页数","page_size": "每页数量","count": "总数","next": "下一页地址","previous": "上一页地址","results": [{

"uuid": "主键Id","label": "标签","type": "类型","permanent": "是否持久化","data": "定义数据","time_created": "创建时间","live_days": "存活天数","expire_in": "过期时间"},//每页25条Session信息]

}

创创创建建建一一一个个个Session

地址: https://api.realtimecat.com/v0.4/sessions

方法: POST

参数:

参数 类型 必填 说明

type string 是 类型,仅可以为p2p或rellabel string 否 标签,长度为255,默认为空permanent boolean 否 持久化,默认为false,设为true时Session永不过期data string 否 自定义数据,长度为1024live_days integer 否 存活天数,单位为天,超过时间则Session过期,默认为30天

返回:

7.2. 服服服务务务器器器 API参参参考考考文文文档档档 83

Page 88: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

201 Created

{"uuid": "主键Id","label": "标签","type": "类型","permanent": "是否持久化","data": "自定义数据","time_created": "创建时间","live_days": "存活天数","expire_in": "过期时间"

}

获获获取取取永永永久久久Session列列列表表表

地址: https://api.realtimecat.com/v0.4/sessions/permanent

方法: GET

参数:

参数 类型 必填 说明

page string 否 页数, URL参数page_size string 否 每页大小,URL参数,最大为100,默认为25

返回:

200 OK

{"page": "当前页数","page_size": "每页数量","count": "总数","next": "下一页地址","previous": "上一页地址","results": [{

"uuid": "主键Id","label": "标签","type": "类型","permanent": "是否持久化","data": "定义数据","time_created": "创建时间","live_days": "存活天数","expire_in": "过期时间"},//每页25条Session信息]

}

获获获取取取临临临时时时Session列列列表表表

地址: https://api.realtimecat.com/v0.4/sessions/nonpermanent

方法: GET

参数:

84 Chapter 7. 服服服务务务器器器API

Page 89: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

参数 类型 必填 说明

page string 否 页数, URL参数page_size string 否 每页大小,URL参数,最大为100,默认为25

返返返回:

200 OK

{"page": "当前页数","page_size": "每页数量","count": "总数","next": "下一页地址","previous": "上一页地址","results": [{

"uuid": "主键Id","label": "标签","type": "类型","permanent": "是否持久化","data": "定义数据","time_created": "创建时间","live_days": "存活天数","expire_in": "过期时间"},//每页25条Session信息]

}

获获获取取取一一一个个个Session的的的信信信息息息

地址: https://api.realtimecat.com/v0.4/sessions/{session_id}

方法: GET

参数:

参数 类型 必填 说明

session_id string 是 Session主键Id(替换url中{session_id})

返回:

200 OK

{"uuid": "主键Id","label": "标签","type": "类型","permanent": "是否持久化","data": "自定义数据","time_created": "创建时间","live_days": "存活天数","expire_in": "过期时间"

}

修修修改改改一一一个个个Session

地址: https://api.realtimecat.com/v0.4/sessions/{session_id}

方法: PATCH

7.2. 服服服务务务器器器 API参参参考考考文文文档档档 85

Page 90: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

参数:

参数 类型 必填 说明

session_id string 是 Session主键Id (替换url中{session_id})label string 否 标签,长度为255,默认为空permanent boolean 否 持久化,默认为false,设为true时Session永不过期data string 否 自定义数据,长度为1024live_days integer 否 存活天数,单位为天,超过时间则Session过期,默认为30天

返回:

200 OK

{"uuid": "主键Id","label": "标签","type": "类型","permanent": "是否持久化","data": "自定义数据","time_created": "创建时间","live_days": "存活天数","expire_in": "过期时间"

}

删删删除除除一一一个个个Session

地址: https://api.realtimecat.com/v0.4/sessions/{session_id}

方法: DELETE

参数:

参数 类型 必填 说明

session_id string 是 Session主键Id (替换url中{session_id})

返回:

200 OK

{"delete": 1

}

获获获取取取session_id下下下Token列列列表表表

地址: https://api.realtimecat.com/v0.4/sessions/{session_id}/tokens

方法: GET

参数:

参数 类型 必填 说明

session_id string 是 Session主键Id (替换url中{session_id})page_size string 否 每页大小,URL参数,最大为100,默认为25page string 否 页数, URL参数

返回:

86 Chapter 7. 服服服务务务器器器API

Page 91: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

200 OK

{"page": "当前页数","page_size": "每页数量","count": "总数","next": "下一页地址","previous": "上一页地址","results": [{

"uuid": "主键Id","label": "标签","type": "类型","permanent": "是否持久化","data": "定义数据","time_created": "创建时间","live_days": "存活天数","expire_in": "过期时间"},//每页25条Session信息]

}

创创创建建建一一一个个个session_id下下下的的的Token

地址: https://api.realtimecat.com/v0.4/sessions/{session_id}/tokens

方法: POST

参数:

参数 类型 必填 说明

session_id string 是 Session主键Id (替换url中{session_id})type string 是 类型,仅可以为pub(发布者)或‘‘sub‘‘(接收者),参见‘ <>‘__label string 否 标签,长度为255,默认为空permanent boolean 否 持久化,默认为false,设为true时Session永不过期data string 否 自定义数据,长度为1024live_days integer 否 存活天数,单位为天,超过时间则Session过期,默认为15天number integer 否 个数,一次可创建多个Token,最多为10,留空则创建一个

返回:

201 CREATED

{"uuid": "主键Id","session_id": "Token所属Session的Id","label": "标签","type": "类型","permanent": "是否持久化","data": "自定义数据","time_created": "创建时间","live_days": "存活天数","expire_in": "过期时间"

}//当number大于1时返回数组形式的多个Token信息

7.2. 服服服务务务器器器 API参参参考考考文文文档档档 87

Page 92: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

获获获取取取session_id下下下永永永久久久Token列列列表表表

地址: https://api.realtimecat.com/v0.4/sessions/{session_id}/tokens/permanent

方方方法: GET

参数:

参数 类型 必填 说明

session_id string 是 Session主键Id (替换url中{session_id})page_size string 否 每页大小,URL参数,最大为100,默认为25page string 否 页数, URL参数

返回:

200 OK

{"page": "当前页数","page_size": "每页数量","count": "总数","next": "下一页地址","previous": "上一页地址","results": [{

"uuid": "主键Id","session": "Token所属Session的Id","label": "标签","type": "类型","permanent": "是否持久化","data": "定义数据","time_created": "创建时间","live_days": "存活天数","expire_in": "过期时间"},//每页25条Session信息]

}

获获获取取取session_id下下下临临临时时时Token列列列表表表

地址: https://api.realtimecat.com/v0.4/sessions/{session_id}/tokens/nonpermanent

方法: GET

参数:

参数 类型 必填 说明

session_id string 是 Session主键Id (替换url中{session_id})page_size string 否 每页大小,URL参数,最大为100,默认为25page string 否 页数, URL参数

返回:

200 OK

{"page": "当前页数","page_size": "每页数量","count": "总数","next": "下一页地址",

88 Chapter 7. 服服服务务务器器器API

Page 93: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

"previous": "上一页地址","results": [{

"uuid": "主键Id","session": "Token所属Session的Id","label": "标签","type": "类型","permanent": "是否持久化","data": "定义数据","time_created": "创建时间","live_days": "存活天数","expire_in": "过期时间"},//每页25条Session信息]

}

获获获取取取一一一个个个Token的的的信信信息息息

地址: https://api.realtimecat.com/v0.4/tokens/{token_id}

方法: GET

参数:

参数 类型 必填 说明

token_id string 是 Token主键Id (替换url中{token_id})

返回:

200 OK

{"uuid": "主键Id","session_id": "Token所属Session的Id","label": "标签","type": "类型","permanent": "是否持久化","data": "自定义数据","time_created": "创建时间","live_days": "存活天数","expire_in": "过期时间"

}

修修修改改改一一一个个个Token

地址: https://api.realtimecat.com/v0.4/tokens/{token_id}

方法: PATCH

参数:

参数 类型 必填 说明

token_id string 是 Token主键Id (替换url中{token_id})label string 否 标签,长度为255,默认为空permanent boolean 否 持久化,默认为false,设为true时Session永不过期data string 否 自定义数据,长度为1024live_days integer 否 存活天数,单位为天,超过时间则Session过期,默认为15天

7.2. 服服服务务务器器器 API参参参考考考文文文档档档 89

Page 94: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

返回:

200 OK

{"uuid": "主键Id","session_id": "Token所属Session的Id","label": "标签","type": "类型","permanent": "是否持久化","data": "自定义数据","time_created": "创建时间","live_days": "存活天数","expire_in": "过期时间"

}

删删删除除除一一一个个个Token

地址: https://api.realtimecat.com/v0.4/tokens/{token_id}

方法: DELETE

参数:

参数 类型 必填 说明

token_id string 是 Token主键Id (替换url中{token_id})

返回:

200 OK

{"delete": 1

}

获获获取取取录录录制制制纪纪纪录录录列列列表表表

*目目目前前前处处处于于于测测测试试试阶阶阶段段段,,,接接接口口口可可可能能能不不不稳稳稳定定定,,,请请请勿勿勿用用用于于于生生生产产产环环环境境境*

地址: https://api.realtimecat.com/v0.4/records

方法: GET

参数:

参数 类型 必填 说明

page_size string 否 每页大小,URL参数,最大为100,默认为25page string 否 页数, URL参数

返回:

200 OK

{"page": "当前页数","page_size": "每页数量","count": "总数","next": "下一页地址",

90 Chapter 7. 服服服务务务器器器API

Page 95: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

"previous": "上一页地址","results":[{

"uuid": "主键Id","video_start": "视频开始时间,例如'2016-02-04T08:10:20.296000',

→˓当`status`为`recording`时为`null`","video_stop": "视频停止时间, 例如'2016-02-04T08:10:23.998542',

→˓当`status`为`recording`时为`null`","video_length": "视频长度, 单位秒","video_type": "视频类型, 默认为mp4","time_created": "创建时间","label": "标签","project": "当前的项目Id","session": "当前的SessionId","token": "当前的Token","channel": "当前的视频流","action": "操作,`start`或`stop`","status": "视频状态, `recording`或`done`","url": "视频的链接, 当`status`为`recording`时为null"},//每页25条Session信息]

}

开开开始始始/停停停止止止录录录像像像

*目目目前前前处处处于于于测测测试试试阶阶阶段段段,,,接接接口口口可可可能能能不不不稳稳稳定定定,,,请请请勿勿勿用用用于于于生生生产产产环环环境境境*

地址: https://api.realtimecat.com/v0.4/records‘‘

方法: POST

参数:

参数 类型 必填 说明

token string 是 Token主键Idchannel string 是 视频流Idaction string 是 操作, start或stoptype string 是 视频类型, mp4或webmlabel string 否 标签

返回:

200 OK

{"uuid":"主键Id","video_start": "视频开始时间,例如’2016-02-04T08:10:20.296000’,

→˓当`status`为`recording`时为`null`","video_stop": "视频停止时间, 例如‘2016-02-04T08:10:23.998542’,

→˓当`status`为`recording`时为`null`","video_length": "视频长度, 单位秒, 当`action`为`start`时为null","video_type": "视频类型, 默认为mp4","time_created": "创建时间","label": "标签","project": "当前的项目Id","session": "当前的SessionId","token": "当前的Token","channel": "当前的视频流",

7.2. 服服服务务务器器器 API参参参考考考文文文档档档 91

Page 96: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

"action": "操作,`start`或`stop`","status": "视频状态, 当`status`为`recording`时为null","url": "视频的链接"

}

获获获取取取一一一个个个录录录像像像记记记录录录的的的信信信息息息

*目目目前前前处处处于于于测测测试试试阶阶阶段段段,,,接接接口口口可可可能能能不不不稳稳稳定定定,,,请请请勿勿勿用用用于于于生生生产产产环环环境境境*

地址: https://api.realtimecat.com/v0.4/records/{record_id}

方法: GET

参数:

参数 类型 必填 说明

record_id string 是 录像记录主键Id (替换url中{record_id})

返回:

200 OK

{"uuid": "主键Id","video_start": "视频开始时间,例如‘2016-02-04T08:10:20.296000’,

→˓当`status`为`recording`时为`null`","video_stop": "视频停止时间, 例如’2016-02-04T08:10:23.998542‘,

→˓当`status`为`recording`时为`null`","video_length": "视频长度, 单位秒, 当`action`为`start`时为null","video_type": "视频类型, 默认为mp4","time_created": "创建时间","label": "标签","project": "当前的项目Id","session": "当前的SessionId","token": "当前的Token","channel": "当前的视频流","action": "操作,`start`或`stop`","status": "视频状态, 当`status`为`recording`时为null","url": "视频的链接"

}

更更更新新新一一一个个个录录录像像像记记记录录录

*目目目前前前处处处于于于测测测试试试阶阶阶段段段,,,接接接口口口可可可能能能不不不稳稳稳定定定,,,请请请勿勿勿用用用于于于生生生产产产环环环境境境*

地址: https://api.realtimecat.com/v0.4/records/{record_id}

方法: PATCH

参数:

参数 类型 必填 说明

record_id string 是 录像记录主键Id (替换url中{record_id})label string 是 标签

返回:

92 Chapter 7. 服服服务务务器器器API

Page 97: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

200 OK

{"uuid": "主键Id","video_start": "视频开始时间,例如‘2016-02-04T08:10:20.296000’,

→˓当`status`为`recording`时为`null`","video_stop": "视频停止时间, 例如’2016-02-04T08:10:23.998542‘,

→˓当`status`为`recording`时为`null`","video_length": "视频长度, 单位秒, 当`action`为`start`时为null","video_type": "视频类型, 默认为mp4","time_created": "创建时间","label": "标签","project": "当前的项目Id","session": "当前的SessionId","token": "当前的Token","channel": "当前的视频流","action": "操作,`start`或`stop`","status": "视频状态, 当`status`为`recording`时为null","url": "视频的链接"

}

示示示例例例

我们以Node.js为例展示如何调用我们的服务器端API

创创创建建建Session

// 引入依赖的模块var https = require('https');var querystring = require('querystring');

// 设置session类型,此处以p2p为例var postData = querystring.stringify({

"type": "p2p"});

// 设置请求地址// 在headers中加入X-RTCAT-APIKEY和X-RTCAT-SECRETvar options = {

hostname: 'api.realtimecat.com',port: 443,path: '/v0.1/sessions',method: 'POST',headers: {

'Content-Type': 'application/x-www-form-urlencoded','Content-Length': postData.length,'X-RTCAT-APIKEY': '1234567890abcdefghijklmnopqrstuv','X-RTCAT-SECRET': '1234567890abcdefghijklmnopqrstuv'

}};

var myReq = https.request(options, function (response) {console.log('STATUS: ' + response.statusCode);console.log('HEADERS: ' + JSON.stringify(response.headers));response.setEncoding('utf8');response.on('data', function (chunk) {

7.2. 服服服务务务器器器 API参参参考考考文文文档档档 93

Page 98: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

console.log('BODY: ' + chunk);var session = JSON.parse(chunk);// 服务器端返回session_id,以下为回调函数...

});});

myReq.on('error', function (error) {console.dir('problem with request: ' + error.message);

});

// write data to request bodymyReq.write(postData);myReq.end()

生生生成成成一一一个个个新新新Token

// 使用您的session_id以及创建的用户角色,此处以发布者(pub)为例var postData = querystring.stringify({

"session_id":→˓"1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz→˓",

"type": "pub"});

// 设置请求地址// 在headers中加入X-RTCAT-APIKEY和X-RTCAT-SECRETvar options = {

hostname: 'api.realtimecat.com',port: 443,path: '/v0.1/tokens',method: 'POST',headers: {

'Content-Type': 'application/x-www-form-urlencoded','Content-Length': postData.length,'X-RTCAT-APIKEY': '1234567890abcdefghijklmnopqrstuv','X-RTCAT-SECRET': '1234567890abcdefghijklmnopqrstuv'

}};

// 向服务器端发出请求var myReq = https.request(options, function (response) {

console.log('STATUS: ' + response.statusCode);console.log('HEADERS: ' + JSON.stringify(response.headers));response.setEncoding('utf8');response.on('data', function (chunk) {

console.log('BODY: ' + chunk);var response = JSON.parse(chunk);// 服务器端返回了token,此时response形如{token:

→˓"1234567890abcdefghijklmnopqrstuvwxyz"}// 在这里进行接下来的处理...

});});

94 Chapter 7. 服服服务务务器器器API

Page 99: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

myReq.on('error', function (error) {console.dir('problem with request: ' + error.message);

});

// write data to request bodymyReq.write(postData);myReq.end();

7.2. 服服服务务务器器器 API参参参考考考文文文档档档 95

Page 100: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

96 Chapter 7. 服服服务务务器器器API

Page 101: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

CHAPTER 8

私有云和企业解决方案

简简简介介介

私私私有有有云云云

把实时猫带回家——购买整套音视频通信技术和后台,部署到独立的服务器,以获得更独立强大的企业通信基础设施、开发套件,监控平台和增值服务。

私私私有有有云云云优优优势势势

安安安全全全稳稳稳定定定

• 基于实时猫公有云的高质量技术和产品

• 全部服务存储均私有

独独独立立立隔隔隔离离离

• 按需配置的信令服务和通信线路

• 部署服务于用户指定的服务器,公私网络不限

灵灵灵活活活部部部署署署

• 可依据私有专有网络结构部署

• 最快20分钟内完成部署,节省实施时间

97

Page 102: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

扩扩扩展展展性性性佳佳佳

• 架构灵活、模块化、Docker化,提供更多开发和监控功能

• 全部API接口化,提供各平台SDK,亦可选择定制开发服务

企企企业业业解解解决决决方方方案案案

按需设计、开发、交付有音视频实时通讯功能的本地应用、网页、Web系统、移动App、智能硬件终端和复杂通信服务。

理理理解解解行行行业业业领领领域域域

教育咨询、医疗健康、金融和投资、游戏语音、人力资源招聘、企业通信、专业服务、智能硬件、通信安全等典型领域,我们均有深入的设计、开发、解决经验。

服服服务务务多多多样样样客客客群群群

无论传统企业,互联网企业,硬件公司,科研机构,创业团队,通信公司,还是系统集成商,都是实时猫解决方案服务的目标客户群体。

方方方案案案原原原型型型积积积累累累

实时猫不断积累适应各类场景的企业级产品原型,结合对常用功能的高水平模块化,实现解决质量、效率和成本的最佳平衡。

一一一线线线研研研发发发团团团队队队

解决方案团队和核心音视频团队共享技术和人员。设计和研发能力足以胜任大规模,体系复杂,高可用性要求的音视频通信系统设计开发。

参参参见见见:

联系我们/获取支持 (page 12)

服服服务务务详详详情情情

按按按服服服务务务角角角色色色分分分类类类

我是 CEO/战略负责人

产品定制解决 (page 99) |通信软件定制 (page 99) |复杂通信服务定制 (page 99)

我是产品/项目/采购负责人

通信软件定制 (page 99) |产品定制解决 (page 99)

98 Chapter 8. 私私私有有有云云云和和和企企企业业业解解解决决决方方方案案案

Page 103: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

我是 CTO/技术负责人

部署能力交付 (page 99) |私有云部署 (page 99) |通信软件定制 (page 99) |复杂通信服务定制 (page 99)

我是工程师/创业者

私有云部署 (page 99) |通信软件定制 (page 99) |复杂通信服务定制 (page 99)

按按按技技技术术术层层层级级级分分分类类类

系统按需开发和准产品

产品定制解决 (page 99) |通信软件定制 (page 99)

私有云服务器技术

私有云部署 (page 99) |部署能力交付 (page 99) |复杂通信服务定制 (page 99)

服服服务务务介介介绍绍绍

产产产品品品定定定制制制解解解决决决

服服服务务务内内内容容容将业务需求转化成为设计优秀、选型合理、高可用性、成本适当的业务和通信系统。以专业技能和经验保证整体解决质量。简介 (page 97)

通通通信信信软软软件件件定定定制制制

服服服务务务内内内容容容 采购类似实时猫技术演示的 通信软件原型 在工程师支持下,以更简便的接入、调用、配置、界面修改,开发通信系统。

私私私有有有云云云部部部署署署

服服服务务务内内内容容容购买整套音视频通信技术和后台,部署到独立的服务器,获得更独立强大的企业通信基础设施、开发套件,监控平台和增值服务。

部部部署署署能能能力力力交交交付付付

服服服务务务内内内容容容部署并监控任意数量私有云和混合云。提供易用的配置界面、灵活的资源、广泛的网络适应能力,随时部署交付音视频基础设施。

复复复杂杂杂通通通信信信服服服务务务定定定制制制

服服服务务务内内内容容容定制通信服务器、接口、平台。如自定义的加密算法,负载均衡视频处理流水线,全球智能路由,语音/图像识别整合能力等。

8.2. 服服服务务务详详详情情情 99

Page 104: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

技技技术术术解解解决决决能能能力力力

WebRTC

• 企业级WebRTC信令服务体系

• Web, Android, iOS SDK

• 企业级全功能 ICE/STUN/TURN

• 服务、配置、和访问控制 RESTful API

多多多方方方音音音视视视频频频 /媒媒媒体体体服服服务务务器器器

• SFU (Selective Forwarding Unit,选择性转发单元)

• MSM (Media Switching Mixer,媒体切换混合服务)

• MMM (Media Mixing Mixer,媒体数据混合服务)

• 高负载服务集群和软件定义网络(SDN)配置

• 支持多方音视频的 SDK

云云云计计计算算算和和和PaaS化化化

• 通信统计,监控,诊断,数据分析平台

• 支持WebM/MP4格式的服务器录制技术

• 录像云存储和控制

• HTTP/RTSP录制/推流/可拖动播放

互互互通通通能能能力力力

• H.264/VP8/VP9支持

• SIP网关和 VoIP互通

• RTP透明网关 / RTMP互通

• IMS互通

说说说明明明

1. 范围根据服务不同,服务形式可能包含:技术咨询,定制开发,远程部署,上门部署,开发支持,通信产品全套设计解决等。

2. 价格根据支持并发人数规模、定制程度、解决方案复杂程度,提供一次性报价。详情请联系我们/获取支持 (page 12)。

3. 支持全部服务包含不同级别的技术支持服务和问题响应能力。

4. 售后 1年内的版本升级和技术支持,终身安全问题跟踪修复。可续订售后服务。

100 Chapter 8. 私私私有有有云云云和和和企企企业业业解解解决决决方方方案案案

Page 105: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

参参参见见见:

联系我们/获取支持 (page 12)

8.2. 服服服务务务详详详情情情 101

Page 106: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

102 Chapter 8. 私私私有有有云云云和和和企企企业业业解解解决决决方方方案案案

Page 107: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

CHAPTER 9

资源

• genindex

• search

• 下载PDF版本文档

• 下载Zipped HTML版本文档

103

Page 108: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

索引

AAndroid SDK参考文档, 58Android浏览器, 5APIKey, 17

CCEO/战略负责人, 98CTO/技术负责人, 99

IiOS SDK参考文档, 73iOS浏览器, 6

JJavaScript SDK参考文档, 40

MMOS, 11

Pp2p, 18

RReceiver, 21relay, 18

SSecret, 17Sender, 21Session, 18, 20Session Type, 18SIP, 4Stream, 20

TToken, 19

WWebRTC视频通信云, 1, 2

丢包率, 9产品/项目/采购负责人, 98价格, 100企业解决方案, 98

关于我们, 11兼容性速览, 5创建和管理 Session, 18售后, 100基本流程, 15多人音视频通信, 3定价, 6客户端SDK, 19工程师/创业者, 99带宽, 9帧率, 10延迟, 9开发概念, 18开发者工具, 22开发者控制台, 17

抖动, 10控制台和项目管理, 17支持, 100支持服务, 3文件传输, 3智能接入通信云, 3本地视频截图, 3桌面操作系统, 6桌面浏览器, 5检测设备兼容性, 3浏览器, 5消息和数据传输, 3混合式(Hybrid)应用, 6

私有云优势, 97私有云服务器技术, 99移动设备, 6系统按需开发和准产品, 99

104

Page 109: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。

实实实时时时猫猫猫产产产品品品和和和技技技术术术手手手册册册,发发发布布布 20170417

聊天和互动白板, 3联系方式, 12范围, 100获取本地音视频, 3视频大小和质量调整, 3解决方案, 1质量监控, 3连接查询, 3连接测试, 3连接测试工具, 22

通信过程控制, 3错误代码, 39, 53项目, 17项目管理, 3, 17

索索索引引引 105

Page 110: 实实实时时时猫猫猫 产产产品品品和和和技技技术术术手手手册册册 · 务模式,解决独特需求。 本文档将重点提供WebRTC视频通信云产品的技术资料和开发指导。