使用场景:我现在只有一台电脑,安装了虚拟机,虚拟机里面是Ubuntu系统,我准备把插在Windows本机上的视频流推给虚拟机里的Ubuntu,然后接收视频流显示出来,用于模拟以后可能遇到的视频流接引问题

1.安装nginx

sudo apt-get install libssl-dev libpcre3 libpcre3-dev openssl zlib1g-dev

下载nginx,这里选择了稳定版本

nginx: download

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_python

http://nginx.org/en/download.html

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_ffmpeg_02

 解压nginx

tar -zxvf nginx-1.14.2.tar.gz

下载rtmp插件(这个nginx没有,所以要单独下载)

https://github.com/arut/nginx-rtmp-module

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_python

https://github.com/arut/nginx-rtmp-module

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_Windows_04

解压nginx rtmp模块

unzip nginx-rtmp-module-master.zip

 编译nginx

cd nginx-1.20.2/
./configure --add-module=../nginx-rtmp-module-master
#../nginx-rtmp-module-master这里是nginx-rtmp的全路径或者相对路径,能在编译的时候找到就行

 编译情况如下

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_python_05

 接着make,正常情况如下

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_Ubuntu_06

再接着sudo make install

 这里注意不加sudo 可能报错:mkdir: cannot create directory ‘/usr/local/nginx’: Permission denied

正常情况如下 

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_ffmpeg_07

 自此nginx已经安装完了,验证是否安装

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_python_08

 启动

sudo /usr/local/nginx/sbin/nginx

新打开一个窗口命令行输入top,应该能找到nginx 

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_python_09

 查看自己的ip并访问网页确认,注意IP是那个ens33

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_python_10

 2.配置rtmp

命令行编辑nginx配置文件

sudo vim /usr/local/nginx/conf/nginx.conf

新增内容1,1992为监听端口,live on为实时

注意这里我设置了1992是监听端口,那么等下Windows推流时一定要用到的,默认是1935,如果你没有改就不用管

rtmp
{
    server
    {
        listen 1992;
        chunk_size 4096;
        application live
        {
            live on;
        }
    }
}

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_Windows_11

 新增内容2

其中8080为接流端口,等下要用到

/home/saners/software/nginx-rtmp-module-master为上面下载的nginx-rtmp-module-master全路径

server
{
      listen       8080;
      location /stat
      {
              rtmp_stat all;
              rtmp_stat_stylesheet stat.xsl;
      }
      location /stat.xsl
      {
              root /home/saners/software/nginx-rtmp-module-master;
      }
}

注意这个要放到http里面 

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_nginx_12

 接着关闭先前打开的nginx

sudo killall nginx

 重启更改了配置后的nginx

sudo /usr/local/nginx/sbin/nginx

3.Windows安装ffmpeg

 官网下载ffmpeg

Download FFmpeghttp://ffmpeg.org/download.html

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_nginx_13

点击以后跳转到GitHub,我选择了下面那个版本

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_Windows_14

 下载好以后解压放到自己想放的地方,并配置环境变量就可以用了

环境变量的配置右击此电脑后按照我标注的数字找到地方把ffmpeg的bin路径放过去就行了

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_ffmpeg_15

配置好后输入ffmpeg -version查看是否安装正确,或者我插上罗技摄像头测试,在cmd中输入

ffmpeg -list_devices true -f dshow -i dummy

这句命令是给出现在设备的列表

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_Ubuntu_16

 输出设备信息说明没问题了。

4.推流

 在Windows本机打开一个命令行输入以下语句,其中test.mp4是随便找的一个视频,flv是流格式,这个ip 192.168.41.128就是虚拟机里Ubuntu的

ffmpeg -i test.mp4  -f flv rtmp://192.168.41.128:1992/live/test

成功推送显示如下

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_python_17

 现在去Ubuntu看看推好了没有,输入地址

http://192.168.41.128:8080/stat  这个端口号是上面自己定义哈,别忘了那个stat不要改,固定的

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_ffmpeg_18

上面没看到对应的test,说明推送视频失败,那么我们再试试usb设备的实时视频,看看是不是配置文件有问题,根据之前查的USB设备名字,我用下面的语句向Ubuntu推送视频流

ffmpeg -f dshow -i video="HIK 1080P Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://192.168.41.128:1992/live/test

Windows命令行情况如下

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_Windows_19

Ubuntu访问上述网址出现

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_ffmpeg_20

说明配置没问题,后面再探究原因吧,下面走完最后一步,把视频实时接出来看看

 直接用python接,代码如下

import cv2

cap = cv2.VideoCapture("rtmp://192.168.41.128:1992/live/test")
while cap.isOpened():
    ret,frame = cap.read()
    if ret:
        cv2.imshow('frame',frame)
    key=cv2.waitKey(delay=2)
    if key == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

跑起来以后情况如下,刷新网页,那些out相关的会变,说明没有问题,而且还是实时

如何使用python调用ffmpeg进行推流 python ffmpeg拉流_nginx_21

雁过留声,人过留名,有用点赞,不要白嫖!