如何在 Ubuntu 22.04 上使用 Nginx-RTMP 设置视频流服务器

2023-11-16

介绍

流媒体视频有很多用例。服务提供商如Twitch在处理流媒体的网络发现和社区管理方面非常受欢迎,并且免费软件,例如OBS工作室广泛用于实时组合来自多个不同流源的视频叠加。虽然这些平台非常强大,但在某些情况下,您可能希望能够托管不依赖其他服务提供商的流。

在本教程中,您将学习如何配置 Nginx Web 服务器来托管可以在不同应用程序中链接和查看的独立 RTMP 视频流。 RTMP,实时消息传递协议,定义了大多数互联网视频流的基础知识。您还将了解如何使用相同技术托管支持更现代平台的 HLS 和 DASH 流。

先决条件

要完成本指南,您将需要:

  • 一台 Ubuntu 22.04 服务器和一台非root用户与sudo特权。您可以在我们的文章中详细了解如何设置具有这些权限的用户使用 Ubuntu 22.04 进行初始服务器设置 guide.
  • Nginx已安装,如下如何在 Ubuntu 22.04 上安装 Nginx.

本教程将使用占位符域名你的域名对于 URL 和主机名。在学习本教程时,将其替换为您自己的域名或 IP 地址。

步骤 1 — 安装和配置 Nginx-RTMP

大多数现代流媒体工具都支持 RTMP 协议,该协议定义了互联网视频流的基本参数。 Nginx Web 服务器包含一个模块,允许您通过专用 URL 以最少的配置提供 RTMP 流,类似于默认情况下提供对网页的 HTTP 访问的方式。 Nginx RTMP 模块不会自动包含在 Nginx 中,但在 Ubuntu 22.04 和大多数其他 Linux 发行版上,您可以将其作为附加包安装。

首先运行以下命令作为非root用户更新您的软件包列表并安装 Nginx 模块:

  1. sudo apt update
  2. sudo apt installlibnginx-mod-rtmp

安装模块不会自动开始提供流。您需要在 Nginx 配置文件中添加一个配置块,用于定义流的可用位置和方式。

Using nano或者你最喜欢的文本编辑器,打开 Nginx 的主配置文件,/etc/nginx/nginx.conf,并将此配置块添加到文件末尾:

  1. sudo nano/etc/nginx/nginx.conf
/etc/nginx/nginx.conf
. . .
rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                allow publish 127.0.0.1;
                deny publish all;

                application live {
                        live on;
                        record off;
                }
        }
}
  • listen 1935意味着 RTMP 将监听端口上的连接1935,这是标准的。
  • chunk_size 4096意味着 RTMP 将以 4KB 块的形式发送数据,这也是标准的。
  • allow publish 127.0.0.1 and deny publish all意味着服务器将只允许从同一服务器发布视频,以避免任何其他用户推送自己的流。
  • application live定义一个应用程序块,该块将在以下位置可用/live网址路径。
  • live on启用实时模式,以便多个用户可以同时连接到您的流,这是视频流的基本假设。
  • record off禁用 Nginx-RTMP 录制功能,以便默认情况下不会将所有流单独保存到磁盘。

保存并关闭文件。如果您正在使用nano, press CTRL+X,然后当出现提示时,Y and ENTER.

这就是 RTMP 配置的开始。默认情况下,它监听端口1935,这意味着您需要在防火墙中打开该端口。如果您配置了ufw作为初始服务器设置的一部分,运行以下命令:

  1. sudoUFW 允许1935/tcp

现在您可以使用更改重新加载 Nginx:

  1. sudosystemctl 重新加载 nginx.service

您现在已经有了一个正在运行的 RTMP 服务器。在下一节中,我们将介绍从本地和远程源将视频流传输到 RTMP 服务器。

第 2 步 — 将视频发送到您的 RTMP 服务器

有多种方法可以将视频发送到 RTMP 服务器。一种选择是使用ffmpeg,一种流行的命令行音频视频实用程序,可直接在服务器上播放视频文件。如果您的服务器上还没有视频文件,您可以使用以下命令下载一个视频文件youtube-dl,一个用于从 YouTube 等流媒体平台捕获视频的命令行工具。土濑youtube-dl,您还需要在服务器上安装最新的 Python。

