# python-gb28181-client **Repository Path**: songriver/python-gb28181-client ## Basic Information - **Project Name**: python-gb28181-client - **Description**: 集成以后,可以让你的python设备,变为一个gb28181的监控设备,连接gb28181云平台 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-12-27 - **Last Updated**: 2025-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # python-gb2818-client # 环境 - cpu架构:aarch64架构 - 系统:ubuntu 22.04 LTS - openssl 3.x - 安装 ``` # 查看版本 openssl version conda list openssl # 升级conda中的openssl版本 conda install -c conda-forge openssl=3.0 --force-reinstall # 升级系统版本 sudo apt update sudo apt install openssl=3.0.2-* libssl-dev=3.0.2-* ``` ``` pip install -r requirements.txt ``` # 编译pjsua2(跳过此步骤,直接使用编译好的egg文件即可) - 安装编译环境 ``` apt-get install -y build-essential swig python3-dev uuid-dev libssl-dev libasound2-dev ``` - 下载源码 ``` https://github.com/pjsip/pjproject/archive/refs/tags/2.15.1.zip unzip 2.15.1.zip ``` - 编译C++共享库so ``` cd pjproject-2.15.1 ./configure CFLAGS="-fPIC" make make install ``` - 编译Python模块 ``` cd pjsip-apps/src/swig/python make make instal ``` # 初版功能 1. **注册与注销** - 注册流程:客户端启动时自动发送REGISTER请求 - 注销流程:客户端停止时发送注销请求 - 定时刷新:根据expires参数定时重新注册 2. **实时点播** - 通过INVITE/SDP协商建立媒体流 - 使用RTP接收PS封装的视频流 - FFmpeg进行流媒体处理和存储 3. **设备控制** - PTZ控制:解析DeviceControl命令中的PTZCmd - 预置位操作:支持调用/设置预置位 - 巡航扫描:支持巡航路线设置 4. **报警通知** - 报警上报:支持移动侦测、视频丢失等报警类型 - 报警处理:可配置报警联动规则 - 报警信息:包含时间、位置、类型等详细信息 5. **信息查询** - 设备目录:响应Catalog查询,返回所有通道 - 设备信息:响应DeviceInfo查询,返回设备详细信息 - 设备状态:可查询设备运行状态 6. **回放功能** - 录像查询:按时间范围查询录像记录 - 回放请求:支持指定时间段的录像回放 - 回放控制:支持播放、暂停、快进、快退 # 完整协议支持矩阵 |协议功能 |支持状态 |实现方式| |-----|------|------| |设备注册 |✔ |SIP REGISTER| |设备注销 |✔ |SIP REGISTER (expires=0)| |实时点播 |✔ |SIP INVITE + RTP| |PTZ控制 |✔ |SIP MESSAGE (DeviceControl)| |报警通知 |✔ |SIP MESSAGE (Alarm)| |设备目录查询 |✔ |SIP MESSAGE (Catalog)| |设备信息查询 |✔ |SIP MESSAGE (DeviceInfo)| |设备状态查询 |✔ |包含在心跳中| |录像查询 |✔ |SIP MESSAGE (RecordInfo)| |录像回放 |◐ |部分实现(依赖平台支持)| |语音广播 |◐ |部分实现(伪代码)| |网络配置 |✘ |需额外实现| # 关键注意事项 1. **NAT穿透问题**: - 在公网部署时需要配置STUN/TURN服务器 - 修改pjsua2配置添加STUN服务器: ```python ep_cfg.uaConfig.stunServer = ["stun.example.com"] ``` 2. **媒体流加密**: -支持SRTP加密媒体流 -配置pjsua2启用SRTP: ```python ep_cfg.mediaConfig.srtpUse = pj.PJMEDIA_SRTP_MANDATORY ``` 3. **性能优化**: ```python # 增加RTP缓冲区大小 media_cfg = pj.MediaConfig() media_cfg.rtpBufSize = 8192 # 8KB缓冲区 self.ep.mediaConfig = media_cfg ``` 4. **断线重连**: - 实现注册状态监控 - 注册过期前自动重新注册 - 网络中断后自动恢复连接 5. **协议兼容性**: - 支持GB/T 28181-2016标准 - 可配置兼容旧版协议(2011版) - 支持常见云平台的特殊扩展