- 接收rtmp推流,将数据封装成
flv Tag
格式 - 将
flv Tag
设为rtp的载荷,通过rtp协议以组播/单播
方式发送到边缘节点,超过载荷长度则分片发送 - 缓存一定量的rtp包再云端节点,为边缘节点提供quic重传服务
由于依赖了net/rtp
,所以需编译GoRtp库
- 下载源码
git clone https://github.com/NOMADxzy/Rtmp_Rtp_Flv.git
cd server
&&go build ./
监听rtmp1935
端口./cloudserver
2. 启动边缘节点
接收云端节点发过来的rtp流,并提供httpflv服务:./edgeserver -udp_addr :5222
参考命令:ffmpeg -re -i caton.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/movie
4. 启动flv.js播放器
输入播放地址播放:http://127.0.0.1:7001/live/movie.flv
config.yaml
rtp_cache_size: 5000 #云端节点缓存的rtp数量
quic_addr: :4242 #quic服务的监听地址
client_addr_list: #边缘节点的udp及端口号,向这些地址发送数据
- 127.0.0.1:5222
- 127.0.0.1:5224
enable_record: false
rtp_port: 5220
rtmp_addr: :1935
api_addr: :8090
defines.go
:基本配置项文件,包括flv格式用到的常量和rtp缓存、监听地址等参数conn.go
:quic 流对象,用于重传丢失的 rtp 数据包flv.go
:处理 flv 数据,包括构造 flvTag 以及读写 flv 数据listQueue.go
:缓存 rtp 数据包的队列,通过arraylist实现【当前使用】,对外接口和 mapQueue 一致mapQueue.go
:缓存 rtp 数据包的队列,通过hashmap实现,对外接口和 listQueue 一致utils.go
:建立udp连接、quic连接等工具方法cloundserver.go
:主要代码入口程序
- 冗余代码块
- 日志管理
- server 文件夹整理
- 一个直播服务器,参考了一些该项目的代码,在其内部添加了一些接口
- 一个流行的
Rtp\Rtcp
的协议栈,使用了该包下Rtp的构建和处理方法
- 一个go实现的易上手的QUIC技术栈