在线抓娃娃是一种让用户通过手机 App 或网站,实时观看视频并远程操控真实物理娃娃机的新型线上娱乐,让用户能足不出户远程操控真实娃娃机,体验抓取的刺激与乐趣。
在线抓娃娃的核心是实现娃娃机端与用户端之间的实时交互,其主要角色构成如下:
| 角色 | 描述 |
|---|---|
| 娃娃机 | 作为推流端,采集娃娃机内的内容信息并向远端发流,根据用户操作,实时响应机械臂的移动和抓放。 |
| 玩家 | 作为订阅端,实时观看娃娃机内的情况,同时通过信令消息,在手机上远程控制机械爪。 |
| 观众 | 作为订阅端,观看娃娃机内的情况和其他玩家操作。 |
火山引擎在线抓娃娃解决方案,依托先进的实时音视频(RTC)技术,为企业提供了快速搭建低延迟、高沉浸感在线抓娃娃场景的全链路能力。具备以下核心优势:
超低延迟操控体验
通过端到端低于 300ms 的超低延迟技术,结合 720P@30fps 高清视频流,以及置先进的网络自适应算法,在弱网环境下仍能保持流畅体验,实现了画面与操作的极致同步。
精准可靠的远程控制
提供独立的高可靠信令通道,用于发送标准化控制指令(如移动、下抓)并接收设备执行反馈。内置的优先级处理机制,确保了远程操控的指令必达与实时响应。
多视角(多流)支持
支持娃娃机端发布多路视频流,客户端可实现自由的视角切换、画中画(PiP)同显功能。通过视角同步确保所有观众与玩家画面一致,为用户打造沉浸式、可自主选择最佳角度的游戏体验。
开箱即用的游戏会话管理
内置完整的游戏会话管理逻辑,覆盖了玩家排队、观众/玩家角色无缝切换、自定义游戏时长等核心功能。同时包含了完善的异常中断处理机制,可保障业务在用户退出等情况下的稳定性。
| 主要功能 | 描述 |
|---|---|
| 设备管理 | 支持摄像头与麦克风打开和关闭、摄像头的切换。 |
| 实时音视频 | 玩家在进行抓娃娃过程中,通过实时音视频流,准确判断机械臂和娃娃的位置,观众也可以实时查看玩家的操作 |
| 实时消息 | 玩家在操作娃娃机时,通过实时消息,实时控制机械臂的移动和抓取 |
| 网络状况检测 | 网络质量检测,在用户网络状况不佳的时候给出提示 |
| 云端录制 | 对操作娃娃机的过程进行录制,便于用户分享和商家留存判定及推广分享 |
我们提供了 全链路 RTC 方案和 WTN 方案,适合不同阶段、不同诉求的开发者。
| 方案 | 全链路 RTC 方案 | WTN 方案 |
|---|---|---|
| 适合场景 | 网络摄像头/视频推流盒支持 火山 RTC 协议推流 | 网络摄像头/视频推流盒支持 RTMP 协议推流,无需硬件改造 |
| 开发成本 | 中 | 低 |
实现方式 | 推流网络摄像头/视频推流盒和应用都集成 RTC SDK,娃娃机侧使用 RTC 推流,应用侧使用 RTC 拉流。 | 网络摄像头/视频推流盒无需改造,直接使用 RTMP 协议推流,应用侧可直接通过 WebRTC 协议实现超低延时播放。
|
| 延时 | 100-300ms | 300-400ms |
| 端 | 要求 |
|---|---|
推流端 |
|
观看端 |
|

详情见集成文档: 【外部】VolcEngineRTCLite SDK集成说明
#include "VolcEngineRTCLite.h" // 创建实例 byte_rtc_engine_t engine = byte_rtc_create(); // 设置工作目录和日志(需在init前调用) byte_rtc_set_params(engine, "{\"rtc\":{\"root_path\":\"/path/to/workdir\"}}"); byte_rtc_config_log(engine, "/path/to/logs", 10*1024*1024, 10); // 初始化SDK byte_rtc_init(engine);
// 设置编码格式(需在init后调用) byte_rtc_set_audio_codec(engine, "opus"); // 或 "aaclc"、"g711a" byte_rtc_set_video_codec(engine, "h264"); // 或 "bytevc1" // 视频参数建议:720P@30fps,码率2-4Mbps byte_rtc_set_video_encoder_config(engine, 1280, 720, 30, 4000);
// 房间ID格式:RTC_{视频编码}_{音频编码}_{自定义后缀}(如RTC_H264_OPUS_room1) byte_rtc_room_options_t options = {true, false, true, true}; // 自动发布音视频 byte_rtc_join_room(engine, "房间ID", "用户ID", "Token", &options, on_join_room_success); // 回调处理 void on_join_room_success(byte_rtc_engine_t engine, const char* room_id) { // 开始推送摄像头数据 byte_rtc_send_video_data(engine, video_frame_data, frame_size); }
npm install @volcengine/rtc。js 文件中添加 import VERTC from '@volcengine/rtc';。const client = RTC.createClient({ mode: "live", codec: "h264" }); client.join("APPID", "房间ID", "Token", "用户ID"); // 订阅娃娃机流 client.on("stream-added", (event) => { const stream = event.stream; if (stream.getUserId() === "娃娃机用户ID") { client.subscribe(stream); } }); // 渲染视频 client.on("stream-subscribed", (event) => { const stream = event.stream; stream.play("video-element-id"); }); // 发送控制信令 function sendControlCommand(action) { client.sendMessage("娃娃机用户ID", JSON.stringify({ action })); }
核心接口
| 接口名称 | 功能描述 | 主要参数及说明 |
|---|---|---|
| createEngine(appId) | 创建本地 RTC 引擎实例 | appId:应用唯一标识符 |
| joinRoom(token, roomId, user, options) | 加入指定房间 | token:鉴权token;roomId:房间号;user:用户信息;options:是否自动发布/订阅等配置 |
| on(event, callback) | 监听事件,如远端用户发布流 | event:事件名;callback:事件回调函数 |
| setRemoteVideoPlayer(streamIndex, config) | 设置远端视频流渲染容器 | streamIndex:远端流索引;config:渲染容器配置信息 |
| leaveRoom() | 离开当前房间,停止所有流的发布和订阅 | 无 |

通过接口 RtmpAccessInfo 获取 RTMP 推流地址,配置到娃娃机侧的网络摄像头、视频推流盒上,即可实现低延时 RTMP 音视频推流。
你可以使用你填入的 StreamID 实现播放 WTN 流,你可以使用以下两种方式:
自研 WebRTC 协议:
使用 RTC SDK:
如果希望 H5 浏览器兼容性,快速实现自动启播等效果,建议接入 RTC SDK,通过 subscribeWTNVideoStream/subscribeWTNAudioStream(Natvie)/startPlayWTN(Web)接口填入 StreamID 实现播放 WTN 流。