首先,安装Python及其包管理器,pip:

  1. sudo apt installpython3-pip

接下来,使用pip安装youtube-dl:

  1. sudo pip installyoutube-dl

现在你可以使用youtube-dl从 YouTube 下载视频。如果您还没有想到,请尝试观看此视频,其中介绍了DigitalOcean 的应用程序平台:

  1. youtube-dl https://www.youtube.com/watch?v=iom_nhYQIYk-f mp4

Note:有时,您会遇到这样的错误:ERROR: unable to download video data: HTTP Error 403: Forbidden。如果这样做,请仔细检查您的 URL 是否正确。如果您的 URL 正确,再次运行该命令即可。这是通过该库与 YouTube 交互的一个怪癖。

您的输出将返回为youtube-dl,它将下载的视频和音频流合并到一个文件中,这是正常的:

Output
[youtube] iom_nhYQIYk: Downloading webpage [download] Destination: Introducing App Platform by DigitalOcean-iom_nhYQIYk.mp4 [download] 100% of 7.90MiB in 01:39

现在,您的当前目录中有一个视频文件,其标题如下Introducing App Platform by DigitalOcean-iom_nhYQIYk.mp4。要流式传输,请安装ffmpeg:

  1. sudo apt install ffmpeg

And use ffmpeg将其发送到您的 RTMP 服务器:

  1. ffmpeg -re -i “介绍 DigitalOcean-iom_nhYQIYk.mp4 的应用程序平台” -c:v copy -c:a aac -ar 44100 -ac 1 -fflv rtmp://localhost/live/stream

This ffmpeg命令正在做一些事情来准备视频以适合流媒体播放的格式。这不是一个ffmpeg教程,所以你不需要太仔细地检查它,但你可以了解各种选项,如下所示:

  • -re指定将以其本机帧速率读取输入。
  • -i "Introducing App Platform by DigitalOcean-iom_nhYQIYk.mp4"指定我们的路径i输入文件。
  • -c:v被设定为copy,这意味着您正在复制v您从 YouTube 获取的 ideo 格式。
  • -c:a还有其他参数,即aac -ar 44100 -ac 1,因为您需要重新采样a音频转换为 RTMP 友好的格式。aac是一种广泛支持的音频编解码器,44100Hz 是常见频率,并且-ac 1出于兼容性目的指定 AAC 规范的第一个版本。
  • -f flv将视频包装在flv格式容器以最大程度地兼容 RTMP。

视频发送至rtmp://localhost/live/stream因为你定义了live配置块中Step 1, and stream是为此视频任意选择的 URL。

Note:您可以了解更多有关ffmpeg选项来自ffm提供者,社区维护的目录ffmpeg命令示例,或参考官方文档.

While ffmpeg正在流式传输视频,它将打印时间码:

Output
frame= 127 fps= 25 q=-1.0 size= 405kB time=00:00:05.00 bitrate= 662.2kbits/s speed=frame= 140 fps= 25 q=-1.0 size= 628kB time=00:00:05.52 bitrate= 931.0kbits/s speed=frame= 153 fps= 25 q=-1.0 size= 866kB time=00:00:06.04 bitrate=1173.1kbits/s speed=

这是标准的ffmpeg输出。如果您将视频转换为不同的格式,这些可能有助于了解视频重新采样的效率,但在这种情况下,您可能不希望看到它的播放是否一致。使用此示例视频,您应该得到准确的结果fps= 25增量。

While ffmpeg is running, you can connect to your RTMP stream from a video player. If you have VLC, mpv, or another media player installed locally, you should be able to view your stream by opening the URL rtmp://your_domain/live/stream in your media player. Your stream will terminate after ffmpeg has finished playing the video. If you want it to keep looping indefinitely, you can add -stream_loop -1 to the beginning of your ffmpeg command.

