likes
comments
collection
share

Golang流媒体实战之三:转推和录制

作者站长头像
站长
· 阅读数 16

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):github.com/zq2599/blog…

本篇概览

  • 本文是《Golang流媒体实战》系列的第三篇,咱们不忙着写代码,继续熟悉开源流媒体服务器lal,今天练习的是流传输过程中两个重要功能:转推和录制

  • 关于转推功能,可以从下图了解,FFmpeg推流到转推节点后,转推节点会将该路流推送到录制和源站两个节点,录制节点负责录制flv文件,源站作为媒体源,接受外部拉流(源站->拉流->VLC这个链路已在前文《Golang流媒体实战之二:回源》详细说明) Golang流媒体实战之三:转推和录制

  • 如果把FFmpeg换成主播,VLC换成观众,是不是有直播内味了...

  • 今天要实战的上图的绿色部分,至于蓝色部分已在前文《Golang流媒体实战之二:回源》有详细说明,就不赘述了

  • 下图是接下来要实战的部署情况,省略掉拉流节点后,只要准备三台电脑即可完成本次实战:MacBook、阿里云、Linux Golang流媒体实战之三:转推和录制

部署录制节点

  • 首先启动的是录制节点,这个部署在阿里云服务器上
  • 打开配置文件lalserver.conf.json,找到record节点
  "record": {
    "enable_flv": false,
    "flv_out_path": "./lal_record/flv/",
    "enable_mpegts": false,
    "mpegts_out_path": "./lal_record/mpegts"
  },
  • 本次实战暂定用flv格式录制,于是将enable_flv的值改为true
  "record": {
    "enable_flv": true,
    "flv_out_path": "./lal_record/flv/",
    "enable_mpegts": false,
    "mpegts_out_path": "./lal_record/mpegts"
  },
  • 将修改后的配置存盘,执行以下命令启动
./bin/lalserver -c conf/lalserver.conf.json
  • 录制节点就绪了,接下来是源站

部署源站

  • 这个没什么好说的,在源站电脑上,使用默认配置文件启动lal即可

部署转推节点

  • 通过前面的部署图可知,转推节点要将收到的流转推到录制节点和源站,因此要修改lal的配置文件lalserver.conf.json,找到relay_push节点,原始内容如下
  "relay_push": {
    "enable": false,
    "addr_list":[
    ]
  },
  • 修改relay_push节点,将enable设置为true,再把录制节点和源站的地址都填进去,端口都保持1935(rtmp端口)
  "relay_push": {
    "enable": true,
    "addr_list":[
    	"录制节点ip:1935",
    	"源站节点ip:1935"
    ]
  },
  • 配置完成后,执行以下命令启动转推节点
./bin/lalserver -c conf/lalserver.conf.json
  • 现在三个lal节点都启动了,接下来验证它们能否正常工作

验证:FFmpeg推流到转推节点

  • 推流命令如下,ffmpeg和sample.mp4文件的位置请自行调整
./ffmpeg \
-re \
-stream_loop -1 \
-i ./sample.mp4 \
-c copy \
-f flv \
'rtmp://127.0.0.1:1935/live/test110'
  • 推流成功后,先用VLC直接从源站拉流试试,如下图,能正常播放,证明转推到源站没有问题 Golang流媒体实战之三:转推和录制
  • 然后用ctrl+c结束FFmpeg推流,这样录制节点就会完成录制
  • 登录录制节点,查看lal的文件夹,如下,可见lal_record/flv目录下存放着录制好的flv文件,名为test110-1679800510.flv
:~# tree lal
lal
├── bin
│   └── lalserver
├── conf
│   └── lalserver.conf.json
├── lal_record
│   ├── flv
│   │   └── test110-1679800510.flv
│   └── hls
└── logs
    └── lalserver.log
  • 将上述test110-1679800510.flv文件从录制节点下载到本地,分别用IINA、ffplay、VLC播放,结果IINA和ffplay播放正常,而VLC出现黑屏或者音画不同步,稍微拖动一下进度条后又播放正常了
  • 至此,lal的转推和录制能力就体验完毕了,这还没有写代码,凭借几行配置就已经体会到lal的强大了,接下来的系列文章,咱们会通过编码去畅游流媒体的精彩世界!