华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp

本文主要是介绍华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp

什么是华为云Flexus X实例

  • 华为云Flexus X实例云服务是新一代开箱即用、体验跃级、面向中小企业和开发者打造的高品价比云服务产品。
  • Flexus云服务器X实例是新一代面向中小企业和开发者打造的柔性算力云服务器,可智能感知业务负载,适用于电商直播、企业建站、开发测试环境、游戏服务器、音视频服务等中低负载场景。

开始接触华为云Flexus X实例

  • 获取华为云Flexus X实例后第一步就是先去华为云上重置服务器密码
    请添加图片描述在这里插入图片描述
  • 重置完毕后用ssh工具登录华为云服务器,这里我用的是finalshell,也可以用其他工具登陆比如xshell或者Putty都可以
    在这里插入图片描述
  • 登录上去查看硬盘大小,可以看到是100g硬盘,硬盘总大小是正常的
root@flexusx-ebe8:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1.2G  1.1M  1.2G   1% /run
/dev/vda1        99G  4.2G   90G   5% /
tmpfs           5.7G     0  5.7G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           1.2G  4.0K  1.2G   1% /run/user/0
  • 然后输入 ufw status可以看到默认防火墙是关闭的,因此我们就不需要额外再去配置端口开放相关的配置,只要在华为云安全组配置端口开放就可以了
root@flexusx-ebe8:~# ufw status
Status: inactive

docker环境的安装

  • 然后进行docker容器的安装,安装最新版本的docker
  • 这里因为docker现在已经无法直接通过网络安装,所以我们通过离线安装的方式安装docker环境
  • 从官网下载离线包
https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/

在这里插入图片描述

  • 如图所示,把离线包传到服务器上,进行安装
dpkg -i *.deb
  • 查看安装的docker版本
root@flexusx-ebe8:/home/docker# docker -v
Docker version 27.1.2, build d01f264
  • 至此docker容器环境安装完毕

srs相关

什么是srs

  • SRS的全称为Simple Realtime Server,是一个开源的(MIT协议)简单高效的实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等协议。 SRS媒体服务器和FFmpeg、OBS、VLC、 WebRTC等客户端配合使用,提供流的接收和分发的能力,是一个典型的发布 (推流)和订阅(播放)服务器模型。

开始安装srs

  • 先配置CANDIDATE="127.0.0.1",这里配置为外网ip,也就是华为云提供的弹性公网ip
  • 然后用docker启动srs
  • 使用的版本为srs6的release版本
docker run -it -d -p 1935:1935 -p 1985:1985 -p  8080:8080 -p 1990:1990 -p 8088:8088 --restart=always  --env CANDIDATE=$CANDIDATE -p 8000:8000/udp     ossrs/srs:6 ./objs/srs -c conf/https.docker.conf
  • 输入docker ps 查看容器运行状态
    在这里插入图片描述

修改配置文件以支持webrtc与rtmp

  • 但是这个版本启动后只支持webrtc但还不能与rtmp互相转换,这里我们就需要修改一下配置文件,让它也支持与rtmp相互转换

  • 输入docker ps获取容器id
    请添加图片描述

  • 然后输入docker exec -it 30d26105d002 /bin/bash进入容器,这里的容器id换成你刚才获取的id

root@30d26105d002:/usr/local/srs# ls
conf  etc  objs  usr
root@30d26105d002:/usr/local/srs# 
  • 进入容器后可以看到,默认的文件夹在/usr/local/srs中,我们进入conf文件夹cd conf

  • 可以看到有很多配置文件,里面也有我们刚才docker容器启动时指定的配置文件https.docker.conf
    在这里插入图片描述

  • 然后我们输入exit,退出容器,mkdir -p /usr/local/srs/conf创建目录,然后把容器内的配置文件copy出来,然后进入刚才创建好的文件夹cd /usr/local/srs/conf 然后执行docker cp 30d26105d002:/usr/local/srs/conf/https.docker.conf https.docker.conf,可以在本地获取我们需要的https.docker.conf文件,然后开始修改
    在这里插入图片描述

vhost __defaultVhost__ {hls {enabled         on;}http_remux {enabled     on;mount       [vhost]/[app]/[stream].flv;}rtc {enabled     on;# @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtcrtmp_to_rtc on;# @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmprtc_to_rtmp on;}
}
  • 把两个off修改为on即可
  • 配置文件修改好后,我们还需要把文件放进去,这里我们把改好的配置文件映射到容器内部,来达到我们想要的效果

重新部署srs容器并启动

  • 之前部署的srs服务还启动着,我们需要先停止服务,重新起一个新的,docker stop 30d26105d002,然后docker rm 30d26105d002,停止容器,然后删除容器
  • 重新运行指令,并附上挂载的命令
docker run -it -d -v /usr/local/srs/conf/https.docker.conf:/usr/local/srs/conf/https.docker.conf -p 1935:1935 -p 1985:1985 -p  8080:8080 -p 1990:1990 -p 8088:8088 --restart=always  --env CANDIDATE=$CANDIDATE -p 8000:8000/udp     ossrs/srs:6 ./objs/srs -c conf/https.docker.conf
  • 查看docker ps 可以看到容器正常运行着,这就代表着srs服务已经部署完毕了

配置Flexus云服务器X实例安全组

  • 经过上面部署srs服务,这时候服务是已经部署完毕了,但是我们还没法通过外网进行访问,还需要对Flexus云服务器X安全组的配置进行修改

  • 进入安全组的配置页面
    在这里插入图片描述

  • 新建安全组
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 这里我们开放1985,1935,8080,8088,1990,8000,这些端口,其中8000一定是自定义udp协议,其他都是tcp,这点非常重要

  • 然后加入新建的安全组
    在这里插入图片描述

  • 这样我们的实例的端口也就开放成功了

srs功能测试

srs服务器监控

  • 部署完毕srs后,开始对srs进行功能测试

  • 输入网址进行访问,https://ip:8088
    在这里插入图片描述

  • 点击SRS控制台,连接srs
    在这里插入图片描述

  • 服务器ip填弹性公网ip,然后端口填1990,点击连接到SRS,就可以看到服务器的运行状态与srs的运行状态,以及负载网速cpu磁盘等各种信息
    在这里插入图片描述

webrtc推拉流测试

  • 输入网址https://ossrs.net/srs.release/releases/app.html,选择实用工具中的webrtc播放器
    在这里插入图片描述

  • 推流配置,把端口改为1990,这是https的端口,然后再把地址复制到播流那边,就可以看到摄像头的画面了

  • 推流上去
    在这里插入图片描述

  • 拉流直播
    在这里插入图片描述

  • 这里我测了苹果手机去商店下载谷歌浏览器后,谷歌浏览器也可是可以播放的

rtmp推流

  • rtmp推流,我一般是使用ffmpeg,指令为ffmpeg -re -i test.mp4 -vcodec h264 -c copy -f flv rtmp://弹性公网ip:1935/live/live200,然后同样的可以用rtc播放器播放,这就是rtmp转webrtc的效果
    在这里插入图片描述

SRS性能优化

  • 对srs的优化,因为webrtc是使用的udp缓存,因此linux的udp缓存参数得增大,不然会因为本地udp缓存不够大,连本地上传的缓存都不够,导致掉帧。
# vi /etc/sysctl.conf
net.core.rmem_max=16777216
net.core.rmem_default=16777216
net.core.wmem_max=16777216
net.core.wmem_default=16777216

这篇关于华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126328

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1