本教程实现在Ubuntu上部署rtmp服务器并在Windows上使用python脚本推流到rtmp服务器。
sudo apt-get install docker.io
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://6ykn8gfe.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker pull jun3/rtmp
sudo docker run --name rtmp -p 1935:1935 -p 8080:80 -d -it jun3/rtmp
运行该镜像就相当于rtmp服务器已经在Ubuntu服务器上部署了。
在Ubuntu服务器上打开浏览器输入地址127.0.0.1:8080/stat
可以看到当前服务器连接情况。以下分别是无连接和有连接的情况:
FFMpeg可以实现推流视频到rtmp服务器,安装步骤如下:
D:\ffmpeg
d:\ffmpeg\bin
ffmpeg -version
,如果出现版本信息则安装成功。ifconfig
命令查看本机ip地址:import cv2
import time
import subprocess as sp
import multiprocessing
import psutil
class stream_pusher(object):
def __init__(self, rtmp_url=None, raw_frame_q=None):
self.rtmp_url = rtmp_url
self.raw_frame_q = raw_frame_q
fps = 20
width = 640
height = 480
self.command = ['ffmpeg',
'-y',
'-f', 'rawvideo',
'-vcodec', 'rawvideo',
'-pix_fmt', 'bgr24',
'-s', "{}x{}".format(width, height),
'-r', str(fps),
'-i', '-',
'-c:v', 'libx264',
'-pix_fmt', 'yuv420p',
'-preset', 'ultrafast',
'-f', 'flv',
self.rtmp_url]
def __frame_handle__(self, raw_frame, text, shape1, shape2):
return (raw_frame)
def push_frame(self):
p = psutil.Process()
p.cpu_affinity([0, 1, 2, 3])
p = sp.Popen(self.command, stdin=sp.PIPE)
while True:
if not self.raw_frame_q.empty():
raw_frame, text, shape1, shape2 = self.raw_frame_q.get()
frame = self.__frame_handle__(raw_frame, text, shape1, shape2)
p.stdin.write(frame.tostring())
else:
time.sleep(0.01)
def run(self):
push_frame_p = multiprocessing.Process(target=self.push_frame, args=())
push_frame_p.daemon = True
push_frame_p.start()
if __name__ == '__main__':
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
rtmpUrl = "rtmp://192.168.1.35:1935/stream/pupils_trace"
raw_q = multiprocessing.Queue()
my_pusher = stream_pusher(rtmp_url=rtmpUrl, raw_frame_q=raw_q)
my_pusher.run()
while True:
_, raw_frame = cap.read()
info = (raw_frame, '2', '3', '4')
if not raw_q.full():
raw_q.put(info)
cv2.waitKey(1)
cap.release()
print('finish')
main函数中的rtmpUrl
中的ip地址要改成上一步中查询到的Ubuntu的ip地址。执行该脚本就会推流到Ubuntu的rtmp服务器,在Ubuntu服务器的浏览器中通过127.0.0.1:8080/stat
地址就可以看到该视频流的传输情况。
sudo docker ps -a
下图所示即为该镜像的容器id:
sudo docker start a47e08eaef8b
只需要一行代码:
vs = cv2.VideoCapture('rtmp://192.168.1.35:1935/stream/pupils_trace')
上面代码使用的url与视频推流python脚本中的rtmpUrl
是同一个。
本文地址:https://blog.csdn.net/weixin_42431920/article/details/107191582
如对本文有疑问, 点击进行留言回复!!
Python笔记-UiSelector中resourceId定位方式
【3Dtiles】3Dmax模型处理为gltf和3dtiles,包含LOD效果
荐 用Django全栈开发——08. 使用AdminLTE开发前端登录页面
网友评论