Skip to content

open-beagle/BDWind-GSteamer

Repository files navigation

BDWind-GSteamer

BDWind-GSteamer,计划使用 Golang 语言进行开发,集成 GSteamer 技术对 Linux Desktop 数据进行处理,支持游戏等实时 3D 渲染画面高帧率传播。

首先应该参考 selkies_gstreamerhttps://github.com/selkies-project/selkies项目,这是一个 Python 项目,我们着力学习其代码,分析迁移至 Golang 的可行性。

项目概述

BDWind-GStreamer 是一个基于 Golang 开发的高性能 WebRTC 桌面流媒体服务器,专门为 Linux 桌面环境设计,支持高帧率、低延迟的实时桌面共享和游戏流媒体传输。

主要特性

  • 🚀 高性能: 基于 WebRTC 技术,支持 60fps 高帧率传输
  • 🎮 游戏优化: 专为游戏流媒体优化,支持 GPU 加速编码
  • 🌐 浏览器访问: 支持任何现代浏览器直接访问,无需安装客户端
  • 📱 跨平台: 支持 Windows、macOS、Linux、Android、iOS 等平台
  • 🔧 可扩展: 模块化架构,易于扩展和定制
  • 📊 监控完善: 内置 Prometheus 指标收集和 Grafana 仪表板
  • 🐳 容器化: 支持 Docker 和 Kubernetes 部署

技术栈

  • 后端: Golang 1.21+
  • WebRTC: Pion WebRTC
  • 视频处理: GStreamer
  • 信令: WebSocket
  • 监控: Prometheus + Grafana
  • 容器化: Docker + Docker Compose

快速开始

环境要求

  • Go 1.21+
  • GStreamer 1.0+
  • Linux 桌面环境(X11/Wayland)
  • Docker(可选)

本地开发

  1. 克隆项目
git clone https://github.com/open-beagle/BDWind-GSteamer.git
cd BDWind-GSteamer
  1. 安装依赖
# 安装Go依赖
go mod download

# 安装系统依赖(Ubuntu/Debian)
sudo apt-get update
sudo apt-get install -y \
    gstreamer1.0-tools \
    gstreamer1.0-plugins-base \
    gstreamer1.0-plugins-good \
    gstreamer1.0-plugins-bad \
    gstreamer1.0-plugins-ugly \
    gstreamer1.0-libav \
    gstreamer1.0-vaapi \
    gstreamer1.0-v4l2 \
    libgstreamer1.0-dev \
    libgstreamer-plugins-base1.0-dev \
    libgstreamer-plugins-bad1.0-dev \
    libgstreamer-plugins-good1.0-dev \
    libgstreamer-plugins-ugly1.0-dev \
    libgstreamer-libav-dev \
    libgstreamer-vaapi-dev \
    libgstreamer-v4l2-dev \
    libx11-dev \
    libxrandr-dev \
    libxinerama-dev \
    libxcursor-dev \
    libxi-dev \
    libxext-dev \
    libxfixes-dev \
    libxrender-dev \
    libxss-dev \
    libxtst-dev \
    libxdamage-dev \
    libxcomposite-dev \
    mesa-dev \
    eudev-dev \
    alsa-lib-dev \
    pulseaudio-dev \
    jack-dev \
    libsndfile-dev \
    libsamplerate-dev \
    libogg-dev \
    libvorbis-dev \
    libflac-dev \
    libmp3lame-dev \
    libmad-dev \
    libtwolame-dev \
    libfaad-dev \
    libfaac-dev \
    libavcodec-dev \
    libavformat-dev \
    libavutil-dev \
    libswscale-dev \
    libswresample-dev \
    libavfilter-dev \
    libavdevice-dev \
    libpostproc-dev \
    libass-dev \
    libfreetype-dev \
    libharfbuzz-dev \
    libfribidi-dev \
    libfontconfig-dev \
    libpango-dev \
    libcairo-dev \
    libgdk-pixbuf-dev \
    libgtk-3-dev
  1. 构建项目
go build -o bin/bdwind-gstreamer ./cmd/bdwind-gstreamer
  1. 运行服务器
./bin/bdwind-gstreamer --config config.yaml
  1. 访问 Web 界面 打开浏览器访问 http://localhost:8080

Docker 部署

  1. 构建镜像
docker build -t bdwind-gstreamer .
  1. 运行容器
# 使用docker-compose(推荐)
docker-compose up -d

# 或直接使用docker
docker run -d \
  --name bdwind-gstreamer \
  --network host \
  --privileged \
  -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
  -v /dev/shm:/dev/shm:rw \
  -v /dev/dri:/dev/dri:rw \
  -e DISPLAY=:0 \
  bdwind-gstreamer
  1. 访问服务

