# jt1078-stream-server **Repository Path**: lxygit0731/jt1078-stream-server ## Basic Information - **Project Name**: jt1078-stream-server - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-12-16 - **Last Updated**: 2026-03-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JT1078 视频流服务 基于 JT/T 1078 协议的音视频流媒体服务,支持实时视频直播和双向语音对讲。 ## ✨ 功能特性 ### 📹 实时直播 - H.264/H.265 视频解码播放 - AAC/G.711A 音频解码播放 - WebCodecs 硬件加速解码 - 低延迟流媒体传输 - 智能音频降噪(400Hz高通滤波器) ### 🎤 语音对讲 - G.711A 编码的双向语音通话 - 自动重采样(浏览器采样率 → 8kHz) - 回声消除和噪声抑制 - 实时音频传输(60ms/包) ### 🔧 核心优化 - SPS/PPS 同步发送,新订阅者快速出画面 - 多声道自动降级(5声道 → 2声道/1声道) - 单帧解码失败自动恢复 - WebSocket 异步发送队列 ## 🚀 快速开始 ### 1. 启动服务器 ```bash cd jt1078-server-java mvn clean package java -jar target/jt1078-server-1.0.0.jar ``` 服务器监听端口: - `6076` - JT1078 对讲流接入(TCP) - `6077` - JT1078 主码流接入(TCP) - `6078` - JT1078 子码流接入(TCP) - `6079` - JT1078 回放流接入(TCP) - `8080` - WebSocket 订阅服务(HTTP/WS) ### 2. 打开播放器 在浏览器中打开 `jt1078-new-player.html` **推荐浏览器**: - Chrome 94+ - Edge 94+ - Safari 16.4+(需开启实验性功能) ### 3. 配置连接 1. 输入 WebSocket 地址:`ws://服务器IP:8080/ws` 2. 输入设备ID 3. 选择通道和逻辑通道 4. 点击"连接"开始拉流 ## 📊 系统架构 ### 整体流程 ```mermaid graph LR A[JT1078设备] -->|TCP 6077| B[JT1078 Server] B -->|WebSocket| C[Web播放器] C -->|对讲音频| B B -->|TCP 6076| A ``` ### 直播流程 ```mermaid sequenceDiagram participant D as JT1078设备 participant S as Java服务器 participant W as Web播放器 W->>S: 订阅视频流 S->>W: 发送SPS/PPS(同步) S->>W: 发送GOP头帧 loop 视频传输 D->>S: H.264/H.265视频帧 S->>W: WebSocket转发 W->>W: WebCodecs解码 W->>W: Canvas渲染 end loop 音频传输 D->>S: AAC/G.711A音频帧 S->>W: WebSocket转发 W->>W: 音频解码 W->>W: 400Hz高通滤波 W->>W: 扬声器播放 end ``` ### 对讲流程 ```mermaid sequenceDiagram participant W as Web播放器 participant S as Java服务器 participant D as JT1078设备 W->>W: 请求麦克风权限 W->>S: 订阅逻辑通道3 loop 下行对讲(Web → 设备) W->>W: 采集音频(48kHz) W->>W: 重采样(48kHz → 8kHz) W->>W: G.711A编码 W->>S: WebSocket发送 S->>D: JT1078协议转发 D->>D: 扬声器播放 end loop 上行对讲(设备 → Web) D->>D: 麦克风采集 D->>S: G.711A音频 S->>W: WebSocket转发 W->>W: G.711A解码 W->>W: 扬声器播放 end W->>S: 取消订阅逻辑通道3 ``` ## 🛠 技术栈 ### 后端(Java) - Spring Boot 2.7.x - Netty 4.1.x(JT1078协议解析) - WebSocket(流媒体推送) - Hutool(JSON工具) ### 前端(HTML5) - WebCodecs API(硬件加速解码) - Web Audio API(音频处理) - Canvas 2D(视频渲染) - WebSocket(数据通信) ## 📝 JT1078 协议说明 ### 消息格式 所有WebSocket消息使用自定义二进制格式: ``` +------+------+------+------+----------+----------+------------+ | 魔数 | 类型 | 通道 | 保留 | 数据 | 保留 | 负载 | | 4B | 1B | 1B | 2B | | | | +------+------+------+------+----------+----------+------------+ | J | T | 7 | 8 | DataType | Channel | Payload | +------+------+------+------+----------+----------+------------+ ``` ### 数据类型 | 类型码 | 说明 | |--------|------| | 0x00 | I帧(关键帧) | | 0x01 | P/B帧 | | 0x03 | 音频帧 | | 0xF0 | SPS | | 0xF1 | PPS | | 0xF2 | AudioConfig (AAC) | | 0xF3 | VPS (H.265) | ### 逻辑通道 | 通道号 | 用途 | |--------|------| | 0/1 | 视频直播流 | | 3 | 语音对讲流 | ## 🔍 故障排查 ### 视频无法播放 1. **等不到SPS/PPS** - 检查设备是否正在推流 - 查看服务器日志是否提取到SPS/PPS - 确认使用了同步发送(已修复) 2. **解码器初始化失败** - 检查浏览器版本是否支持WebCodecs - 查看控制台是否有配置错误 - 确认视频编码格式(H.264/H.265) ### 音频问题 1. **多人说话时解码失败** - 已自动降级声道数(5→2→1) - 检查浏览器控制台日志 2. **直播音频有噪音** - 已启用400Hz高通滤波器 - 检查设备端音频质量 ### 对讲问题 1. **无法获取麦克风权限** - 确保使用HTTPS或localhost - 检查浏览器权限设置 2. **对讲有回声** - 设备端需要启用AEC(回声消除) - 使用耳机可以避免回声 ## 📄 开源协议 MIT License --- **注意**:本项目仅用于学习交流,生产环境使用请充分测试。