lal 流媒体服务器 GOLANG · PHP/Python/前端/Linux 等等 学习笔记 · 看云
[TOC]
> [github](https://github.com/q191201771/lal)
> [官方文档](https://pengrl.com/lal/#/?id=%e2%96%a6-%e4%ba%8c-lalserver-%e5%ae%89%e8%a3%85%e3%80%81%e8%bf%90%e8%a1%8c)
## 概述
目前已支持RTMP, RTSP(RTP/RTCP), HLS, HTTP\[S\]/WebSocket\[S\]-FLV/TS协议

<br/>
**特性**
* **全平台**
* 支持linux/macOS/windows多系统开发、调试、运行
* 支持多arch运行。比如amd64/arm64/arm32/ppc64le/mipsle/s390x
* 支持交叉编译。可在任一平台编译出其他平台的可执行文件
* 运行无依赖。可执行文件无任何环境、库安装依赖,可单文件独立运行
* 提供各平台可执行文件,可免编译直接运行(前提是开放全部源码哈)
* 支持docker
* **高性能**。多核多线程扩展,支持高并发,性能和同类型`c/c++`开发服务处于同一水平
* **高可用**。完善的单元测试。并且有多个线上环境应用
* **多种直播流封装协议**。
* 支持RTMP, RTSP(RTP/RTCP), HLS, HTTP\[S\]/WebSocket\[S\]-FLV/TS
* 支持不同封装协议间相互转换
* 支持二次开发,扩展其他协议
* **多种编码格式**。视频支持H264/AVC,H265/HEVC,音频支持AAC
* **多种格式录制**。支持FLV,长MPEGTS,HLS录制(HLS直播与录制可同时开启)
* **HTTPS**。支持HTTPS-FLV,HTTPS-TS,HLS over HTTPS拉流
* **WebSocket/WebSockets**。支持Websocket-FLV,WebSocket-TS拉流
* **HLS**。支持LIVE实时直播、VOD全列表直播。切片文件支持多种删除方式。支持内存切片
* **RTSP**。支持over TCP(interleaved模式)。支持basic/digest auth验证。
* **RTMP**。支持给单视频添加静音音频数据,支持合并发送。兼容对接各种常见RTMP实现
* **HTTP API接口**。用于获取服务信息,向服务发送命令。
* **HTTP Notify事件回调**。获取时间通知,业务方可以轻松定制自身的逻辑。
* **支持多种方式鉴权**
* **支持分布式集群**
* **静态pull回源**。通过配置文件配置回源地址
* **静态push转推**。支持转推多个地址。通过配置文件配置转推地址
* **支持按需回源**。没有观众的回源拉流可以主动关闭
* **CORS跨域**。支持HTTP-FLV,HTTP-TS,HLS跨域拉流
* **HTTP文件服务器**。比如HLS切片文件可直接播放,不需要额外的HTTP文件服务器
* **监听端口复用**。HTTP-FLV,HTTP-TS,HLS可使用相同的端口。over HTTPS类似
* **秒开播放**。GOP缓冲
* **支持(在服务端)叠加静音音频**
* **支持先拉流后推流**
* **支持推流断开后重连,拉流端无感知**。
## 运行
```
lalserver -c ./conf/lalserver.conf.json
```
## 协议自动转换
**协议转换支持情况**
|转封装类型|sub rtmp|sub http[s]/websocket[s]-flv|sub http[s]/websocket[s]-ts|sub hls|sub rtsp|relay push rtmp|
|---|---|---|---|---|---|---|
|pub rtmp| ✔| ✔| ✔| ✔| ✔| ✔|
|pub rtsp| ✔| ✔| ✔| ✔| ✔| ✔|
|relay pull rtmp| ✔| ✔| ✔| ✔| ✔| ✔|
<br/>
注意地址必须是 `/live` 开头 开头
```
ffmpeg -re -i demo.flv -c:a copy -c:v copy -f flv rtmp://127.0.0.1:1935/live/test110
```
自定转换
```
> ffplay rtmp://127.0.0.1/live/test110
> ffplay rtsp://127.0.0.1:5544/live/test110
> ffplay http://127.0.0.1:8080/live/test110.flv
> ffplay http://127.0.0.1:8080/hls/test110/playlist.m3u8
> ffplay http://127.0.0.1:8080/hls/test110/record.m3u8
> ffplay http://127.0.0.1:8080/hls/test110.m3u8
> ffplay http://127.0.0.1:8080/live/test110.ts
```
## 编码协议的转换
|编码类型 |rtmp |rtsp |hls |flv| mpegts|
|---|---|---|---|---|---|
|aac | ✔| ✔| ✔| ✔| ✔|
|avc/h264| ✔| ✔| ✔| ✔| ✔|
|hevc/h265| ✔| ✔| ✔| ✔| ✔|
## 录制文件的类型
|录制类型| hls| flv| mpegts|
|---|---|---|---|
|pub| rtmp| ✔| ✔| ✔|
|pub| rtsp| ✔| ✔| ✔|