Golang开源支持RTMPRTSPHLSFLV等协议的流媒体服务器有哪些?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2846个文字,预计阅读时间需要12分钟。
一. lal 简介lal 是一个开源直播流媒体网络传输项目,主要由三部分组成:- lalserver:流媒体转播服务端- 类似于 nginx-rtmp-module 等服务,但支持更多协议,提供更丰富的功能。
一. lal 简介lal是开源直播流媒体网络传输项目,主要由三部分组成:
- lalserver:流媒体转发服务器。类似于
nginx-rtmp-module等服务,但支持更多的协议,提供更丰富的功能。 - demo:一些小应用,比如推、拉流客户端,压测工具,流分析工具,调度示例程序等。类似于ffmpeg、ffprobe等应用。
- pkg:流媒体协议库。类似于ffmpeg的libavformat等库。
lal github地址: github.com/q191201771/lal
以下是lal源码架构图,从中你可以大致了解lal是如何划分功能层次的:
二. lalserver 快速开始 1 编译方式1,从源码自行编译
$git clone github.com/q191201771/lal.git
$cd lal
$export GO111MODULE=on && export GOPROXY=goproxy.cn,goproxy.io,direct
$make
或者使用GoLand等IDE编译。
如果没有安装Go编译器,可参考《CentOS或macOS安装GoLang》,windows操作系统可自行上网搜索教程。
方式2,直接下载编译好的二进制可执行文件
点我打开《github lal最新release版本页面》,可下载linux/macos/windows平台编译好的lal二进制可执行文件(zip压缩包形式)。
方式3,使用docker
docker又分为两种方式,一种是直接从Docker Hub下载已经编译好的镜像并运行:
$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
另一种是根据本地代码和Dockerfile文件生成镜像并运行:
$git clone 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
2 运行
$./bin/lalserver -c conf/lalserver.conf.json
3 体验功能
lalserver服务启动后,就可以进行推拉流了。
三. lalserver 简介lal github地址: github.com/q191201771/lal
lalserver是流媒体转发服务。类似于nginx-rtmp-module服务,简单来说,这类服务的核心功能是将推流客户端发送过来的音视频数据转发给对应的拉流客户端。
但lalserver支持更多的协议,提供更丰富的功能。
- 全平台
- 高性能
- 多种直播流封装协议
- 多种编码格式
- 多种格式录制
- HTTPS
- WebSocket/WebSockets
- HLS
- RTSP。支持over TCP(interleaved模式)。支持basic/digest auth验证。支持
GET_PARAMETER - RTMP
- HTTP API接口
- HTTP Notify事件回调
- 支持多种方式鉴权
- 分布式集群
- 静态pull回源
- 静态push转推
- CORS跨域
- HTTP文件服务器
- 监听端口复用
- 秒开播放
封装协议间转换的支持情况
127.0.0.1:8080/live/test110.flv 127.0.0.1:4433/live/test110.flv (127.0.0.1:8080/live/test110.flv wss://127.0.0.1:4433/live/test110.flv (websockets地址) 80
443 HLS(m3u8+ts)拉流
127.0.0.1:8080/hls/test110.m3u8 (直播地址格式1) 127.0.0.1:8080/hls/test110/playlist.m3u8 (直播地址格式2) 127.0.0.1:8080/hls/test110/record.m3u8 (全量录播地址)
80
RTSP拉流
rtsp://localhost:5544/live/test110
554
HTTP-TS拉流
127.0.0.1:8080/live/test110.ts (127.0.0.1:4433/live/test110.ts (127.0.0.1:8080/live/test110.ts (websocket地址) wss://127.0.0.1:4433/live/test110.ts (websockets地址) 80
443
80
443
关于端口
如果使用协议标准端口,则地址中的端口可以省略,比如127.0.0.1:80/live/test110.flv变成127.0.0.1/live/test110.flv
如果你不熟悉推拉流客户端该如何配合使用,可参考 常见推拉流客户端信息汇总
五. lalserver 配置文件说明{
"# doc of config": "pengrl.com/lal/#/ConfigBrief", //. 配置文件对应的文档说明链接,在程序中没实际用途
"conf_version": "0.2.8", //. 配置文件版本号,业务方不应该手动修改,程序中会检查该版本
// 号是否与代码中声明的一致
"rtmp": {
"enable": true, //. 是否开启rtmp服务的监听
// 注意,配置文件中控制各协议类型的enable开关都应该按需打开,避免造成不必要的协议转换的开销
"addr": ":1935", //. RTMP服务监听的端口,客户端向lalserver推拉流都是这个地址
"gop_num": 0, //. RTMP拉流的GOP缓存数量,加速流打开时间,但是可能增加延时
//. 如果为0,则不使用缓存发送
"merge_write_size": 0, //. 将小包数据合并进行发送,单位字节,提高服务器性能,但是可能造成卡顿
// 如果为0,则不合并发送
"add_dummy_audio_enable": false, //. 是否开启动态检测添加静音AAC数据的功能
// 如果开启,rtmp pub推流时,如果超过`add_dummy_audio_wait_audio_ms`时间依然没有
// 收到音频数据,则会自动为这路流叠加AAC的数据
"add_dummy_audio_wait_audio_ms": 150 //. 单位毫秒,具体见`add_dummy_audio_enable`
},
"default_127.0.0.1:10101/on_server_start", //. 各事件HTTP Notify事件回调地址
"on_update": "127.0.0.1:10101/on_update",
"on_pub_start": "127.0.0.1:10101/on_pub_start",
"on_pub_stop": "127.0.0.1:10101/on_pub_stop",
"on_sub_start": "127.0.0.1:10101/on_sub_start",
"on_sub_stop": "127.0.0.1:10101/on_sub_stop",
"on_rtmp_connect": "127.0.0.1:10101/on_rtmp_connect"
},
"simple_auth": { // 鉴权文档见: pengrl.com/lal/#/auth
"key": "q191201771", // 私有key,计算md5鉴权参数时使用
"dangerous_lal_secret": "pengrl", // 后门鉴权参数,所有的流可通过该参数值鉴权
"pub_rtmp_enable": false, // rtmp推流是否开启鉴权,true为开启鉴权,false为不开启鉴权
"sub_rtmp_enable": false, // rtmp拉流是否开启鉴权
"sub_github.com/q191201771/lal
lal项目中,除了/app/lalserver这个比较核心的服务之外,在/app/demo目录下还额外提供了一些小应用,功能简介:
欢迎任何技术和非技术的交流。
本文共计2846个文字,预计阅读时间需要12分钟。
一. lal 简介lal 是一个开源直播流媒体网络传输项目,主要由三部分组成:- lalserver:流媒体转播服务端- 类似于 nginx-rtmp-module 等服务,但支持更多协议,提供更丰富的功能。
一. lal 简介lal是开源直播流媒体网络传输项目,主要由三部分组成:
- lalserver:流媒体转发服务器。类似于
nginx-rtmp-module等服务,但支持更多的协议,提供更丰富的功能。 - demo:一些小应用,比如推、拉流客户端,压测工具,流分析工具,调度示例程序等。类似于ffmpeg、ffprobe等应用。
- pkg:流媒体协议库。类似于ffmpeg的libavformat等库。
lal github地址: github.com/q191201771/lal
以下是lal源码架构图,从中你可以大致了解lal是如何划分功能层次的:
二. lalserver 快速开始 1 编译方式1,从源码自行编译
$git clone github.com/q191201771/lal.git
$cd lal
$export GO111MODULE=on && export GOPROXY=goproxy.cn,goproxy.io,direct
$make
或者使用GoLand等IDE编译。
如果没有安装Go编译器,可参考《CentOS或macOS安装GoLang》,windows操作系统可自行上网搜索教程。
方式2,直接下载编译好的二进制可执行文件
点我打开《github lal最新release版本页面》,可下载linux/macos/windows平台编译好的lal二进制可执行文件(zip压缩包形式)。
方式3,使用docker
docker又分为两种方式,一种是直接从Docker Hub下载已经编译好的镜像并运行:
$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
另一种是根据本地代码和Dockerfile文件生成镜像并运行:
$git clone 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
2 运行
$./bin/lalserver -c conf/lalserver.conf.json
3 体验功能
lalserver服务启动后,就可以进行推拉流了。
三. lalserver 简介lal github地址: github.com/q191201771/lal
lalserver是流媒体转发服务。类似于nginx-rtmp-module服务,简单来说,这类服务的核心功能是将推流客户端发送过来的音视频数据转发给对应的拉流客户端。
但lalserver支持更多的协议,提供更丰富的功能。
- 全平台
- 高性能
- 多种直播流封装协议
- 多种编码格式
- 多种格式录制
- HTTPS
- WebSocket/WebSockets
- HLS
- RTSP。支持over TCP(interleaved模式)。支持basic/digest auth验证。支持
GET_PARAMETER - RTMP
- HTTP API接口
- HTTP Notify事件回调
- 支持多种方式鉴权
- 分布式集群
- 静态pull回源
- 静态push转推
- CORS跨域
- HTTP文件服务器
- 监听端口复用
- 秒开播放
封装协议间转换的支持情况
127.0.0.1:8080/live/test110.flv 127.0.0.1:4433/live/test110.flv (127.0.0.1:8080/live/test110.flv wss://127.0.0.1:4433/live/test110.flv (websockets地址) 80
443 HLS(m3u8+ts)拉流
127.0.0.1:8080/hls/test110.m3u8 (直播地址格式1) 127.0.0.1:8080/hls/test110/playlist.m3u8 (直播地址格式2) 127.0.0.1:8080/hls/test110/record.m3u8 (全量录播地址)
80
RTSP拉流
rtsp://localhost:5544/live/test110
554
HTTP-TS拉流
127.0.0.1:8080/live/test110.ts (127.0.0.1:4433/live/test110.ts (127.0.0.1:8080/live/test110.ts (websocket地址) wss://127.0.0.1:4433/live/test110.ts (websockets地址) 80
443
80
443
关于端口
如果使用协议标准端口,则地址中的端口可以省略,比如127.0.0.1:80/live/test110.flv变成127.0.0.1/live/test110.flv
如果你不熟悉推拉流客户端该如何配合使用,可参考 常见推拉流客户端信息汇总
五. lalserver 配置文件说明{
"# doc of config": "pengrl.com/lal/#/ConfigBrief", //. 配置文件对应的文档说明链接,在程序中没实际用途
"conf_version": "0.2.8", //. 配置文件版本号,业务方不应该手动修改,程序中会检查该版本
// 号是否与代码中声明的一致
"rtmp": {
"enable": true, //. 是否开启rtmp服务的监听
// 注意,配置文件中控制各协议类型的enable开关都应该按需打开,避免造成不必要的协议转换的开销
"addr": ":1935", //. RTMP服务监听的端口,客户端向lalserver推拉流都是这个地址
"gop_num": 0, //. RTMP拉流的GOP缓存数量,加速流打开时间,但是可能增加延时
//. 如果为0,则不使用缓存发送
"merge_write_size": 0, //. 将小包数据合并进行发送,单位字节,提高服务器性能,但是可能造成卡顿
// 如果为0,则不合并发送
"add_dummy_audio_enable": false, //. 是否开启动态检测添加静音AAC数据的功能
// 如果开启,rtmp pub推流时,如果超过`add_dummy_audio_wait_audio_ms`时间依然没有
// 收到音频数据,则会自动为这路流叠加AAC的数据
"add_dummy_audio_wait_audio_ms": 150 //. 单位毫秒,具体见`add_dummy_audio_enable`
},
"default_127.0.0.1:10101/on_server_start", //. 各事件HTTP Notify事件回调地址
"on_update": "127.0.0.1:10101/on_update",
"on_pub_start": "127.0.0.1:10101/on_pub_start",
"on_pub_stop": "127.0.0.1:10101/on_pub_stop",
"on_sub_start": "127.0.0.1:10101/on_sub_start",
"on_sub_stop": "127.0.0.1:10101/on_sub_stop",
"on_rtmp_connect": "127.0.0.1:10101/on_rtmp_connect"
},
"simple_auth": { // 鉴权文档见: pengrl.com/lal/#/auth
"key": "q191201771", // 私有key,计算md5鉴权参数时使用
"dangerous_lal_secret": "pengrl", // 后门鉴权参数,所有的流可通过该参数值鉴权
"pub_rtmp_enable": false, // rtmp推流是否开启鉴权,true为开启鉴权,false为不开启鉴权
"sub_rtmp_enable": false, // rtmp拉流是否开启鉴权
"sub_github.com/q191201771/lal
lal项目中,除了/app/lalserver这个比较核心的服务之外,在/app/demo目录下还额外提供了一些小应用,功能简介:
欢迎任何技术和非技术的交流。

