当前位置:   article > 正文

ffmpeg+nginx+python完成视频流的推送与接收(Windows向Ubuntu推送视频流)_ffmpeg+nginx+yolov5

ffmpeg+nginx+yolov5

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

1.安装nginx

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

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

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

 解压nginx

tar -zxvf nginx-1.14.2.tar.gz

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

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

解压nginx rtmp模块

unzip nginx-rtmp-module-master.zip

 编译nginx

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

 编译情况如下

 接着make,正常情况如下

再接着sudo make install

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

正常情况如下 

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

 启动

sudo /usr/local/nginx/sbin/nginx

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

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

 2.配置rtmp

命令行编辑nginx配置文件

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

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

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

  1. rtmp
  2. {
  3. server
  4. {
  5. listen 1992;
  6. chunk_size 4096;
  7. application live
  8. {
  9. live on;
  10. }
  11. }
  12. }

 新增内容2

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

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

  1. server
  2. {
  3. listen 8080;
  4. location /stat
  5. {
  6. rtmp_stat all;
  7. rtmp_stat_stylesheet stat.xsl;
  8. }
  9. location /stat.xsl
  10. {
  11. root /home/saners/software/nginx-rtmp-module-master;
  12. }
  13. }

注意这个要放到http里面 

 接着关闭先前打开的nginx

sudo killall nginx

 重启更改了配置后的nginx

sudo /usr/local/nginx/sbin/nginx

3.Windows安装ffmpeg

 官网下载ffmpeg

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

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

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

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

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

ffmpeg -list_devices true -f dshow -i dummy

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

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

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

成功推送显示如下

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

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

上面没看到对应的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命令行情况如下

Ubuntu访问上述网址出现

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

 直接用python接,代码如下

  1. import cv2
  2. cap = cv2.VideoCapture("rtmp://192.168.41.128:1992/live/test")
  3. while cap.isOpened():
  4. ret,frame = cap.read()
  5. if ret:
  6. cv2.imshow('frame',frame)
  7. key=cv2.waitKey(delay=2)
  8. if key == ord('q'):
  9. break
  10. cap.release()
  11. cv2.destroyAllWindows()

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/77826
推荐阅读
相关标签
  

闽ICP备14008679号