配置说明

配置文件 (config.yaml)

server:
  host: "0.0.0.0"
  port: 8080
  ssl:
    enabled: false
    cert_file: ""
    key_file: ""

webrtc:
  stun_servers:
    - "stun:stun.l.google.com:19302"
  turn_servers: []
  video:
    width: 1920
    height: 1080
    framerate: 60
    bitrate: 2000
    codec: "h264"
    gpu_accel: true
    gpu_device: 0
  audio:
    channels: 2
    sample_rate: 48000
    bitrate: 96000
    codec: "opus"

gstreamer:
  pipeline: ""
  plugins: []

metrics:
  enabled: true
  port: 9090
  path: "/metrics"

logging:
  level: "info"
  format: "json"
  output: "stdout"

环境变量

变量名 默认值 说明
BDWIND_SERVER_HOST 0.0.0.0 服务器监听地址
BDWIND_SERVER_PORT 8080 服务器端口
BDWIND_LOGGING_LEVEL info 日志级别
DISPLAY :0 X11 显示设备

架构设计

核心模块

  1. 配置管理 (internal/config/)

    • 配置文件加载和验证
    • 环境变量支持
    • 默认值设置
  2. WebRTC 管理 (internal/webrtc/)

    • PeerConnection 管理
    • 媒体轨道处理
    • ICE 候选处理
  3. 信令服务器 (internal/signaling/)

    • WebSocket 连接管理
    • 信令消息处理
    • 客户端会话管理
  4. 监控指标 (internal/metrics/)

    • Prometheus 指标收集
    • 系统资源监控
    • 性能统计
  5. Web 界面 (pkg/web/)

    • 响应式 Web 客户端
    • WebRTC 连接管理
    • 实时统计显示

数据流

桌面捕获 → GStreamer处理 → WebRTC编码 → 网络传输 → 浏览器解码 → 显示

开发指南

项目结构

BDWind-GSteamer/
├── cmd/bdwind-gstreamer/     # 主程序入口
├── internal/                 # 内部包
│   ├── config/              # 配置管理
│   ├── webrtc/              # WebRTC核心
│   ├── signaling/           # 信令服务器
│   ├── metrics/             # 监控指标
│   ├── gstreamer/           # GStreamer集成
│   └── utils/               # 工具函数
├── pkg/                     # 公共包
│   ├── web/                 # Web界面
│   └── monitoring/          # 监控组件
├── docs/                    # 文档
├── config.yaml             # 配置文件
├── Dockerfile              # Docker构建文件
├── docker-compose.yml      # Docker Compose配置
└── README.md               # 项目说明

添加新功能

  1. 创建新模块
mkdir -p internal/newmodule
touch internal/newmodule/newmodule.go
  1. 实现接口
package newmodule

type NewModule interface {
    Start() error
    Stop() error
}

type newModule struct {
    // 实现细节
}
  1. 集成到主程序
// 在 cmd/bdwind-gstreamer/main.go 中
newModule := newmodule.New(config)
go newModule.Start()

测试

# 运行所有测试
go test ./...

# 运行特定包的测试
go test ./internal/webrtc

# 运行基准测试
go test -bench=. ./internal/webrtc

性能优化

视频编码优化

  • 使用 GPU 加速编码(NVENC/VAAPI)
  • 优化关键帧间隔
  • 动态比特率调整
  • 硬件加速解码

网络优化

  • ICE 候选优化
  • 拥塞控制
  • 自适应比特率
  • 丢包重传

系统优化

  • 内存池管理
  • 零拷贝传输
  • 异步处理
  • 负载均衡

故障排除

常见问题

  1. GStreamer 插件未找到
# 检查GStreamer安装
gst-inspect-1.0 --version
gst-inspect-1.0 ximagesrc

# 设置插件路径
export GST_PLUGIN_PATH=/usr/lib/gstreamer-1.0
  1. X11 显示问题
# 允许X11转发
xhost +local:docker

# 检查显示设置
echo $DISPLAY
  1. WebRTC 连接失败
  • 检查 STUN/TURN 服务器配置
  • 确认防火墙设置
  • 查看浏览器控制台错误

日志分析

# 查看应用日志
docker logs bdwind-gstreamer

# 查看系统日志
journalctl -u bdwind-gstreamer

# 启用调试日志
export BDWIND_LOGGING_LEVEL=debug

贡献指南

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

代码规范

  • 使用 Go 官方代码格式化工具
  • 遵循 Go 命名约定
  • 添加适当的注释和文档
  • 编写单元测试

许可证

本项目采用 MIT License 许可证。

致谢

联系方式

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published