欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Ubuntu虚拟机部署rtmp服务器实现视频推拉流

程序员文章站 2022-07-07 19:59:00
概述本教程实现在Ubuntu上部署rtmp服务器并在Windows上使用python脚本推流到rtmp服务器。一、Ubuntu系统rtmp服务器部署安装dockersudo apt-get install docker.io配置docker镜像加速器sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://6ykn8gfe.mi...

概述

本教程实现在Ubuntu上部署rtmp服务器并在Windows上使用python脚本推流到rtmp服务器。

一、Ubuntu系统rtmp服务器部署

  1. 安装docker
sudo apt-get install docker.io
  1. 配置docker镜像加速器
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
  1. 拉取rtmp镜像并运行
sudo docker pull jun3/rtmp
sudo docker run --name rtmp -p 1935:1935 -p 8080:80 -d -it jun3/rtmp

运行该镜像就相当于rtmp服务器已经在Ubuntu服务器上部署了。

二、rtmp服务器的简单操作

在Ubuntu服务器上打开浏览器输入地址127.0.0.1:8080/stat可以看到当前服务器连接情况。以下分别是无连接和有连接的情况:

Ubuntu虚拟机部署rtmp服务器实现视频推拉流

Ubuntu虚拟机部署rtmp服务器实现视频推拉流

三、Windows上安装FFMpeg

FFMpeg可以实现推流视频到rtmp服务器,安装步骤如下:

  1. 下载FFMpeg——FFMpeg下载,自行选择自己需要的多少位的静态程序
  2. 解压到指定文件夹下——比如D:\ffmpeg
  3. 添加到环境变量——为系统变量中的Path变量添加以下一行:d:\ffmpeg\bin
  4. 查看FFmpeg版本信息——cmd中输入命令ffmpeg -version,如果出现版本信息则安装成功。

四、Windows上使用python推流到Ubuntu的rtmp服务器

  1. Ubuntu上使用ifconfig命令查看本机ip地址:

Ubuntu虚拟机部署rtmp服务器实现视频推拉流

  1. python脚本内容
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地址就可以看到该视频流的传输情况。

五、Ubuntu开机以后如何启动docker镜像运行rtmp服务器

  1. 查看该镜像的容器id
sudo docker ps -a

下图所示即为该镜像的容器id:

Ubuntu虚拟机部署rtmp服务器实现视频推拉流

  1. 启动该容器
    输入以下命令启动id为上一步查询到的id的容器,就可以启动rtmp服务器了:
sudo docker start a47e08eaef8b

六、python视频拉流

只需要一行代码:

vs = cv2.VideoCapture('rtmp://192.168.1.35:1935/stream/pupils_trace')

上面代码使用的url与视频推流python脚本中的rtmpUrl是同一个。

本文地址:https://blog.csdn.net/weixin_42431920/article/details/107191582