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
系統即可