golang 流媒体(直播音视频网络传输)服务
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Go to file
q191201771 f5ef55ae4a v0.4.0 CHANGELOG.md 5 years ago
app - package logic: 将 rtmp pub session 的音视频转发给httpflv sub session 5 years ago
conf - package logic: 将 rtmp pub session 的音视频转发给httpflv sub session 5 years ago
pkg - package logic: 将 rtmp pub session 的音视频转发给httpflv sub session 5 years ago
.gitignore - package logic: 将 rtmp pub session 的音视频转发给httpflv sub session 5 years ago
.travis.yml
CHANGELOG.md v0.4.0 CHANGELOG.md 5 years ago
LICENSE
README.md README 5 years ago
build.sh
build_linux.sh
go.mod use naza v0.5.0 5 years ago
go.sum use naza v0.5.0 5 years ago
test.sh - package logic: 将 rtmp pub session 的音视频转发给httpflv sub session 5 years ago

README.md

Wide
Go语言编写的流媒体 库 / 客户端 / 服务端





        


Go语言编写的流媒体 库 / 客户端 / 服务器。目前 rtmp / http-flv 部分基本完成了。

源码框架

简单来说,主要源码在app/pkg/两个目录下,后续我再画些源码架构图。

app/                  ......各种main包的源码文件一个子目录对应一个main包即对应可生成一个可执行文件
|-- lals/             ......[最重要的] 流媒体服务器
|-- flvfile2es        ......将本地flv文件分离成h264/avc es流文件以及aac es流文件
|-- flvfile2rtmppush  ......rtmp推流客户端输入是本地flv文件文件推送完毕后可循环推送rtmp push流并不断开
|-- httpflvpull       ......http-flv拉流客户端
|-- modflvfile        ......修改本地flv文件
|-- rtmppull          ......rtmp拉流客户端存储为本地flv文件
pkg/                  ......源码包
|-- aac/              ......音频aac编解码格式相关
|-- avc/              ......视频avc h264编解码格式相关
|-- httpflv/          ......http-flv协议
|-- logic/            ......lals服务器的上层业务
|-- rtmp/             ......rtmp协议
bin/                  ......可执行文件编译输出目录
conf/                 ......配置文件目录

目前唯一的第三方依赖(我自己写的 Go 基础库): github.com/q191201771/naza

编译和运行

# 不使用 Go module
$go get -u github.com/q191201771/lal
# cd into $GOPATH/src/github.com/q191201771/lal
$./build.sh

# 使用 go module
$export GOPROXY=https://goproxy.cn
$git clone https://github.com/q191201771/lal.git && cd lal && ./build.sh

# 运行
$./bin/lals -c conf/lals.conf.json

配置文件说明

{
  "rtmp": {
    "addr": ":19350" // rtmp服务监听的端口
  },
  "httpflv": {
    "sub_listen_addr": ":8080"
  },
  "log": {
    "level": 1,                    // 日志级别1 debug, 2 info, 3 warn, 4 error, 5 fatal
    "filename": "./logs/lals.log", // 日志输出文件
    "is_to_stdout": true,          // 是否打印至标志控制台输出
    "is_rotate_daily": true,       // 日志按天翻滚
    "short_file_flag": true        // 日志末尾是否携带源码文件名以及行号的信息
  },
  "pprof": {
    "addr": ":10001" // Go pprof web 地址
  }
}

其它放在代码中的配置:

测试过的客户端

推流端:
- OBS 21.0.3(mac)
- ffmpeg 3.4.2(mac)
- srs-bench (srs项目配套的一个压测工具)
- flvfile2rtmppush (lal app中的rtmp推流客户端)

拉流端:
- VLC 2.2.6(mac)
- MPV 0.29.1(mac)
- ffmpeg 3.4.2(mac)
- srs-bench (srs项目配套的一个压测工具)

roadmap

有建议、意见、bug、功能等等欢迎提 issue 啊100% 会回复的。

lals 服务器目标版本roadmap如下

v1.0.0

  • 接收 rtmp 推流 [DONE]
  • 转发给 rtmp 拉流 [DONE]
  • 转发给 http-flv 拉流 [DONE]
  • AAC [DONE]
  • H264 [DONE]
  • 各种 rtmp 推流、拉流客户端兼容性测试
  • 和其它主流 rtmp 服务器的性能对比测试
  • 整理日志
  • 调整框架代码
  • 稳定性测试

v2.0.0

  • Gop 缓存功能

v3.0.0

  • rtmp 转推
  • rtmp 回源
  • http-flv 回源

v4.0.0

  • udp quic srt
  • rtp/rtcp
  • webrtc

v5.0.0

  • 分布式。提供与外部调度系统交互的接口。应对多级分发场景,或平级源站类型场景

没有排到预期版本中的功能

  • hls
  • h265

最终目标:

性能ok框架清晰代码对于任何新手来说都是可读可维护的。

  • 实现一个支持多种流媒体协议比如rtmp, http-flv, hls, rtp/rtcp 等多种底层传输协议比如tcp, udp, srt, quic 等)的服务器
  • 所有协议都以模块化的库形式提供给需要的用户使用
  • 提供多种协议的推流客户端、拉流客户端或者说演示demo

文档

联系我

欢迎扫码加我微信,进行技术交流或扯淡。