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

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

概述


本教程实现在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可以看到当前服务器连接情况。以下分别是无连接和有连接的情况:


QQ图片20220531193149.png


三、Windows上安装FFMpeg


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


  1. 下载FFMpeg——FFMpeg下载,自行选择自己需要的多少位的静态程序


  1. 解压到指定文件夹下——比如D:\ffmpeg


  1. 添加到环境变量——为系统变量中的Path变量添加以下一行:d:\ffmpeg\bin


  1. 查看FFmpeg版本信息——cmd中输入命令ffmpeg -version,如果出现版本信息则安装成功。


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


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


QQ图片20220531193305.png


  1. 脚本内容


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:

QQ图片20220531193349.png

  1. 启动该容器


输入以下命令启动id为上一步查询到的id的容器,就可以启动rtmp服务器了:


sudo docker start a47e08eaef8b


六、视频拉流


只需要一行代码:


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


相关文章
|
1月前
|
Ubuntu 测试技术 网络安全
Ubuntu系统下部署flatpress轻量级博客系统
【10月更文挑战第3天】Ubuntu系统下部署flatpress轻量级博客系统
48 3
Ubuntu系统下部署flatpress轻量级博客系统
|
1月前
|
网络安全 虚拟化 Docker
SSH后判断当前服务器是云主机、物理机、虚拟机、docker环境
结合上述方法,您可以对当前环境进行较为准确的判断。重要的是理解每种环境的特征,并通过系统的响应进行综合分析。如果在Docker容器内,通常会有明显的环境标志和受限的资源视图;而在云主机或虚拟机上,虽然它们也可能是虚拟化的,但通常提供更接近物理机的体验,且可通过硬件标识来识别虚拟化平台。物理机则直接反映硬件真实信息,较少有虚拟化痕迹。通过这些线索,您应该能够定位到您所处的环境类型。
27 2
|
1月前
|
Ubuntu 应用服务中间件 开发工具
Ubuntu16.04搭建gitlab服务器,搭建pip源服务器(两种方式),搭建apt源服务器
这篇文章是关于如何在Ubuntu 16.04系统上搭建GitLab服务器、pip源服务器(使用pypiserver和NGINX两种方式),以及apt源服务器的详细教程。
25 0
Ubuntu16.04搭建gitlab服务器,搭建pip源服务器(两种方式),搭建apt源服务器
|
1月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
55 3
|
1月前
|
Ubuntu API Python
Chat-TTS chat-tts-ui 实机部署上手测试!Ubuntu服务器实机 2070Super*2 8GB部署全流程
Chat-TTS chat-tts-ui 实机部署上手测试!Ubuntu服务器实机 2070Super*2 8GB部署全流程
65 1
|
1月前
|
Ubuntu 编译器 开发工具
香橙派5Pro+虚拟机Ubuntu18.04交叉编译+Opencv4.7
香橙派5Pro+虚拟机Ubuntu18.04交叉编译+Opencv4.7
|
1月前
|
Kubernetes 网络安全 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(一)部署K8s
基于Ubuntu-22.04安装K8s-v1.28.2实验(一)部署K8s
211 2
|
2月前
|
SQL 数据挖掘 数据库
服务器数据恢复—意外断电导致XenServer虚拟机不可用的数据恢复案例
服务器数据恢复环境: 一台服务器中有一组由4块STAT硬盘通过RAID卡组建的RAID10阵列,上层是XenServer虚拟化平台,虚拟机安装Windows Server操作系统,作为Web服务器使用。 服务器故障: 因机房异常断电导致服务器中一台VPS(Xen Server虚拟机)不可用,虚拟磁盘文件丢失。
服务器数据恢复—意外断电导致XenServer虚拟机不可用的数据恢复案例
|
2月前
|
存储 关系型数据库 文件存储
Ubuntu22.04LTS基于cephadm快速部署Ceph Reef(18.2.X)集群
这篇文章是关于如何在Ubuntu 22.04LTS上使用cephadm工具快速部署Ceph Reef(18.2.X)存储集群的详细教程,包括ceph的基本概念、集群的搭建步骤、集群管理以及测试集群可用性等内容。
453 8
Ubuntu22.04LTS基于cephadm快速部署Ceph Reef(18.2.X)集群
|
1月前
|
并行计算 Ubuntu 算法
Ubuntu18 服务器 更新升级CUDA版本 pyenv nvidia ubuntu1804 原11.2升级到PyTorch要求12.1 全过程详细记录 apt update
Ubuntu18 服务器 更新升级CUDA版本 pyenv nvidia ubuntu1804 原11.2升级到PyTorch要求12.1 全过程详细记录 apt update
102 0