罗湖网站建设的公司哪家好网站备案收费吗
欢迎访问我的GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
本篇概览
- 今天的实战是流传输过程中的常见功能:回源
 - 如下图,lal(源站)和lal(拉流节点)代表两台电脑,上面都部署了lal
 - VLC在播放时去拉流节点拉流,但实际上FFmpeg将流推到了源站,这就要求拉流节点能和源站建立联系,从源站获取到媒体流返回给VLC

 - 至于为什么VLC不直接去源站拉流呢?原因是多方面的:
 
- 网络不通,可能VLC在公网,而源站只能在某个内网
 - 带宽成本问题,可能源站出口带宽成本比拉流节点出口带宽成本高
 - 距离问题,有可能FFmpeg和源站都在北方,VLC在南方,走公网去北方拉流距离大所以延时大,如果拉流节点在南方,那么VLC去拉流节点距离就会变短(拉流节点和源站是内网通信)
 
- 将FFmpeg改为主播,VLC改为观众,是不是有直播内味了…
 - 捋清楚了上述逻辑,接下来可以动手操作了,从上图可见,今天要部署两个lal,我这边把拉流节点部署在本机MacBook上,源站部署在阿里云上(阿里云专家的福利,一年ECS免费用)
 - 最终的部署情况如下图

 
源站部署
- 登录阿里云机器
 - 将编译好的lalserver以及lalserver.conf.json上传到阿里云服务器,目录结构如下图
 
~# tree lal
lal
├── bin
│   └── lalserver
├── conf
│   └── lalserver.conf.json
 
- 注意,我这边MacBook是M1芯片,编译出来的lalserver无法运行在X86架构的电脑上,您也要注意类似问题
 - 启动
 
./bin/lalserver -c conf/lalserver.conf.json
 
-  
如果您用的也是云服务器,注意放开1935和8080端口
 -  
推流到源站
 
./ffmpeg \
-re \
-stream_loop -1 \
-i ../videos/sample.mp4 \
-c copy \
-f flv \
'rtmp://源站IP:1935/live/test110'
 
- 此时直接从源站拉流是没有问题的,可以用VLC或者ffplay试试
 
rtmp://源站IP:1935/live/test110
 
拉流节点配置
- 接下来要部署拉流节点了,这里要修改配置,使得它在收到拉流请求的时候,知道去哪里拉流
 - 打开配置文件conf/lalserver.conf.json,找到配置static_relay_pull,其原本内容如下
 
  "static_relay_pull": {"enable": false,"addr": ""},
 
- 修改后的内容如下,注意端口就是1935
 
  "static_relay_pull": {"enable": true,"addr": "源站IP:1935"},
 
- 启动
 
./bin/lalserver -c conf/lalserver.conf.json
 
- 用VLC验证,播放地址如下,均可以正常播放,要注意的是hls的无法最先播放,这个应该和拉流的内部处理有关,现在还不熟悉lal的源码,只能留待将来再研究了
 
rtmp://127.0.0.1:1935/live/test110
http://127.0.0.1:8080/live/test110.flv
http://127.0.0.1:8080/hls/test110.m3u8
 
- 播放效果如下,与直接从源站拉流一样,当然了,些许延时还是有的,看实际网络情况

 - 另外还要注意的是:如果VLCl拉的流在拉流节点本来就存在(FFmpeg推到了拉流节点),那么拉流节点就直接返回流给VLC了,不会去源站拉
 - 至此,回源操作就完成了,如果您正好在研究推拉流级联,希望本文能给您一些参考
 
你不孤单,欣宸原创一路相伴
- Java系列
 - Spring系列
 - Docker系列
 - kubernetes系列
 - 数据库+中间件系列
 - DevOps系列
 