Note: You can also stream directly to, for example, Facebook Live using ffmpeg without needing to use Nginx-RTMP at all by replacing rtmp://localhost/live/stream in your ffmpeg command with rtmps://live-api-s.facebook.com:443/rtmp/your-facebook-stream-key. YouTube uses URLs like rtmp://a.rtmp.youtube.com/live2. Other streaming providers that can consume RTMP streams should behave similarly.

现在您已经学会了从命令行流式传输静态视频源,接下来您将学习如何在桌面上使用 OBS 从动态源流式传输视频。

第 3 步 — 通过 OBS 将视频流式传输到您的服务器(可选)

流媒体通过ffmpeg当您准备好要播放的视频时,这很方便,但实时流媒体可以更加动态。最流行的直播软件是OBS,或开放广播软件——它是免费的、开源的,而且非常强大。

OBS 是一个桌面应用程序,将从您的本地计算机连接到您的服务器。

安装 OBS 后,配置它意味着自定义要添加到流中的桌面窗口和音频源,然后添加流服务的凭据。本教程不会涵盖您的流式传输配置,因为它取决于偏好,并且默认情况下,您可以通过仅流式传输整个桌面来获得工作演示。要设置流媒体服务凭据,请打开 OBS 的设置菜单,导航至Stream选项并输入以下选项:

Streaming Service: Custom
Server: rtmp://your_domain/live
Play Path/Stream Key: obs_stream

obs_stream is an arbitrarily chosen path,in this case, your video would be available at rtmp://your_domain/live/obs_stream. You do not need to enable authentication, but you do need to add an additional entry to the IP whitelist that you configured in Step 1.

回到服务器,打开Nginx的主配置文件,/etc/nginx/nginx.conf,并添加一个额外的allow publish您的本地 IP 地址条目。如果您不知道本地 IP 地址,最好访问以下网站我的IP地址是多少它可以告诉您从哪里访问它:

  1. sudo nano/etc/nginx/nginx.conf
/etc/nginx/nginx.conf
. . .
                allow publish 127.0.0.1;
                allow publish your_local_ip_address;
                deny publish all;
. . .

保存并关闭文件,然后重新加载 Nginx:

  1. sudosystemctl 重新加载 nginx.service

You should now be able to close OBS’s settings menu and click Start Streaming from the main interface! Try viewing your stream at rtmp://your_domain/live/obs_stream in a media player as before. Now that you understand the fundamentals of streaming video in action, you can add a few other features to your server to make it more production-ready.

第 4 步 - 将监控添加到您的配置中(可选)

现在您已将 Nginx 配置为使用 Nginx-RTMP 模块流式传输视频,下一步常见的步骤是启用 RTMP 统计页面。而不是向您的 main 添加越来越多的配置详细信息nginx.conf文件中,Nginx 允许您将每个站点的配置添加到名为的子目录中的各个文件中sites-available/。在这种情况下,您将创建一个名为rtmp:

  1. sudo nano/etc/nginx/sites-available/rtmp

添加以下内容:

/etc/nginx/sites-available/rtmp
server {
    listen 8080;
    server_name  localhost;

    # rtmp stat
    location /stat {
        rtmp_stat all;
        rtmp_stat_stylesheet stat.xsl;
    }
    location /stat.xsl {
        root /var/www/html/rtmp;
    }

    # rtmp control
    location /control {
        rtmp_control all;
    }
}

保存并关闭文件。这stat.xsl此配置块中的文件用于在浏览器中设置 RTMP 统计页面的样式和显示。它是由libnginx-mod-rtmp您之前安装的库,但默认情况下它是压缩的,因此您需要将其解压缩并将其放入/var/www/html/rtmp目录以匹配示例配置。请注意,您可以在以下位置找到有关这些选项的更多信息:Nginx-RTMP 文档.

创建/var/www/html/rtmp目录,然后解压stat.xsl.gz文件包含以下命令:

  1. sudo mkdir/var/www/html/rtmp
  2. sudo cp/usr/share/doc/libnginx-mod-rtmp/examples/stat.xsl /var/www/html/rtmp/stat.xsl

最后,要访问您添加的统计页面,您需要在防火墙中打开另一个端口。具体来说,listen指令配置了端口8080,因此您需要添加一条规则来访问该端口上的 Nginx。但是,您可能不希望其他人能够访问您的统计页面,因此最好只允许您自己的 IP 地址访问。运行以下命令:

  1. sudo ufw allow from your_ip_address to any port http-alt

