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 ed684204be codecov 6 years ago
bele *) 部分rtmp.ServerSession与上层代码的交互 *) 增加amf0_test.go 6 years ago
conf mod: 6 years ago
httpflv *) 新增 rtmp.PubSession 和 rtmp.SubSession *) 新增 rtmp/handshake_test.go *) 新增 rtmp/chunkdivider.go。用于将业务层的message切割成rtmp chunk 6 years ago
log * 优化http-flv gop存储方式。 6 years ago
rtmp *) 新增 rtmp.PubSession 和 rtmp.SubSession *) 新增 rtmp/handshake_test.go *) 新增 rtmp/chunkdivider.go。用于将业务层的message切割成rtmp chunk 6 years ago
util mod: 6 years ago
.gitignore mod: 6 years ago
.travis.yml codecov 6 years ago
LICENSE 1st 6 years ago
README.md *) 新增 rtmp.PubSession 和 rtmp.SubSession *) 新增 rtmp/handshake_test.go *) 新增 rtmp/chunkdivider.go。用于将业务层的message切割成rtmp chunk 6 years ago
config.go mod: 6 years ago
group.go *) 新增 rtmp.PubSession 和 rtmp.SubSession *) 新增 rtmp/handshake_test.go *) 新增 rtmp/chunkdivider.go。用于将业务层的message切割成rtmp chunk 6 years ago
lal.go commit msgs: 6 years ago
main.go commit msgs: 6 years ago
manager.go *) 新增 rtmp.PubSession 和 rtmp.SubSession *) 新增 rtmp/handshake_test.go *) 新增 rtmp/chunkdivider.go。用于将业务层的message切割成rtmp chunk 6 years ago

README.md

lal - Go语言流媒体服务器

编译和运行

$go get -u github.com/q191201771/lal
# cd into lal
$go build

# ./lal -c <配置文件> -l <日志配置文件>,比如:
$./lal -c conf/lal.conf.json -l conf/log.dev.xml

配置文件说明

{
  "sub_idle_timeout": 10, // 往客户端发送数据时的超时时间
  "gop_cache_num": 2,     // gop缓存个数如果设置为0则只缓存seq header不缓存gop数据
  "httpflv": {
    "sub_listen_addr": ":8080" // http-flv拉流地址
  },
  "rtmp": {
    "addr": ":8081" // rtmp服务器监听端口NOTICE rtmp服务器部分正在开发中
  }
  "pull": { // 如果设置则当客户端连接lal拉流而lal上该流不存在时lal会去该配置中的地址回源拉流至本地再转发给客户端
    "type": "httpflv",      // 回源类型,支持"httpflv" 或 "rtmp"
    "addr": "pull.xxx.com", // 回源地址
    "connect_timeout": 2,   // 回源连接超时时间
    "read_timeout": 10,     // 回源读取数据超时时间
    "stop_pull_while_no_sub_timeout": 3000 // 回源的流超过多长时间没有客户端播放,则关闭回源的流
  }
}

TODO 日志配置文件说明

简单压力测试

在一台双核腾讯云主机,以后会做更详细的测试以及性能优化。

~ httpflv pull httpflv sub 平均%CPU 入带宽 出带宽 内存RES
~ 1 300 8.8% 1.5Mb 450Mb 36m
~ 300 300->0 18% 450Mb ->0Mb 1.3g

依赖

  • cihub/seelog
  • stretchr/testify/assert

roadmap

正在实现rtmp服务器部分