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
liquanqing 2347363a18 在gop_cache中简单的对环形队列缓存进行封装 5 years ago
app/lals 1. [feat] 完成package hls的基础功能,并做了小范围重构 2. [feat] lals服务接入hls功能 3. [refactor] 将app目录下除lals的其他应用移入demo目录下 4. [feat] 新增两个demo:analyseflv和analysehls,分别用于拉取HTTP-FLV和HLS的流,并进行分析v0.12.3 -> CHANGELOG.md 5 years ago
conf 1. [feat] 完成package hls的基础功能,并做了小范围重构 2. [feat] lals服务接入hls功能 3. [refactor] 将app目录下除lals的其他应用移入demo目录下 4. [feat] 新增两个demo:analyseflv和analysehls,分别用于拉取HTTP-FLV和HLS的流,并进行分析v0.12.3 -> CHANGELOG.md 5 years ago
demo 1. [feat] 完成package hls的基础功能,并做了小范围重构 2. [feat] lals服务接入hls功能 3. [refactor] 将app目录下除lals的其他应用移入demo目录下 4. [feat] 新增两个demo:analyseflv和analysehls,分别用于拉取HTTP-FLV和HLS的流,并进行分析v0.12.3 -> CHANGELOG.md 5 years ago
pkg 在gop_cache中简单的对环形队列缓存进行封装 5 years ago
.gitignore 1. [feat] 完成package hls的基础功能,并做了小范围重构 2. [feat] lals服务接入hls功能 3. [refactor] 将app目录下除lals的其他应用移入demo目录下 4. [feat] 新增两个demo:analyseflv和analysehls,分别用于拉取HTTP-FLV和HLS的流,并进行分析v0.12.3 -> CHANGELOG.md 5 years ago
.travis.yml fix cannot use test profile flag with multiple packages 6 years ago
CHANGELOG.md v0.9.0 -> CHANGELOG.md 5 years ago
LICENSE 1st 6 years ago
README.md v0.9.0 -> CHANGELOG.md 5 years ago
TEST.md [doc] TEST.md 5 years ago
build.sh 1. [feat] 完成package hls的基础功能,并做了小范围重构 2. [feat] lals服务接入hls功能 3. [refactor] 将app目录下除lals的其他应用移入demo目录下 4. [feat] 新增两个demo:analyseflv和analysehls,分别用于拉取HTTP-FLV和HLS的流,并进行分析v0.12.3 -> CHANGELOG.md 5 years ago
build_linux.sh 1). flvfile2rtmppush 增加 bininfo 2). flvfile2rtmppush error 时 panic -> log & os exit 3). build_linux.sh 直接调用 build.sh 5 years ago
gen_release.sh [chore] gen_release.sh 5 years ago
go.mod 1. [feat] 完成package hls的基础功能,并做了小范围重构 2. [feat] lals服务接入hls功能 3. [refactor] 将app目录下除lals的其他应用移入demo目录下 4. [feat] 新增两个demo:analyseflv和analysehls,分别用于拉取HTTP-FLV和HLS的流,并进行分析v0.12.3 -> CHANGELOG.md 5 years ago
go.sum 1. [feat] 完成package hls的基础功能,并做了小范围重构 2. [feat] lals服务接入hls功能 3. [refactor] 将app目录下除lals的其他应用移入demo目录下 4. [feat] 新增两个demo:analyseflv和analysehls,分别用于拉取HTTP-FLV和HLS的流,并进行分析v0.12.3 -> CHANGELOG.md 5 years ago
test.sh [chore] wget test.flv from blog if doc repo fail 5 years ago

README.md

Wide
Go语言编写的直播流媒体网络传输服务器





        


已支持RTMPHTTP-FLVHLS(m3u8 + ts)H264/AVCH265/HEVCAACGOP缓存。

README 目录

  1. 编译、运行、体验功能
  2. 配置文件说明
  3. 仓库目录框架
  4. Roadmap
  5. 文档
  6. 联系我
  7. 性能测试,测试过的第三方客户端

一. 编译、运行、体验功能

编译

方式1直接下载编译好的二进制可执行文件

