昨天用nginx搭建了一套rtmp的服务器,心血来潮找到了用go语言写的livego,官方提供的使用手册不全,自己看源码琢磨出来的使用方式,先放一波官方介绍!
简单高效的直播服务器:
直接下载编译好的二进制文件后,在命令行中执行。
执行docker run -p 1935:1935 -p 7001:7001 -p 7002:7002 -p 8090:8090 -d gwuhaolin/livego
启动
git clone https://github.com/gwuhaolin/livego.git
go build
livego
二进制文件启动 livego 服务;http://localhost:8090/control/get?room=movie
获取一个房间的 channelkey(channelkey用于推流,movie用于播放)。movie存在即获取,不存在就生成并返回RTMP
协议推送视频流到地址 rtmp://localhost:1935/{appname}/{channelkey}
(appname默认是live
), 例如: 使用 ffmpeg -re -i demo.flv -c copy -f flv rtmp://localhost:1935/{appname}/{channelkey}
推流(下载demo flv);RTMP
:rtmp://localhost:1935/{appname}/movie
FLV
:http://127.0.0.1:7001/{appname}/movie.flv
HLS
:http://127.0.0.1:7002/{appname}/movie.m3u8
http://127.0.0.1:8090/stat/livestat
http://127.0.0.1:8090/control/pull?&oper=start&app=live&name=123456&url=rtmp://192.168.16.136/live/123456
,oper可以传入两种状态,start
跟stop
http://127.0.0.1:8090/control/push?&oper=start&app=live&name=123456&url=rtmp://192.168.16.136/live/123456
,功能跟pull相似,甚至于可以说一模一样http://127.0.0.1:8090/control/reset?room=ROOM_NAME
具体没试过,不过推测应该是重新生成channelkey
http://127.0.0.1:8090/control/delete?room=ROOM_NAME
删除房间所有配置项:
./livego -h
Usage of ./livego:
--api_addr string HTTP管理访问监听地址 (default ":8090")
--config_file string 配置文件路径 (默认 "livego.yaml")
--flv_dir string 输出的 flv 文件路径 flvDir/APP/KEY_TIME.flv (默认 "tmp")
--gop_num int gop 数量 (default 1)
--hls_addr string HLS 服务监听地址 (默认 ":7002")
--hls_keep_after_end Maintains the HLS after the stream ends
--httpflv_addr string HTTP-FLV server listen address (默认 ":7001")
--level string 日志等级 (默认 "info")
--read_timeout int 读超时时间 (默认 10)
--rtmp_addr string RTMP 服务监听地址 (默认 ":1935")
--write_timeout int 写超时时间 (默认 10)
其实livego是支出两种存储方式,一种是localCache,另一种是redis,想启用redis就需要在配置文件中增加两项配置,还有一个就是jwt鉴权,这两个功能都是需要阅读源码才能知道,略微有些坑
# # Logger level
# # # 支持的级别 panic,fatal,error,warn,info,debug,trace
# level: info
# # FLV Options
# flv_dir: "./tmp"
# httpflv_addr: ":7001"
# # RTMP Options
# rtmp_addr: ":1935"
# read_timeout: 10
# write_timeout: 10
# # HLS Options
# hls_addr: ":7002"
# #想启用jwt需要打开以下三项注释
# # # algorithm: 仅支持 以下三种算法 默认HS256算法
# # # # HMAC签名方法: HS256 HS384 HS512
# # # # RSA签名方法: RS256,RS384,RS512
# # # # ECDSA签名方法: ES256,ES384,ES512
#jwt:
#- secret: xxx
# algorithm: xxx
# # API Options
# api_addr: ":8090"
# #想启用redis需要打开以下两项注释,不打开默认启用本地存储
#redis_addr: 127.0.0.1:6379
#redis_pwd:
server:
- appname: live
live: true
hls: true