接下来,您需要激活这个新配置。 Nginx 的约定是从以下文件创建符号链接(如快捷方式)sites-available/到另一个名为sites-enabled/当您决定启用或禁用它们时。为了清楚起见,使用完整路径来创建该链接:

  1. sudo ln -s/etc/nginx/sites-available/rtmp /etc/nginx/sites-enabled/rtmp

现在您可以再次重新加载 Nginx 来处理您的更改:

  1. sudosystemctl 重新加载 nginx.service

You should now be able to go to http://your_domain:8080/stat in a browser to check out the RTMP statistics page. Visit and refresh the page while streaming video and watch as the stream statistics change.

您现在已经了解了如何监控视频流并将其推送给第三方提供商。在最后一部分中,您将学习如何直接在浏览器中提供它,而不使用第三方流媒体平台或独立的媒体播放器应用程序。

第 5 步 — 为浏览器创建现代流(可选)

最后一步,您可能需要添加对较新的流媒体协议的支持,以便用户可以直接使用 Web 浏览器从您的服务器流式传输视频。您可以使用两种协议来创建基于 HTTP 的视频流: Apple 的HLS和MPEGDASH。它们都有优点和缺点,因此您可能想同时支持两者。

Nginx-RTMP 模块支持这两种标准。要向您的服务器添加 HLS 和 DASH 支持,您需要修改rtmp阻止你的nginx.conf文件。打开/etc/nginx/nginx.conf using nano或您喜欢的编辑器,然后添加以下突出显示的指令:

  1. sudo nano/etc/nginx/nginx.conf
/etc/nginx/nginx.conf
. . .
rtmp {
        server {
. . .
                application live {
                        live on;
                        record off;
                        hls on;
                        hls_path /var/www/html/stream/hls;
                        hls_fragment 3;
                        hls_playlist_length 60;

                        dash on;
                        dash_path /var/www/html/stream/dash;
                }
        }
}
. . .

保存并关闭文件。接下来,将其添加到您的底部sites-available/rtmp:

  1. sudo nano/etc/nginx/sites-available/rtmp
/etc/nginx/sites-available/rtmp
. . .
server {
    listen 8088;

    location / {
        add_header Access-Control-Allow-Origin *;
        root /var/www/html/stream;
    }
}

types {
    application/dash+xml mpd;
}

Note: The Access-Control-Allow-Origin *标头启用CORS, or 跨域资源共享,默认情况下禁用。这会向从您的服务器访问数据的任何 Web 浏览器传达该服务器可能从其他端口或域加载资源的信息。需要 CORS 才能最大程度地兼容HLS 和 DASH 客户端,以及许多其他 Web 部署中的常见配置切换。

Save and close the file. Note that you’re using port 8088 here, which is another arbitrary choice for this tutorial to avoid conflicting with any services you may be running on port 80 or 443. You’ll want to open that port in your firewall for now too:

  1. sudoUFW 允许8088/tcp

最后,创建一个streamWeb 根目录中的目录来匹配配置块,以便 Nginx 可以生成 HLS 和 DASH 所需的文件:

  1. sudo mkdir/var/www/html/stream

再次重新加载 Nginx:

  1. sudosystemctl 重新加载 nginx

You should now have an HLS stream available at http://your_domain:8088/hls/stream.m3u8 and a DASH stream available at http://your_domain:8088/dash/stream.mpd. These endpoints will generate any necessary metadata on top of your RTMP video feed in order to support modern APIs.

结论

您在本教程中使用的配置选项均记录在Nginx RTMP 维基页面。 Nginx 模块通常共享通用语法并公开大量配置选项,您可以在此处查看其文档以更改任何设置。

