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月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
113 5
|
2月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
261 18
|
2月前
|
Ubuntu 安全 关系型数据库
安装MariaDB服务器流程介绍在Ubuntu 22.04系统上
至此, 您已经在 Ubuntu 22.04 系统上成功地完成了 MariadB 的标准部署流程,并且对其进行基础但重要地初步配置加固工作。通过以上简洁明快且实用性强大地操作流程, 您现在拥有一个待定制与使用地强大 SQL 数据库管理系统。
229 18
|
2月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
325 17
|
2月前
|
Ubuntu 安全 关系型数据库
安装MariaDB服务器流程介绍在Ubuntu 22.04系统上
至此, 您已经在 Ubuntu 22.04 系统上成功地完成了 MariadB 的标准部署流程,并且对其进行基础但重要地初步配置加固工作。通过以上简洁明快且实用性强大地操作流程, 您现在拥有一个待定制与使用地强大 SQL 数据库管理系统。
249 15
|
3月前
|
编解码 缓存 Ubuntu
在Ubuntu平台搭建RTMP直播服务器使用SRS简要指南
这个简要指南提供了搭建基本 RTMP 直播服务所需知道信息. SRS 还提供许多高级特性如 DVR、转码、边缘缓存等. 若要利用这些特性, 需要进一步阅读官方文档并相应地调整配置文件.
399 0
|
1月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
221 10
|
1月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。
|
1月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
350 8
|
1月前
|
存储 监控 安全
阿里云渠道商:云服务器价格有什么变动?
阿里云带宽与存储费用呈基础资源降价、增值服务差异化趋势。企业应结合业务特点,通过阶梯计价、智能分层、弹性带宽等策略优化成本,借助云监控与预算预警机制,实现高效、可控的云资源管理。