Skip to content

Latest commit

 

History

History
107 lines (88 loc) · 5.76 KB

README.md

File metadata and controls

107 lines (88 loc) · 5.76 KB

Wide
Go语言编写的流媒体 库 / 客户端 / 服务器





        


工程目录说明

简单来说,主要源码在app/pkg/两个目录下,后续我再画些源码架构图。

app/                  ......各种main包的源码文件,一个子目录对应一个main包,即对应可生成一个可执行文件
|-- lal/              ......[最重要的] 流媒体服务器
|-- flvfile2es        ......将本地flv文件分离成h264/avc es流文件以及aac es流文件
|-- flvfile2rtmppush  ......将本地flv文件使用rtmp推送出去
|-- modflvfile        ......修改本地flv文件
|-- rtmppull          ......rtmp拉流客户端
bin/                  ......可执行文件输出目录
conf/                 ......配置文件目录
demo/                 ......各种demo类型的main包,一个子目录对应一个demo,即对应可生成一个可执行文件
pkg/                  ......源码包
|-- httpflv/          ......http flv协议
|-- rtmp/             ......rtmp协议
|-- util/             ......帮助类包
    |-- bele/         ......大小端操作
    |-- bininfo/      ......可执行文件版本等信息
    |-- connstat/     ......连接超时信息
    |-- log/          ......日志
    |-- unique/       ......对象唯一ID

编译和运行

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

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

配置文件说明

{
  "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

依赖

目前不依赖任何第三方库

roadmap

正在实现rtmp服务器部分

文档