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 cb2cf030ae [opt] rtmp: 加大server session的默认超时时长,由10秒修改为120秒 8 months ago
.github/workflows [chore] update go 1.16 to 1.18 for using go fuzz 1 year ago
app refactor dispatch securit only kick without ip blacklist 8 months ago
conf 1 [feat] dispatch: 新增配置max_sub_session_per_ip,可控制单个ip最大拉流session数量 2 [feat] dispatch: 新增配置max_sub_duration_sec,可控制单个拉流session的最大时长 3 [feat] dispatch: 新增读取配置文件功能 8 months ago
pkg [opt] rtmp: 加大server session的默认超时时长,由10秒修改为120秒 8 months ago
script clean.sh 8 months ago
.gitignore [chore] 提交git时忽略._*.go文件,make clean时清除这些文件 9 months ago
CHANGELOG.md fmt 10 months ago
CONTRIBUTING.md Create CONTRIBUTING.md 4 years ago
Dockerfile patch 3 years ago
LICENSE 1st 6 years ago
Makefile chore: makefile build flag 11 months ago
README.md doc 10 months ago
go.mod [chore] update the Go version of the whole lal package from 1.16 to 1.18 for using go fuzz 1 year ago
go.sum [chore] update the Go version of the whole lal package from 1.16 to 1.18 for using go fuzz 1 year ago

README.md

LAL

Platform Release CI goreportcard wechat qqgroup

中文文档

LAL is an audio/video live streaming broadcast server written in Go. It's sort of like nginx-rtmp-module, but easier to use and with more features, e.g RTMP, RTSP(RTP/RTCP), HLS, HTTP[S]/WebSocket[s]-FLV/TS, GB28181, H264/H265/AAC/G711/OPUS, relay, cluster, record, HTTP API/Notify/WebUI, GOP cache.

Install

There are 3 ways of installing lal:

1. Building from source

First, make sure that Go version >= 1.18

For Linux/macOS user:

$git clone https://github.com/q191201771/lal.git
$cd lal
$make build

Then all binaries go into the ./bin/ directory. That's it.

For an experienced gopher(and Windows user), the only thing you should be concern is that the main function is under the ./app/lalserver directory. So you can also:

$git clone https://github.com/q191201771/lal.git
$cd lal/app/lalserver
$go build

Or using whatever IDEs you'd like.

So far, the only direct and indirect dependency of lal is naza(A basic Go utility library) which is also written by myself. This leads to less dependency or version manager issues.

2. Prebuilt binaries

Prebuilt binaries for Linux, macOS(Darwin), Windows are available in the lal github releases page. Naturally, using the latest release binary is the recommended way. The naming format is lal_<version>_<platform>.zip, e.g. lal_v0.20.0_linux.zip

LAL could also be built from the source wherever the Go compiler toolchain can run, e.g. for other architectures including arm32 and mipsle which have been tested by the community.

3. Docker

option 1, using prebuilt image at docker hub, so just run:

$docker run -it -p 1935:1935 -p 8080:8080 -p 4433:4433 -p 5544:5544 -p 8083:8083 -p 8084:8084 -p 30000-30100:30000-30100/udp q191201771/lal /lal/bin/lalserver -c /lal/conf/lalserver.conf.json

option 2, build from local source with Dockerfile, and run:

$git clone https://github.com/q191201771/lal.git
$cd lal
$docker build -t lal .
$docker run -it -p 1935:1935 -p 8080:8080 -p 4433:4433 -p 5544:5544 -p 8083:8083 -p 8084:8084 -p 30000-30100:30000-30100/udp lal /lal/bin/lalserver -c /lal/conf/lalserver.conf.json

Using

Running lalserver:

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

Using whatever clients you are familiar with to interact with lalserver.

For instance, publish rtmp stream to lalserver via ffmpeg:

$ffmpeg -re -i demo.flv -c:a copy -c:v copy -f flv rtmp://127.0.0.1:1935/live/test110

Play multi protocol stream from lalserver via ffplay:

$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

More than a server, act as package and client

Besides a live stream broadcast server which named lalserver precisely, project lal even provides many other applications, e.g. push/pull/remux stream clients, bench tools, examples. Each subdirectory under the ./app/demo directory represents a tiny demo.

Our goals are not only a production server but also a simple package with a well-defined, user-facing API, so that users can build their own applications on it.

LAL stands for Live And Live if you may wonder.

Contact

Bugs, questions, suggestions, anything related or not, feel free to contact me with lal github issues.

License

MIT, see License.

this note updated by yoko, 202404