主要是给自己这两周折腾的东西收尾一下,踩了很多坑,比如用ffmpeg推流、自己配置nginx-rtmp环境等,没必要而且很容易出错。
前提知识
需要学习docker的简单使用,b站狂神,质量非常高。(别看写的java,我是python主语言的,也可以看)【狂神说Java】Docker进阶篇超详细版教程通俗易懂_哔哩哔哩_bilibili
需要学习网络相关的知识。比如ip地址的类型。
我们要做的事情分成两部分,推流和拉流。
推流
推流又分成两部分,一个是构建一个代理端口并配置一下,我主要是参考了
Docker简易搭建个人直播流rtmp服务器总结_二少爷的博客的博客-CSDN博客_docker搭建直播服务器
docker 搭建nginx-rtmp_司马懿的西山居-CSDN博客_docker nginx rtmp
两篇推文。注意需要配置好文件才能,可以参考第二篇推文里给的那个配置文件(因为我没花时间学nginx,不太看懂的)
sudo docker run -d --name rtmp -p 1935:1935 -p 8080:8080 -v ~/Documents/nginx-1.19.2/conf/nginx.conf:/etc/nginx/nginx.conf alqutami/rtmp-hls
以上需要安装在你的服务器上!!!!
完成以上步骤后,rtmp://你的服务器ip地址:1935/live/,就是我们要推流的地址了
另一个是把流推送到推流地址
在你设备端(比如电脑的前置摄像头、usb摄像头)所在的电脑,安装obs。(ffmpeg推流学习成本太高了)。如果是ip摄像头,好像是可以直接推流,只需要处理拉流的问题。
obs设置画面和声音非常方便,点点点就行了
唯一的问题是,要注意设置里,填写上面我们得到的推流地址(这步可能会卡在防火墙之类的问题上,要检查一下配置问题)。串流密钥,随便填写就行了,也可以不填。192是局域网,只有局域网内的设备可以拉流,如果想在公网拉就要127之前的ip地址。
然后点击开始推流,推流的步骤就好了。
拉流
拉流因为我的需求要放到服务器上跑一个实时深度学习项目,我还没有完全搞定
目前试了一下python的cv2。大家参考一下就好。
import cv2
import time
def test():
'''
调用摄像头,捕捉图像
'''
url = 'rtmp://192.168.3.120:1935/live'
cap = cv2.VideoCapture(url)
#读取摄像头,0表示系统默认摄像头
# cap = cv2.VideoCapture(0)
while True:
#读取图像
ret,photo=cap.read()
#将图像传送至窗口
cv2.imshow('Please Take Your Photo!!',photo)
#设置等待时间,若数字为0则图像定格
key=cv2.waitKey(0.1)
#按空格获取图像
if key==ord(" "):
#以当前时间存储
filename = time.strftime('%Y%m%d-%H%M%S') + ".jpg"
#保存位置
cv2.imwrite(filename,photo)
#按“q”退出程序
if key==ord("q"):
cap.release()
break
pass
test()