Skip to content

🚀 开箱即用的.NET直播流媒体服务器 - 支持RTMP推流、HTTP-FLV/WebSocket-FLV拉流,内置Web管理界面 | Ready-to-use .NET live streaming server with RTMP push, HTTP-FLV/WebSocket-FLV pull, built-in web management

License

Notifications You must be signed in to change notification settings

apgk/Berry.Live

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Berry.Live

简体中文 README — Berry.Live

项目简介

Berry.Live 是一个基于 .NET 9 和 LiveStreamingServerNet 库构建的实时直播流媒体服务器。该项目提供完整的 RTMP 推流和多种格式拉流功能,支持直播内容的实时转发和分发。

分支说明

  • main:直播核心代码分支, 作为核心内容.
  • live:直播相关功能分支, 包含直播流处理、业务等功能, 作为落地样例.

核心功能

🎥 直播流媒体服务

  • RTMP 推流服务器:支持 OBS、FFmpeg 等推流工具通过 RTMP 协议推送直播内容
  • 多格式拉流支持
    • HTTP-FLV:通过 HTTP 协议传输 FLV 格式直播流
    • WebSocket-FLV:基于 WebSocket 的实时 FLV 流传输
  • 实时转码与分发:自动将 RTMP 推流转换为多种拉流格式

🎛️ 管理与监控

  • Web 管理面板:内置管理界面(/ui 路径),支持:
    • 直播流状态监控
    • HTTP-FLV 预览功能
    • 实时连接数据统计
  • RESTful API:提供编程接口获取直播流 URL 和配置信息

流认证

Berry.Live 现已支持流认证功能。通过 src/Berry.Live.Api/Auth/ 目录下的相关组件(如 RtmpAuthorizationHandler.csStreamKeyValidator.csFlvAuthorizationMiddleware.cs 等),可对推流和拉流请求进行鉴权,确保只有合法用户才能推送和拉取直播流。

流认证简介

  • 支持自定义流密钥校验逻辑
  • 可缓存流密钥,提升鉴权性能
  • 集成于 API 服务启动流程
  • 支持 RTMP 推流、HTTP-FLV 和 WebSocket-FLV 拉流鉴权

相关文件

  • src/Berry.Live.Api/Auth/IStreamKeyValidator.cs:流密钥校验接口
  • src/Berry.Live.Api/Auth/StreamKeyValidator.cs:默认实现
  • src/Berry.Live.Api/Auth/RtmpAuthorizationHandler.cs:RTMP 推流鉴权处理器
  • src/Berry.Live.Api/Auth/FlvAuthorizationMiddleware.cs:HTTP-FLV 和 WS-FLV 拉流鉴权中间件
  • src/Berry.Live.Api/Auth/StreamKeyCache.cs:流密钥缓存

如需自定义流认证逻辑,可扩展上述接口或实现。

📡 API 接口

  • 直播流 URL 获取GET /api/v1/controller/Get?userId={用户ID}
    • 返回指定用户的 RTMP 推流地址
    • 返回对应的 HTTP-FLV 和 WebSocket-FLV 拉流地址

技术栈

  • .NET 9:最新 .NET 平台
  • ASP.NET Core:Web API 框架
  • LiveStreamingServerNet:专业直播流媒体处理库
  • Scalar OpenAPI:API 文档界面(/api 路径)
  • WebSocket:实时双向通信支持

先决条件

  • .NET SDK 9.0 或更高版本
  • 推荐开发环境
    • Visual Studio 2022/2023 或 VS Code + C# 扩展
    • Git(用于源码管理)
  • 测试工具(可选):
    • OBS Studio(用于推流测试)
    • FFmpeg(用于命令行推流)
    • VLC 或其他支持 FLV 的播放器(用于拉流测试)

快速开始(本地运行)

  1. 克隆仓库:

    git clone https://github.com/wosledon/Berry.Live.git

  2. 切换到仓库目录并进入 API 项目目录:

    cd Berry.Live/src/Berry.Live.Api

  3. 还原并构建项目:

    dotnet restore dotnet build -c Debug

  4. 运行 API(开发环境):

    dotnet run --project Berry.Live.Api.csproj

    或者在 Visual Studio 中按 F5 启动调试。

