前置nginx、ffmpeg、ffplay准备工作,推拉流测试,nginx反向代理、负载均衡,推流测试实操出现的小问题和解决

一. 推拉流测试的前置nginx、ffmpeg、ffplay准备工作

查看端口状态

启动nginx后:即./nginx后,先ps -ef|grep nginx 来判断是否启动成功:nginx在运行中,有进程号

在使用云服务的地址,用浏览器去访问时,如果出现错误,可以去查看80端口是否开启

firewall-cmd --query-port=80/tcp

firewall-cmd --zone=public --add-port=80/tcp --permanent

重启下 firewall -cmd --reload

查看监听的1935端口是否打开,看到这个表示已经打开

找到nginx和ffmpeg的位置

检查ffmpeg:

找到ffplay的位置

启动ffplay开始拉流,有数据过来就会播放:

/usr/local/ffmpeg/bin/ffplay rtmp://localhost/live/room

启动ffmpeg开始推数据到nginx

/usr/local/ffmpeg/bin/ffmpeg -re -i "/root/文档/test.mp4"

-c copy -f flv rtmp://localhost/live/room

推流失败,搜索可能的解决办法

  • 关闭防火墙:先查看防火墙状态firewall-cmd --state,如果running就关闭:systemctl mask firewalld,永久关闭:systemctl mask firewalld
  • 访问nginx服务器,如果报错403 Forbidden,则编辑nginx配置文件,配置user root;然后执行nginx -s reload

查看防火墙状态

二. 推拉流知识点

1. nginx反向代理、负载均衡

(1)先在后台打开要运行的项目,可以查看当客户端要访问服务器项目时的日志;

(2)配好nginx之后,在配置文件中修改:

  • 监听80端口,那么nginx就会来接浏览器http协议的请求;
  • 在location中配置反向代理服务器proxy_pass用来代理kuangstudy的运行项目;
  • 再在上面配置upstream kuangstudy的负载均衡,分别指向已经打开了两个服务器,不同监听端口号,并附上负载均衡的权重

(3)在nginx的命令行中重载配置文件,即nginx -s reload,保存好

(4)在浏览器中不断访问localhost的80端口,查看到后台运行的访问日志,轮询访问会被负载均衡按照权重来分别导入到不同的服务器上

2. RTMP推拉流测试简单示例

(1) ffmpeg本地视频推流测试

ffmpeg -re -i .\推流文件.mp4 -vcodec libx264 -acodec aac -f flv  

rtmp://127.0.0.1:1935/live/test

启动ffmpeg开始推数据到nginx

/usr/local/ffmpeg/bin/ffmpeg(启动ffmpeg) -re -i "/root/文档/test.mp4"(被推视频的存放位置) -c copy -f flv  rtmp://localhost/live/room(推流去往的具体位置

(2) 使用ffplay拉流测试

ffplay rtmp://127.0.0.1:1935/live/test

启动ffplay开始拉流,有数据过来就会播放

/usr/local/ffmpeg/bin/ffplay(启动ffplay) rtmp://localhost/live/room(之前推流到这儿后,nginx从这里开始拉流)

(3) 使用VLC拉流

打开VLC,媒体 -> 打开网络串流 -> 网络

rtmp://127.0.0.1:1935/live/test

三. 本地推拉流测试实操&不同问题和解决

ffmpeg -re -i test.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/home

重新配置nginx后打开,显示端口被占用

查看是因为之前在配置conf文件的时候,80端口被占用

根据网上搜索到的建议,对http监听协议修改成8080

重新配置并链接配置文件nginx.conf

再次打开就没问题了

再次做推流测试:

出现以下问题:

搜索解决方法一:

修改:

仍然有问题:

搜索解决方法二:

修改:

出现新的报错:

解决不了问题可能是参数设置存在问题

换个编码采样方式,添加参数-ar 44100:

如果取消循环播放,可以一次推流成功:

关于broken pipe的猜想

原因可能是:这个错误是底层socket传递给ffmpeg的,它是一个管道错误,意思是在管道两端,当一端不停的写,另一边却断开接收。那么就会出现broken pipe

关于Past duration 0.668327 too large:

是由于帧率的原因,由高帧率转低帧率就会报错

-r:定义输入图像序列的帧率,原视频是29.97fps,所以翻了三倍,就是89.91

我的是30 翻个3倍写90

之后就没出现黄色的Past duration ×× too large这样的报错

关于循环播放坚持不了太久就管道坏了,延长时间的命令:

ffmpeg -re -stream_loop -1 -i "/root/code/test/video/123test.mp4" -ar 44100 -s 420*360 -r 50 -f avi rtmp://10.200.102.201:1935/live

(s:分辨率调整一下;r:帧速调整大一些)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值