# Prophet **Repository Path**: LYRbbding/Prophet ## Basic Information - **Project Name**: Prophet - **Description**: Prophet是一种基于跨层协作的视频码率自适应传输机制,能通过传输层信息准确估计视频块传送时间,提升用户体验质量。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 12 - **Created**: 2026-01-15 - **Last Updated**: 2026-01-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Prophet - 基于传输层信息的视频码率自适应算法 ## 项目简介 Prophet是一个基于传输层信息的视频码率自适应算法。该项目利用传输层协议提供的信息(带宽、丢包率、RTT等)来更准确地理解网络状况,从而更准确地预测视频块的下载时间,优化比特率选择策略,提升视频播放的QoE。 本项目应用层使用dash.js播放器,传输层协议使用QUIC。 项目包含两个主要分支: - **master分支**:实现了Prophet算法,该算法利用传输层信息进行更精确的下载时间预测 - **baseline分支**:使用dash.js的默认视频码率自适应算法,用于性能评估和对比分析 ## 代码组成 ### 1. dash.js播放器(客户端) 主要代码位于 `dash.js/samples/dash-if-reference-player/` 目录下: #### 核心算法实现 - **`app/rules/ProphetRule.js`**:Prophet算法的核心实现 - 实现了基于传输层信息的下载时间预测模型 - 使用模型预测控制(MPC)方法进行比特率选择 - 考虑了带宽(bandwidth)、丢包率(loss)、RTT、PTO等传输层参数 - 通过QoE优化函数选择最佳比特率序列 - **`app/rules/MPCRule.js`**:MPC对比算法实现 #### 主要功能模块 - **`app/main.js`**:主控制器,负责: - 从服务器获取传输层信息(bandwidth_xquic, loss_xquic, rtt_xquic等) - 解析传输层参数并传递给ABR算法 - 管理播放器状态和用户界面 - **`index.html`**:播放器界面,集成了dash.js播放器和各种ABR算法 ### 2. tengine(服务器端) tengine是基于Nginx的Web服务器,集成了XQUIC(QUIC协议开源实现),主要功能包括: #### 传输层信息收集与输出 - **传输层信息读取**:tengine通过XQUIC模块实时收集QUIC连接的传输层信息 - **信息写入文件**:将收集到的传输层信息(带宽、丢包率、RTT、PTO、RTO等)写入日志文件 - **信息暴露接口**:通过HTTP接口或日志文件向客户端提供传输层信息 #### 关键配置 - **`tengine-install/conf/nginx.conf`**:tengine服务器配置文件 - 配置QUIC监听端口 - 设置SSL证书 - 配置拥塞控制算法(BBR、CUBIC等) - 设置日志输出路径 #### 相关组件 - **`xquic-1.6.0/`**:XQUIC(QUIC协议实现库) - **`Tongsuo-8.3.2/`**:BabaSSL密码库,提供TLS/SSL支持 - **`libxml2-2.12.3/`**:XML解析库 ### 3. 项目分支说明 - **master分支**:包含Prophet算法的完整实现 - **baseline分支**:使用dash.js的默认视频码率自适应功能,用于性能评估 ## 代码运行 ### 环境要求 - Node.js(用于运行dash.js播放器) - tengine服务器(已编译安装) - 支持QUIC协议的现代浏览器(Chrome、Edge等) - SSL证书(用于HTTPS/QUIC连接) ### 1. 启动tengine服务器 ```bash # 进入tengine安装目录 cd tengine/tengine-install # 启动tengine服务器 ./sbin/tengine ``` **注意事项**: - 确保配置文件 `conf/nginx.conf` 中的路径正确 - 确保SSL证书路径正确(`xquic_ssl_certificate` 和 `ssl_certificate`) - 服务器会通过日志文件或HTTP接口提供传输层信息 ### 2. 运行dash.js播放器 #### 方式一:使用npm启动开发服务器 ```bash # 进入dash.js目录 cd dash.js # 安装依赖 npm install # 启动开发服务器 npm start ``` 然后在浏览器中访问: ``` http://localhost:port/samples/dash-if-reference-player/index.html ``` #### 方式二:直接使用文件系统 如果tengine已配置好文件服务,可以直接通过tengine服务器访问: ``` https://your-server:port/samples/dash-if-reference-player/index.html ``` ### 3. 启动websocket监听传输层信息 ``` # 启动websocket python websocketClient.py ``` ### 4. 配置说明 #### 选择ABR算法 在 `dash.js/samples/dash-if-reference-player/app/main.js` 中设置: ```javascript window.mode = 'Prophet'; // 使用Prophet算法 // window.mode = 'MPC'; // 使用MPC算法 // window.mode = 'BOLA'; // 使用BOLA算法 ``` #### 传输层信息获取 播放器通过以下方式获取传输层信息: - 从服务器日志文件读取 - 通过HTTP接口获取 - 通过WebSocket实时推送 传输层信息包括: - `bandwidth_xquic`:带宽 - `loss_xquic`:丢包率 - `rtt_xquic`:往返时延 ### 5. 测试与验证 1. **启动tengine服务器**,确保QUIC服务正常运行 2. **打开播放器页面**,选择Prophet算法 3. **加载视频流**,观察比特率切换行为 4. **查看控制台日志**,检查传输层信息是否正确获取 5. **对比不同算法**,切换baseline分支进行性能对比 ## 贡献者 本项目基于以下开源项目和研究工作: ### 基础框架 - **Dash Industry Forum** - dash.js播放器框架 - **Alibaba** - XQUIC QUIC协议实现 - **BabaSSL** - 密码库支持 ### 算法参考 - **MPC算法** - 模型预测控制方法 - **BOLA算法** - 基于缓冲区的ABR算法 ### 项目维护者 - 陈方舟,西安交通大学硕士研究生,研究方向:视频流传输优化,联系方式cfz11330216@163.com ## 相关资源 - [dash.js开源仓库](https://github.com/Dash-Industry-Forum/dash.js) - [XQUIC开源仓库](https://github.com/alibaba/xquic) - [QUIC协议规范](https://datatracker.ietf.org/doc/html/rfc9000)