Wide
Go live stream lib/client/server and much more.





        

--- Go直播流媒体网络传输服务器,已支持RTMP,HTTP-FLV,HLS(m3u8+ts),H264/AVC,H265/HEVC,AAC,GOP缓存,中继转推。更多功能持续迭代中。 ### README 目录 1. 编译、运行、体验功能 2. 配置文件说明 3. 仓库目录框架 4. Roadmap 5. 文档 6. 联系我 7. 性能测试,测试过的第三方客户端 ### 一. 编译、运行、体验功能 #### 编译 方式1,直接下载编译好的二进制可执行文件 上[最新发布版本页面](https://github.com/q191201771/lal/releases/latest),下载对应平台编译好的二进制可执行文件的zip压缩包。 方式2,自己编译 ```shell # 不使用 Go module $go get -u github.com/q191201771/lal $cd $GOPATH/src/github.com/q191201771/lal $./build.sh # 使用 Go module $export GOPROXY=https://goproxy.io $git clone https://github.com/q191201771/lal.git $cd lal $./build.sh ``` #### 运行 ```shell $./bin/lalserver -c conf/lalserver.conf.json ``` #### 体验功能 快速体验lalserver服务器见:[常见推拉流客户端软件的使用方式](https://pengrl.com/p/20051/) ### 二. 配置文件说明 ``` { "rtmp": { "enable": true, // 是否开启rtmp服务的监听 "addr": ":19350", // RTMP服务监听的端口,客户端向lalserver推拉流都是这个地址 "gop_num": 2 // RTMP拉流的GOP缓存数量,加速秒开 }, "httpflv": { "enable": true, // 是否开启HTTP-FLV服务的监听 "sub_listen_addr": ":8080", // HTTP-FLV拉流地址 "gop_num": 2 }, "hls": { "enable": true, // 是否开启HLS服务的监听 "sub_listen_addr": ":8081", // HLS监听地址 "out_path": "/tmp/lal/hls/", // HLS文件保存根目录 "fragment_duration_ms": 3000, // 单个TS文件切片时长,单位毫秒 "fragment_num": 6 // M3U8文件列表中TS文件的数量 }, "relay_push": { "enable": false, // 是否开启中继转推功能,开启后,自身接收到的所有流都会转推出去 "addr_list":[ // 中继转推的对端地址,支持填写多个地址,做1对n的转推 ] }, "pprof": { "enable": true, // 是否开启Go pprof web服务的监听 "addr": ":10001" // Go pprof web地址 }, "log": { "level": 1, // 日志级别,1 debug, 2 info, 3 warn, 4 error, 5 fatal "filename": "./logs/lalserver.log", // 日志输出文件 "is_to_stdout": true, // 是否打印至标志控制台输出 "is_rotate_daily": true, // 日志按天翻滚 "short_file_flag": true, // 日志末尾是否携带源码文件名以及行号的信息 "assert_behavior": 1 // 日志断言的行为,1 只打印错误日志 2 打印并退出程序 3 打印并panic } } ``` ### 三. 仓库目录框架 简单来说,源码在`pkg/`,`app/lalserver/`,`app/demo/`三个目录下。 - `pkg/`:存放各package包,供本repo的程序以及其他业务方使用 - `app/lalserver`:基于lal编写的一个通用流媒体服务器程序入口 - `app/demo/`:存放各种基于`lal/pkg`开发的小程序(小工具),一个子目录是一个程序,详情见各源码文件中头部的说明 ``` pkg/ ...... |-- rtmp/ ......RTMP协议 |-- httpflv/ ......HTTP-FLV协议 |-- hls/ ......HLS协议 |-- logic/ ......lalserver服务器程序的上层业务逻辑 |-- aac/ ......音频AAC编码格式相关 |-- avc/ ......视频H264/AVC编码格式相关 |-- hevc/ ......视频H265/HEVC编码格式相关 |-- innertest/ ......测试代码 app/ ...... |-- lalserver/ ......流媒体服务器lalserver的main函数入口 |-- demo/ ...... |-- analyseflv ...... |-- analysehls ...... |-- flvfile2rtmppush ...... |-- rtmppull ...... |-- httpflvpull ...... |-- modflvfile ...... |-- flvfile2es ...... |-- learnts ...... |-- tscmp ...... conf/ ......配置文件目录 bin/ ......可执行文件编译输出目录 ``` 后续我再画些源码架构图。 目前唯一的第三方依赖(我自己写的Go基础库): [github.com/q191201771/naza](https://github.com/q191201771/naza) ### 四. Roadmap #### lalserver服务器功能 - [x] **pub接收推流:** RTMP - [x] **sub接收拉流:** RTMP,HTTP-FLV,HLS(m3u8+ts) - [x] **音频编码格式:** AAC - [x] **视频编码格式:** H264/AVC,H265/HEVC - [x] **GOP缓存:** 用于秒开 - [x] **relay push中继转推:** RTMP - [ ] RTMP回源 - [ ] HTTP-FLV回源 - [ ] 静态转推、回源 - [ ] 动态转推、回源 - [ ] rtsp - [ ] rtp/rtcp - [ ] webrtc - [ ] udp quic - [ ] udp srt - [ ] udp kcp - [ ] mp4 - [ ] 分布式。提供与外部调度系统交互的接口。应对多级分发场景,或平级源站类型场景 - [ ] 调整框架代码 - [ ] 各种推流、拉流客户端兼容性测试 - [ ] 和其它主流服务器的性能对比测试 - [ ] 整理日志 - [ ] 稳定性测试 ### 五. 文档 * [流媒体音视频相关的点我](https://pengrl.com/categories/%E6%B5%81%E5%AA%92%E4%BD%93%E9%9F%B3%E8%A7%86%E9%A2%91/) * [Go语言相关的点我](https://pengrl.com/categories/Go/) * [我写的其他文章](https://pengrl.com/all/) ### 六. 联系我 扫码加我微信(微信号: q191201771),进行技术交流或扯淡。微信群已开放,加我好友后可拉进群。 ### 七. 性能测试,测试过的第三方客户端 见[TEST.md](https://github.com/q191201771/lal/blob/master/TEST.md) ### 八. 项目star趋势图 觉得这个repo还不错,就点个star支持一下吧 :) [![Stargazers over time](https://starchart.cc/q191201771/lal.svg)](https://starchart.cc/q191201771/lal)