最新发布版本页面下载对应平台编译好的二进制可执行文件的zip压缩包。

方式2自己编译

# 不使用 Go module
$go get -u github.com/q191201771/lal
$cd $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

体验功能

快速体验lals服务器见常见推拉流客户端软件的使用方式

二. 配置文件说明

{
  "rtmp": {
    "addr": ":19350", // RTMP服务监听的端口客户端向lals推拉流都是这个地址
    "gop_num": 2      // RTMP拉流的GOP缓存数量加速秒开
  },
  "httpflv": {
    "sub_listen_addr": ":8080", // HTTP-FLV拉流地址
    "gop_num": 2
  },
  "hls": {
    "sub_listen_addr": ":8081",   // HLS监听地址
    "out_path": "/tmp/lal/hls/",  // HLS文件保存根目录
    "fragment_duration_ms": 3000, // 单个TS文件切片时长
    "fragment_num": 6             // M3U8文件列表中TS文件的数量
  },
  "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,       // 日志末尾是否携带源码文件名以及行号的信息
    "assert_behavior": 1           // 日志断言的行为1 只打印错误日志 2 打印并退出程序 3 打印并panic
  },
  "pprof": {
    "addr": ":10001" // Go pprof web地址
  }
}

其它放在代码中的配置:

三. 仓库目录框架

简单来说,源码在pkg/app/demo/三个目录下。

  • pkg/存放各package包供本repo的程序以及其他业务方使用
  • app/重要程序的入口目前仅包含lals——基于lal编写的一个通用流媒体服务器程序
  • demo/:存放各种基于lal/pkg开发的小程序(小工具),一个子目录是一个程序,详情见各源码文件中头部的说明
pkg/                  ......
|-- rtmp/             ......RTMP协议
|-- httpflv/          ......HTTP-FLV协议
|-- hls/              ......HLS协议
|-- logic/            ......lals服务器程序的上层业务逻辑
|-- aac/              ......音频AAC编码格式相关
|-- avc/              ......视频H264/AVC编码格式相关
|-- hevc/             ......视频H265/HEVC编码格式相关

app/                  ......
|-- lals/             ......流媒体服务器lals的main函数入口

demo/                 ......
|-- analyseflv        ......
|-- analysehls        ......
|-- flvfile2rtmppush  ......
|-- rtmppull          ......
|-- httpflvpull       ......
|-- modflvfile        ......
|-- flvfile2es        ......
|-- learnts           ......
|-- tscmp             ......

bin/                  ......可执行文件编译输出目录
conf/                 ......配置文件目录

后续我再画些源码架构图。

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

四. Roadmap

项目原则:

  • 代码可读可维护
  • 框架清晰,模块化。业务与协议隔离。协议、网络传输等基础功能都是功能纯粹,可独立使用的库。
  • 高性能
  • 提供各种client代码即使你使用其他流媒体服务器这些client也是非常好用的
  • 依托Go语言提供所有平台下最简单的编译、调试、发布方式
  • 不依赖第三方代码
  • 后续可快速集成各种网络传输协议,流媒体封装协议

lals服务器功能

  • pub 接收推流: RTMP
  • sub 接收拉流: RTMPHTTP-FLVHLS(m3u8+ts)
  • 音频编码格式: AAC
  • 视频编码格式: H264/AVCH265/HEVC
  • GOP缓存 用于秒开

TODO

  • RTMP转推
  • RTMP回源
  • HTTP-FLV回源
  • 静态转推、回源
  • 动态转推、回源
  • rtsp
  • rtp/rtcp
  • webrtc
  • udp quic
  • udp srt
  • udp kcp
  • 分布式。提供与外部调度系统交互的接口。应对多级分发场景,或平级源站类型场景
  • 调整框架代码
  • 各种推流、拉流客户端兼容性测试
  • 和其它主流服务器的性能对比测试
  • 整理日志
  • 稳定性测试
  • mp4

五. 文档

六. 联系我

扫码加我微信(微信号: q191201771进行技术交流或扯淡。微信群已开放加我好友后可拉进群。

七. 性能测试,测试过的第三方客户端

TEST.md