FFmpeg直播推流
1、本地视频ffmpeg推流rtmp(nginx+rtmp)
1、在Linux Centos7上安装docker(安装过程可以参考CentOS Docker 安装:https://www.runoob.com/docker/centos-docker-install.html)
输入:docker -v
显示如下:
[root@localhost ~]# docker -v Docker version 19.03.8, build afacb8b [root@localhost ~]#
2、安装nginx-rtmp,是ffmpeg要推流的流服务器
docker pull alfg/nginx-rtmp
3、运行rtmp实时流服务器容器
[root@localhost ~]# docker run -it -p 1935:1935 -p 8080:8080 --rm alfg/nginx-rtmp
--rm 表示停止之后就删除该容器,如果要长久使用,则可以使用如下:
[root@localhost ~]# docker run -itd -p 1935:1935 -p 8080:8080 alfg/nginx-rtmp
- -i: 交互式操作
- -t: 终端
- -d: 后台运行
- alfg/nginx-rtmp: alfg/nginx-rtmp 镜像
出现上述界面,表示ffmepg实时流服务器alfg/nginx-rtmp已经搭建好了,下面使用ffmpeg推送本地文件1.mp4到实时流服务器alfg/nginx-rtmp
在ffmpeg.exe所在的文件夹种输入cmd,回车,
之后输入
ffmpeg -threads 2 -re -fflags +genpts -i ./1.mp4 -c:v copy -c:a aac -strict -2 -f flv rtmp://192.168.1.191:1935/hls/hello1
再次在ffmpeg.exe所在的文件夹种输入cmd,回车,输入ffplay拉流
ffplay -fflags nobuffer rtmp://192.168.1.191:1935/hls/hello1 # rtmp播放,也可以配置h5ss 播放
显示界面如下:
使用vlc拉流,打开网络串流,输入:
rtmp://192.168.1.191:1935/hls/hello1
2、在线实时ffmpeg推流rtmp(nginx+rtmp)
ffmpeg摄像头实时推送,在ffmpeg.exe所在的文件夹种输入cmd,回车,输入如下,惊醒实时推流
ffmpeg -rtbufsize 5M -f dshow -i video="USB Camera" -s 640x360 -vcodec libx264 -tune zerolatency -preset ultrafast -b:v 1000k -g 5 -ab 128k -f flv rtmp://192.168.1.191:1935/hls/hello1
使用ffplay以及vlc拉流
再次在ffmpeg.exe所在的文件夹种输入cmd,回车,输入ffplay拉流
ffplay -fflags nobuffer rtmp://192.168.1.191:1935/hls/hello1 # rtmp播放,也可以配置h5ss 播放
使用vlc拉流,打开网络串流,输入:
rtmp://192.168.1.191:1935/hls/hello1
显示如下:
注意:
如果出现“write /proc/self/attr/keycreate: permission denied” 则表示文件没有写入权限,被拒绝访问了这是selinux是linux为了系统安全性做的控制,会控制用户可以访问、读取、修改哪些文件,比如,前面的write /proc/self/attr/keycreate文件没有权限,就是被selinux控制了。selinux有三种模式:enforcing 强制 permissive 宽容的 diabled 禁止的,权限限制从高到低。
解决方法:
在Linux CentOS7中将/etc/selinux
下的config
文件中的SELINUX
属性改为disabled
步骤:
vi /etc/selinux/config
可以看到里面的属性为:enforcing
强制性的,按i进入编辑模式,将SELINUX
属性改为disabled
,按Esc,再按:wq保存退出,重启liunx
系统即可