Golang开源支持RTMPRTSPHLSFLV等协议的流媒体服务器有哪些?

2026-05-22 23:111阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计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服务启动后,就可以进行推拉流了。

lal github地址: github.com/q191201771/lal

三. lalserver 简介

lalserver是流媒体转发服务。类似于nginx-rtmp-module服务,简单来说,这类服务的核心功能是将推流客户端发送过来的音视频数据转发给对应的拉流客户端。
但lalserver支持更多的协议,提供更丰富的功能。

1 lalserver 特性
  • 全平台
  • 高性能
  • 多种直播流封装协议
  • 多种编码格式
  • 多种格式录制
  • HTTPS
  • WebSocket/WebSockets
  • HLS
  • RTSP。支持over TCP(interleaved模式)。支持basic/digest auth验证。支持GET_PARAMETER
  • RTMP
  • HTTP API接口
  • HTTP Notify事件回调
  • 支持多种方式鉴权
  • 分布式集群
  • 静态pull回源
  • 静态push转推
  • CORS跨域
  • HTTP文件服务器
  • 监听端口复用
  • 秒开播放
2 lalserver 支持的协议

封装协议间转换的支持情况

转封装类型 sub rtmp sub github.com/q191201771/lal

四. lalserver 各协议推拉流url地址列表 协议 url地址 协议标准端口 RTMP推流 rtmp://127.0.0.1:1935/live/test110 1935 RTSP推流 rtsp://localhost:5544/live/test110 554 . . . RTMP拉流 rtmp://127.0.0.1:1935/live/test110 1935 HTTP-FLV拉流 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

六. Demo 简介

lal项目中,除了/app/lalserver这个比较核心的服务之外,在/app/demo目录下还额外提供了一些小应用,功能简介:

demo 说明 pushrtmp RTMP推流客户端;压力测试工具 pullrtmp RTMP拉流客户端;压力测试工具 pullrtmp2pushrtmp 从远端服务器拉取RTMP流,并使用RTMP转推出去,支持1对n转推 pullrtmp2pushrtsp 从远端服务器拉取RTMP流,并使用RTSP转推出去 pullrtmp2hls 从远端服务器拉取RTMP流,存储为本地m3u8+ts文件 pullgithub.com/q191201771/lal
  • lal官方文档: pengrl.com/lal
  • 欢迎任何技术和非技术的交流。

    本文共计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服务启动后,就可以进行推拉流了。

    lal github地址: github.com/q191201771/lal

    三. lalserver 简介

    lalserver是流媒体转发服务。类似于nginx-rtmp-module服务,简单来说,这类服务的核心功能是将推流客户端发送过来的音视频数据转发给对应的拉流客户端。
    但lalserver支持更多的协议,提供更丰富的功能。

    1 lalserver 特性
    • 全平台
    • 高性能
    • 多种直播流封装协议
    • 多种编码格式
    • 多种格式录制
    • HTTPS
    • WebSocket/WebSockets
    • HLS
    • RTSP。支持over TCP(interleaved模式)。支持basic/digest auth验证。支持GET_PARAMETER
    • RTMP
    • HTTP API接口
    • HTTP Notify事件回调
    • 支持多种方式鉴权
    • 分布式集群
    • 静态pull回源
    • 静态push转推
    • CORS跨域
    • HTTP文件服务器
    • 监听端口复用
    • 秒开播放
    2 lalserver 支持的协议

    封装协议间转换的支持情况

    转封装类型 sub rtmp sub github.com/q191201771/lal

    四. lalserver 各协议推拉流url地址列表 协议 url地址 协议标准端口 RTMP推流 rtmp://127.0.0.1:1935/live/test110 1935 RTSP推流 rtsp://localhost:5544/live/test110 554 . . . RTMP拉流 rtmp://127.0.0.1:1935/live/test110 1935 HTTP-FLV拉流 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

    六. Demo 简介

    lal项目中,除了/app/lalserver这个比较核心的服务之外,在/app/demo目录下还额外提供了一些小应用,功能简介:

    demo 说明 pushrtmp RTMP推流客户端;压力测试工具 pullrtmp RTMP拉流客户端;压力测试工具 pullrtmp2pushrtmp 从远端服务器拉取RTMP流,并使用RTMP转推出去,支持1对n转推 pullrtmp2pushrtsp 从远端服务器拉取RTMP流,并使用RTSP转推出去 pullrtmp2hls 从远端服务器拉取RTMP流,存储为本地m3u8+ts文件 pullgithub.com/q191201771/lal
  • lal官方文档: pengrl.com/lal
  • 欢迎任何技术和非技术的交流。