Skip to content
🍀 Go live stream library / client / server and much more. now i'm working on rtmp server part. || Go语言编写的流媒体 库 / 客户端 / 服务器。正在实现 rtmp 服务器部分。
Go Shell
Branch: master
Clone or download
Latest commit ffd623b Sep 12, 2019

README.md

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





        


工程目录说明

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

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

编译和运行

$go get -u github.com/q191201771/lal
# cd into $GOPATH/src/github.com/q191201771/lal
$./build.sh

$./bin/lal -c conf/lal.conf.json

#如果使用 go module
$git clone https://github.com/q191201771/lal.git && cd lal && ./build.sh

配置文件说明

{
  "rtmp": {
    "addr": ":19350" // rtmp服务监听的端口
  },
  "log": {
    "level": 0,                   // 日志级别,0 debug 1 info 2 warn 3 error
    "filename": "./logs/lal.log", // 日志输出文件
    "is_to_stdout": true,         // 是否打印至标志控制台输出
    "rotate_mbyte": 1024          // 日志按大小翻滚
  }
}

roadmap

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

lal 服务器目标版本roadmap如下:

v1.0.0

实现 rtmp 转发服务器。目前已经基本完成了。大概在十一假期发布。

  • 各种 rtmp 推流、拉流客户端兼容性测试
  • 和其它主流 rtmp 服务器的性能对比测试
  • 整理日志
  • 调整框架代码
  • 稳定性测试

v1.0.0

  • Gop 缓存功能
  • http-flv 拉流
  • rtmp 转推
  • rtmp 回源
  • http-flv 回源

v2.0.0

  • hls

v3.0.0

  • udp quic srt
  • rtp/rtcp
  • webrtc

v4.0.0

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

最终目标:

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

依赖

文档

You can’t perform that action at this time.