WS-Robot
一个基于 websocket-client 的同步 WebSocket 机器人客户端库。
简介
WS-Robot 是一个用于管理 WebSocket 机器人的 Python 库,提供了完整的机器人生命周期管理功能,包括创建、更新、删除机器人,以及会话管理、资源预分配等功能。
特性
- 🚀 同步 WebSocket 客户端 - 基于 websocket-client 的同步实现,简单易用
- 🔄 自动重连 - 支持自动重连机制,带有指数退避策略
- 🎮 机器人管理 - 完整的机器人生命周期管理(创建、更新、删除)
- 📊 会话管理 - 支持会话查询、清理和强制清理
- 🔒 加密支持 - 支持加密配置和数据流加密
- 🎯 资源预分配 - 支持批量资源预分配,提高创建效率
- 🔧 上下文管理器 - 支持 Python 上下文管理器,自动资源清理
安装
pip install ws-robot
快速开始
基本使用
from ws_robot import WebSocketRobotClient, WebSocketRobotManager, RobotAPIBody
# 创建客户端(使用 token 鉴权)
client = WebSocketRobotClient(
ws_url="ws://your-server.com/ws",
token="d3Nyb2JvdDpwYXNz" # 必需:鉴权Token("wsrobot:pass" 的 base64 编码)
)
# 连接到服务器
client.connect()
# 创建管理器
manager = WebSocketRobotManager(client)
api_body = RobotAPIBody()
# 创建机器人
robot_data = api_body.gen_create_data(
appId="your_app_id",
cname="test_channel",
user="test_user",
uid=12345,
url="http://example.com/video.mp4",
width=640,
height=360,
fps=30,
bitrate=800,
activeTime=120
)
robot = manager.add_robot(robot_data)
print(f"Robot created: {robot.robot_id}")
# 停止机器人
manager.stop_robot(robot)
# 断开连接
client.disconnect()
使用上下文管理器
from ws_robot import WebSocketRobotClient, WebSocketRobotManager
with WebSocketRobotClient(
ws_url="ws://your-server.com/ws",
token="d3Nyb2JvdDpwYXNz" # 必需:鉴权Token
) as client:
with WebSocketRobotManager(client) as manager:
# 创建机器人
robot = manager.add_robot(robot_data)
# 执行操作
robot.muteVideo()
robot.unmuteAudio()
# 上下文管理器会自动清理资源
批量创建机器人
# 预分配资源
manager.preallocate_resources(robot_count=10, user="test_user")
# 批量创建
robot_data_list = [
api_body.gen_create_data(
appId="your_app_id",
cname=f"channel_{i}",
user="test_user",
uid=10000 + i,
url="http://example.com/video.mp4",
activeTime=120
)
for i in range(10)
]
robots = manager.create_multiple_robots(robot_data_list)
print(f"Created {len(robots)} robots")
机器人操作
# 静音/取消静音
robot.muteVideo()
robot.unmuteVideo()
robot.muteAudio()
robot.unmuteAudio()
# 切换角色
robot.changeHostAudience(clientRole=1) # 1=主播, 0=观众
# 设置视频参数
robot.setVideoParams(width=1280, height=720, fps=30, bitrate=1500)
# 获取状态
status = robot.get_status()
print(f"Robot status: {status}")
# 删除机器人
robot.delete()
会话管理
# 查询机器人
robots = client.query_robots()
print(f"Active robots: {len(robots)}")
# 查询会话
sessions = client.query_sessions()
print(f"Active sessions: {len(sessions)}")
# 清理会话
client.cleanup_session()
# 强制清理
client.force_cleanup()
# 获取系统状态
status = client.get_status()
print(f"System status: {status}")
自动重连配置
client = WebSocketRobotClient(
ws_url="ws://your-server.com/ws",
token="d3Nyb2JvdDpwYXNz" # 必需:鉴权Token
auto_reconnect=True, # 启用自动重连
max_reconnect_attempts=5, # 最大重连次数
reconnect_interval=5, # 重连间隔(秒)
reconnect_backoff_factor=1.5, # 退避因子
timeout=30 # 请求超时(秒)
)
# 检查重连状态
status = client.get_reconnect_status()
print(f"Reconnect status: {status}")
# 手动强制重连
client.force_reconnect()
API 文档
WebSocketRobotClient
主要的 WebSocket 客户端类。
方法:
connect(reconnect_window=300)- 连接到 WebSocket 服务器disconnect()- 断开连接create_robot(robot_data)- 创建机器人preallocate_resources(robot_count, user)- 预分配资源query_robots(sessionKey=None)- 查询机器人列表query_sessions(sessionKey=None)- 查询会话列表cleanup_session(sessionKey=None)- 清理会话force_cleanup(sessionKey=None)- 强制清理get_status()- 获取系统状态reconnect(sessionKey, reconnect_window=300)- 重连到指定会话
WebSocketRobotManager
机器人管理器类。
方法:
add_robot(robot_data)- 添加机器人stop_robot(robot)- 停止机器人stop_all_robots()- 停止所有机器人get_robot(robot_id)- 获取机器人实例get_all_robots()- 获取所有机器人实例create_multiple_robots(robot_data_list)- 批量创建机器人mute_all_videos()- 静音所有视频unmute_all_videos()- 取消静音所有视频
WebSocketRobotInstance
机器人实例类。
方法:
update(robot_data)- 更新机器人delete()- 删除机器人get_status()- 获取状态muteVideo()/unmuteVideo()- 视频静音控制muteAudio()/unmuteAudio()- 音频静音控制changeHostAudience(clientRole)- 切换角色setVideoParams(width, height, fps, bitrate)- 设置视频参数setDatastreamConfig(...)- 设置数据流配置
RobotAPIBody
机器人 API 请求体生成器。
方法:
gen_create_data(...)- 生成创建机器人的请求数据gen_update_data(...)- 生成更新机器人的请求数据gen_encryption_config(...)- 生成加密配置gen_datastream_config(...)- 生成数据流配置gen_other_data(robotId, user)- 生成其他操作的请求数据
配置选项
客户端配置
ws_url- WebSocket 服务器地址(必需)token- 鉴权Token(必需,值为"d3Nyb2JvdDpwYXNz",即 "wsrobot:pass" 的 base64 编码)timeout- 请求超时时间,秒(默认:30)auto_reconnect- 是否自动重连(默认:True)max_reconnect_attempts- 最大重连尝试次数(默认:5)reconnect_interval- 重连间隔,秒(默认:5)reconnect_backoff_factor- 重连退避因子(默认:1.5)
鉴权说明:
- 客户端连接时必须在 URL 中提供 token
- Token 固定为
"d3Nyb2JvdDpwYXNz"("wsrobot:pass" 的 base64 编码) - 服务器端使用固定的 token 进行匹配验证
- 创建客户端时必须提供 token 参数
机器人配置
appId- 应用 ID(必需)cname- 频道名(必需)uid- 用户 ID(可选,可自动生成)userAccount- 用户账户(可选)url- 视频 URL(可选)width- 视频宽度(默认:640)height- 视频高度(默认:360)fps- 帧率(默认:30)bitrate- 码率(默认:800)codecType- 编解码类型(默认:2)activeTime- 活跃时间,秒(可选)clientRole- 客户端角色(默认:1主播)
依赖
- Python >= 3.7
- websocket-client >= 1.0.0
开发
安装开发依赖
pip install -e ".[dev]"
运行测试
pytest
许可证
MIT License
贡献
欢迎提交 Issue 和 Pull Request!
联系方式
- GitHub: https://github.com/yourusername/ws-robot
- Email: your.email@example.com
更新日志
1.0.0 (2024-12-11)
- 初始版本发布
- 完整的 WebSocket 机器人管理功能
- 自动重连机制
- 会话管理
- 批量操作支持
Metadata
Release files for ws-robot 1.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ws_robot-1.0.4.tar.gz | 29.7 kB | Without provenance | Details for ws_robot-1.0.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ws_robot-1.0.4-py3-none-any.whl | Python 3 | none | any | Details for ws_robot-1.0.4-py3-none-any.whl |
Total release size: 50.8 kB
Release files / ws_robot-1.0.4.tar.gz
| Download URL | ws_robot-1.0.4.tar.gz |
|---|---|
| Size | 29.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2e9a9bb274b1c5124c28177e33adc4dfd57bea2341d8a1acbbc4b90780c35925
|
|
BLAKE2b-256 checksum How to use checksums |
b623f8a449819ab7f27193e7027ed4cb15b9a21c5dbccc06e05fb9d88dda8350
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.12
|
Release files / ws_robot-1.0.4-py3-none-any.whl
| Download URL | ws_robot-1.0.4-py3-none-any.whl |
|---|---|
| Size | 21.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dbf7c725b85bf07f90eae784e42b4dfebffcc17d7fe3c3c4c2b803d07af1a425
|
|
BLAKE2b-256 checksum How to use checksums |
11ddc21a8b496685148a5fc519d37c02d5364f535b95f78500aaefc5373411f0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.12
|
Security for ws-robot 1.0.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.