几乎所有互联网视频流都是在 RTMP、HLS 和 DASH 之上实现的,通过使用您在本教程中探索的方法,您可以通过其他广播服务提供流,或以您选择的任何其他方式公开它。接下来,您可以阅读有关将 Nginx 配置为反向代理使其中一些不同的视频端点可用作子域。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 22.04 上使用 Nginx-RTMP 设置视频流服务器 的相关文章

  • 无法安装 psycopg2 Ubuntu

    试图为 django 项目准备好服务器 但我在设置 postgres 时遇到了一些问题 我正在遵循本指南 https jee appy blogspot com 2017 01 deply django with nginx html ht
  • 我可以在 Nginx Conf 中添加多少个服务器块

    知道我可以在 Nginx 配置中添加多少个服务器块吗 我需要将它用于具有多个子域的反向代理 每个客户端一个子域 它能成功支持 10 000 个服务器块吗 有没有相关的基准研究 这实际上并不是一个你有多少人的问题can但你有多少 能够妥善处理
  • 有没有人在 Ubuntu 16.04 LTS 上安装 QGIS

    按照以下网址提供的说明进行操作 这一页 http www qgis org en site forusers alldownloads html并收到以下错误 以下软件包具有未满足的依赖关系 python qgis Depends pyth
  • NGINX hashbang 重写

    我想知道 hashbang url 的位置或重写 nginx 指令会是什么样子 基本上像前端控制器一样通过 hashbang 路由所有非 hashbanged url 所以 http example com about staff 将路由至
  • 将应用程序级别用户名/用户 ID 注入 nginx/Apache 日志

    有没有办法将应用程序级别的用户名或 id 在本例中为 django 用户名或 id 注入 Apache 或 ngnix 日志中 请注意 我不是询问 HTTP 身份验证用户名 我目前正在使用一个简短的自定义中间件将此数据添加到响应标头 如下所
  • Ubuntu 12.04 上的 PHP 从 5.3 升级到 php 5.6

    我正在按照本教程将 php 从版本 5 3 升级到 5 6 http phpave com upgrade php 53 to php 56 on ubuntu 1204 lts http phpave com upgrade php 53
  • EDITLogBack Syslog 不工作 java

    我写了一个简单的项目来在 Ubuntu 中运行日志 方法如下example https examples javacodegeeks com enterprise java logback logback syslog example 应用
  • 将代码从 htaccess 重写为 nginx 配置?

    我在将 htaccess 文件中的重写代码实现到 nginx 配置中时遇到问题 我已经尝试过生成器 http winnginx com htaccess http winginx com htaccess用于生成我的重写 代码 我的ngin
  • nginx 和 uwsgi 非常大的文件上传(>3Gb)

    也许有人知道该怎么做 我正在尝试上传大于 3Gb 的文件 没问题 如果我使用以下配置上传高达 2Gb 的文件 Nginx client max body size 5g client body in file only clean clie
  • 如何在 Linux 主机上的 docker 容器中挂载目录 [重复]

    这个问题在这里已经有答案了 我想将一个目录从 docker 容器挂载到本地文件系统 该目录是网站根目录 我需要能够使用任何编辑器在本地计算机上编辑它 我知道我可以跑docker run v local path container path
  • nginx位置正则表达式,匹配多次

    如何在 nginx 位置正则表达式中多次匹配 看来 x x 语法永远不起作用 例如 location abc w 1 3 从来不工作 您必须引用包含以下内容的位置 or 人物 location abc w 1 3 否则 nginx 将其解析
  • 连接到上游时 Nginx 错误:(13:权限被拒绝)

    我在我的中收到此错误nginx error log file 2014 02 17 03 42 20 crit 5455 0 1 connect to unix tmp uwsgi sock failed 13 Permission den
  • Nginx 是否也缓冲来自客户端的 http 请求?

    我知道 Nginx 可以缓冲来自上游服务器的响应 我的问题是 Nginx 是否也缓冲来自客户端的 http 请求 我的意思是 如果 Nginx 从客户端收到 http 请求 它是否立即与上游服务器建立连接 或者它会在收到整个http请求后创
  • 无法在 Google Cloud Run 上部署 Ubuntu 20.04 Docker 容器

    我正在尝试通过 Google Cloud Run 部署一个基于 Ubuntu 20 04 的简单的基于 Python 的 Docker 容器 我已经成功构建了映像 但是当我尝试部署 Cloud Run 服务时 出现以下错误 省略了项目详细信
  • 在 WSL Ubuntu 20.04 上安装 npm 后,我收到消息“/usr/bin/env: ‘bash\r’: No such file or directory”

    运行时我看到以下消息npm install or npm来自终端的命令 执行中node按预期工作 gt npm install usr bin env bash r No such file or directory 2023 年 7 月更
  • NMCLI 设备不可用

    我正在尝试在 ubuntu core 16 04 上配置带有蜂窝接口的新设备 我有 NMCLI 包在上面运行 在添加连接之前 我检查了接口 nmcli dev DEVICE TYPE STATE CONNECTION eth1 ethern
  • 错误请求 400:nginx/gunicorn

    我已经遵循了这个教程 http blog wercker com 2013 11 25 django 16 part3 html http blog wercker com 2013 11 25 django 16 part3 html我现
  • Django + nginx + uwsgi 无法登录

    我有非常简单的登录逻辑 类似于官方 Django 解决方案 class Login FormView template name login html form class AuthenticationForm def get self a
  • 上游太大 - nginx + codeigniter

    我从 Nginx 收到此错误 但似乎无法弄清楚 我正在使用 codeigniter 并使用数据库进行会话 所以我想知道标题怎么会太大 有没有办法检查标题是什么 或者看看我能做些什么来修复这个错误 如果您需要我提供任何conf文件或其他文件
  • PostgreSQL - 致命:用户“myuser”身份验证失败[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我刚刚在我的 Ubuntu Box 中安装了 PostGreSQL 我想做的第一件事就是创建一个数据库 我读了文档 http www postgres

随机推荐

  • Linux 中的命令

    at是一个命令行实用程序 允许您安排在特定时间执行的命令 创建的职位at仅执行一次 在这篇文章中 我们将解释如何使用at及其配套实用程序batch atq atrm查看 删除和创建稍后执行的作业 安装中at 根据分布情况 at您的 Linu
  • 如何在 Ubuntu 18.04 上安装 Webmin

    Webmin是一个用于 Linux UNIX 系统管理的开源 Web 控制面板 Webmin 允许您管理用户 组 磁盘配额以及配置最流行的服务 包括 Web FTP 电子邮件和数据库服务器 在本教程中 我们将向您展示如何在 Ubuntu 1
  • 如何在 Ubuntu 20.04 上安装 Nvidia 驱动程序

    本文介绍如何在 Ubuntu 20 04 上安装 NVIDIA 驱动程序 如果您的 Ubuntu 机器有 NVIDIA GPU 您可以选择开源驱动程序Nouveau以及 NVIDIA 的专有驱动程序 默认情况下 Ubuntu 使用 Nouv
  • 如何列出和删除 UFW 防火墙规则

    UFW 代表简单防火墙 是一个用户友好的前端 用于管理 iptables netfilter 防火墙规则 它是默认的防火墙配置工具Ubuntu并且也可用于其他流行的 Linux 发行版 例如Debian和 Arch Linux 在本教程中
  • 如何在 Vue.js 中使用样式和类绑定

    介绍 在本文中 您将了解 Vue js 中的动态样式和类绑定 随着v bind style指令 您将在单击事件上可视化字体大小 和v bind class 您将观察如何将多个类应用于元素 虽然这可以通过 DOM 操作实现 但 Vue js
  • SQL 类似 - SQL 不类似

    SQL LIKE 与 WHERE 子句一起使用来搜索列的模式 通配符是用于指定模式的通配符 有两个通配符与 LIKE 运算符一起使用 用百分比来表示一次 多次或不出现的情况 下划线用于表示单个字符 To use SQL LIKE opera
  • Spring Security 基于角色的访问授权示例

    今天我们将研究 Spring Security 基于角色的访问和授权示例 然而 在阅读这篇文章之前 请先阅读我之前关于 Spring 4 Security MVC 登录注销示例 以获取有关 Spring 4 Security 的一些基本知识
  • 如何在 Python 3 中构造 For 循环

    在计算机编程中使用循环使我们能够自动化并多次重复类似的任务 在本教程中 我们将介绍 Pythonfor loop A for循环基于循环计数器或循环变量实现代码的重复执行 这意味着for当进入循环之前已知迭代次数时 最常使用循环 这与whi
  • Python静态方法

    Python静态方法 In this quick post we will learn how to create and use a Python static method We will also have a look at wha
  • 如何在 Ubuntu 14.04 上使用 Let's Encrypt 保护 HAProxy

    介绍 Let s Encrypt 是一个新的证书颁发机构 CA 它提供了一种获取和安装免费 TLS SSL 证书的简单方法 从而在 Web 服务器上启用加密的 HTTPS 它通过提供软件客户端 Certbot 来简化流程 该客户端尝试自动执
  • 如何在 Ruby 中使用数组

    介绍 An array是一个表示值列表的数据结构 称为elements 数组允许您在单个变量中存储多个值 在 Ruby 中 数组可以包含任何数据类型 包括数字 字符串和其他 Ruby 对象 这可以压缩和组织您的代码 使其更具可读性和可维护性
  • Python unittest - 单元测试示例

    今天我们将学习Python单元测试并浏览Python单元测试示例程序 在之前的教程中我们了解了python zip 函数 Python单元测试 Python unittest 模块用于测试源代码单元 假设 您需要测试您的项目 您知道该函数将
  • 如何在 Ubuntu VPS 上备份 PostgreSQL 数据库

    什么是 PostgreSQL PostgreSQL 是一个现代数据库管理系统 它经常用于存储和操作与网站和应用程序相关的信息 与任何类型的有价值的数据一样 实施备份方案以防止数据丢失非常重要 本指南将介绍一些备份 PostgreSQL 数据
  • 如何在 React 中构建自动完成组件

    介绍 自动完成是一种输入字段根据用户输入建议单词的功能 这有助于改善应用程序中的用户体验 例如需要搜索的情况 在本文中 您将研究如何在 React 中构建自动完成组件 您将使用固定的建议列表 事件绑定 理解键盘代码以及操作状态管理 先决条件
  • 如何使用 Nmap 扫描开放端口

    介绍 对于许多崭露头角的系统管理员来说 网络是一个广泛且令人难以承受的主题 有各种层 协议和接口 以及许多必须掌握才能理解它们的工具和实用程序 在 TCP IP 和 UDP 网络中 ports是逻辑通信的端点 单个 IP 地址可能运行许多服
  • 如何设置 Jupyter Notebook 在 Ubuntu 16.04 上运行 IPython

    介绍 IPython 是 Python 的交互式命令行界面 Jupyter Notebook 为多种语言提供了交互式 Web 界面 包括 IPython 本文将引导您设置服务器来运行 Jupyter Notebook 并教您如何连接和使用该
  • Java 中的 Restful Web 服务教程

    欢迎来到 Java 中的 Restful Web 服务教程 REST是缩写代表性状态转移 休息是一个建筑风格用于开发可通过网络访问的应用程序 Roy Fielding 在 2000 年的博士论文中提出了 REST 架构风格 宁静的网络服务
  • 如何在 Ubuntu 18.04 上安装和保护 Grafana

    笔者精选 dev 颜色接受捐赠作为为捐款而写程序 介绍 Grafana是一个开源数据可视化和监控工具 集成了来自以下来源的复杂数据普罗米修斯 InfluxDB Graphite and 弹性搜索 Grafana 允许您为数据创建警报 通知和
  • Mockito 模拟静态方法 - PowerMock

    Mockito 允许我们创建模拟对象 由于静态方法属于类 因此 Mockito 中无法模拟静态方法 但是 我们可以使用 PowerMock 和 Mockito 框架来模拟静态方法 使用 PowerMock 的 Mockito 模拟静态方法
  • 如何在 Ubuntu 22.04 上使用 Nginx-RTMP 设置视频流服务器

    介绍 流媒体视频有很多用例 服务提供商如Twitch在处理流媒体的网络发现和社区管理方面非常受欢迎 并且免费软件 例如OBS工作室广泛用于实时组合来自多个不同流源的视频叠加 虽然这些平台非常强大 但在某些情况下 您可能希望能够托管不依赖其他