Android 部分
目标读者:进行二次开发、需要打通 Android 设备与 DejaOS 设备可视对讲的工程师 。
1. 背景与上下文
本方案是“以 DejaOS 设备为中心”的跨端对讲模型,Android demo 的定位是配套端:
- DejaOS 设备作为被呼叫目标,使用固定序列号(serial no)标识设备身份。
- Android 设备作为移动端/室内端入口,通过私有信令服务与 DejaOS 设备建立会话。
- 音视频链路由 WebRTC 承载,信令链路由私有 WebSocket 协议承载。
从实现本质看,Android demo 就是:
- 使用 Google WebRTC 库(
org.webrtc.*)处理 Offer/Answer/ICE 和媒体传输。 - 使用私有 WebSocket 协议连接私有信令服务,完成会话创建、呼叫、断开、透传。
这意味着对讲过程可拆成两条链路:
- 信令链路:谁呼叫谁、会话状态、参数协商(通过 WebSocket)。
- 媒体链路:音视频与 DataChannel 数据(通过 PeerConnection)。
2. 方案价值与 Android Demo 作用
Android Demo 主要用于三件事:
- 演示 Android 与 DejaOS 设备可视对讲的完整最小流程。
- 提供“信令 + WebRTC”的可运行参考实现,缩短二次开发接入周期。
- 提供多业务场景入口(实时、回放、下载、MJpeg)用于能力验证与联调。
其基本架构如下:
- 应用层(
com.rhrtc.webrtcsdk):页面交互、业务参数组装、信令消息 收发。 - 核心层(
com.rhrtc.webrtc):WebRTC 连接、音视频轨道、ICE 处理、录制与工具能力。 - 全局连接层(
APPAplication):维护 WebSocket 客户端与全局消息分发。
3. 代码结构与模块职责
Java 包在 app/src/main/java/com/rhrtc 下,主要分两层。
3.1 com.rhrtc.webrtcsdk(业务/UI 层)
APPAplication- 全局 Application,负责:
- 生成本端 ID(
ownid) - 持有目标设备 ID(
peerid) - 生成 WebSocket 地址:
ws://<host>/wswebclient/<ownid> - 管理
JWebSocketClient生命周期 - 维护回调列表
WebSocketMsgCallback,向各 Activity 分发信令
- 生成本端 ID(
- 全局 Application,负责:
MainActivity- 功能入口页:Real video / Remote Play / Download / MJpeg video
RealVideoActivity、RemotePlayActivity、MjpegVideoActivity、DownLoadActivity- 各场景对讲页面,包含:
- 发起
__connectto/__call - 处理
_create/_offer/_ice_candidate等回包 - 触发
PeerConnectionClient的 offer/answer/candidate 逻辑
- 发起
- 各场景对讲页面,包含:
WebSocketMsgCallback- WebSocket 消息回调接口,解耦全局连接与页面逻辑
3.2 com.rhrtc.webrtc(媒体与网络核心层)
PeerConnectionClient- WebRTC 核心封装:PeerConnectionFactory、轨道管理、Offer/Answer、ICE、统计、录制挂接
JWebSocketClient- 基于
org.java_websocket的客户端封装
- 基于
record/*- 录制链路:音频拦截、视频帧落盘、录制器实现
utils/*- 音频路由、蓝牙、权限、EGL、约束参数等工具
4. 运行流程(Android 端)
4.1 启动阶段
APPAplication.onCreate()初始化ownid、peerid、wsurl。- 创建 WebSocket 客户端并连接信令服务。
- Activity 注册
WebSocketMsgCallback,接收全局信令回调。