应用程序将按 Properties/launchSettings.json 中的配置暴露本地地址(通常为 http://localhost:5xxxhttps://localhost:7xxx)。

使用示例

1. 获取直播流 URL

发送 GET 请求到 API 端点:

GET /api/v1/controller/Get?userId=your_user_id

响应示例:

{
  "rtmpUrl": "rtmp://localhost:1935/live/your_user_id",
  "flvUrl": "http://localhost:5000/live/your_user_id.flv",
  "wsFlvUrl": "ws://localhost:5000/live/your_user_id.flv"
}

2. 推流到服务器

使用 OBS Studio:

  1. 设置推流服务器:rtmp://localhost:1935/live
  2. 设置推流密钥:your_user_id

使用 FFmpeg 命令行:

ffmpeg -i input.mp4 -c copy -f flv rtmp://localhost:1935/live/your_user_id

3. 拉流观看

  • HTTP-FLV:在支持 FLV 的播放器中打开 http://localhost:5000/live/your_user_id.flv?key=your_stream_key
  • WebSocket-FLV:在 Web 页面中使用 WebSocket 连接 ws://localhost:5000/live/your_user_id.flv?key=your_stream_key

注意:拉流时必须在 URL 中附加 ?key=your_stream_key 参数进行鉴权,否则将被拒绝访问。

4. 管理界面

访问 http://localhost:5000/ui 查看:

  • 当前活跃的直播流
  • 实时预览功能
  • 连接统计信息

配置

主要配置项

  • RTMP 端口:在 appsettings.json 中配置 RtmpPort(默认 1935)
  • 日志级别:通过 Logging 配置节调整日志输出
  • 允许的主机AllowedHosts 配置外部访问权限

配置文件说明

  • appsettings.json:生产环境配置
  • appsettings.Development.json:开发环境配置(会覆盖生产配置)

环境变量支持

生产部署时可通过环境变量覆盖配置:

# 设置 RTMP 端口
export RtmpPort=1935

# 设置运行环境
export ASPNETCORE_ENVIRONMENT=Production

构建与发布

  • 使用 dotnet publish 为不同运行时或自包含发布打包:

    dotnet publish -c Release -r win-x64 --self-contained false -p:PublishSingleFile=false

  • 发布产物在 src/Berry.Live.Api/bin/Release/net9.0/publish(示例)中。项目仓库中也包含 bin/ 示例输出,供参考。

目录结构

Berry.Live/
├── src/Berry.Live.Api/          # 主要 Web API 项目
│   ├── Controllers/             # API 控制器
│   │   └── ApiControllerBase.cs # 直播流 API 控制器
│   ├── Properties/              # 项目配置
│   │   └── launchSettings.json  # 启动配置
│   ├── appsettings*.json        # 应用配置文件
│   ├── Program.cs              # 应用程序入口点
│   └── bin/Debug/net9.0/       # 构建输出
│       └── admin-panel-ui/     # 管理界面静态资源
├── tests/                      # 测试项目目录
├── Berry.Live.slnx            # 解决方案文件
└── README.md                  # 项目说明文档

重要文件说明

  • Program.cs:配置 RTMP 服务器、HTTP-FLV、WebSocket-FLV 和管理界面
  • LiveController.cs:提供获取直播流 URL 的 API 接口
  • admin-panel-ui/:管理界面的静态资源文件(由 NuGet 包提供)

本地开发提示

开发模式运行

使用 dotnet watch 在开发时自动重建并重启:

cd src/Berry.Live.Api
dotnet watch run

调试与测试

  1. API 文档:运行项目后访问 /api 查看 Scalar API 文档
  2. 管理界面:访问 /ui 查看直播流管理面板
  3. 端口配置
    • HTTP API:通常在 5000 端口(HTTP)或 7000 端口(HTTPS)
    • RTMP 服务:默认 1935 端口

防火墙配置

确保以下端口在防火墙中开放:

  • 1935:RTMP 推流端口
  • 5000/7000:HTTP API 和管理界面端口

开发调试流程

  1. 启动 Berry.Live 服务
  2. 使用 OBS 或 FFmpeg 推流到 rtmp://localhost:1935/live/test
  3. 通过 API 获取拉流地址:/api/v1/controller/Get?userId=test
  4. 在管理界面或播放器中查看直播流

测试

  • 本仓库根目录下有 tests/ 目录(如存在测试项目,请在运行前进入对应测试目录并运行 dotnet test)。

贡献

  • 欢迎 Issues 和 Pull Requests。请保持提交信息清晰,遵循仓库的代码风格和分支策略。

许可证

本项目遵循仓库根目录中的 LICENSE 文件。请查阅 LICENSE 了解详情。

联系方式

如需帮助,请在仓库中创建 Issue 或联系项目维护者。

小结

Berry.Live 是一个功能完整的直播流媒体服务器,支持 RTMP 推流和多种格式的拉流服务。项目基于 .NET 9 和专业的 LiveStreamingServerNet 库构建,提供了 Web 管理界面、RESTful API 和实时流媒体处理能力。

适用场景

  • 个人直播平台搭建
  • 企业内部直播系统
  • 直播技术学习和研究
  • 流媒体服务集成开发

后续扩展

如需进一步定制,可以考虑:

  • 添加用户认证和权限管理
  • 集成数据库存储直播记录
  • 支持直播录制和回放
  • 添加 CDN 分发支持
  • 实现直播间聊天功能

About

🚀 开箱即用的.NET直播流媒体服务器 - 支持RTMP推流、HTTP-FLV/WebSocket-FLV拉流,内置Web管理界面 | Ready-to-use .NET live streaming server with RTMP push, HTTP-FLV/WebSocket-FLV pull, built-in web management

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%