从“追求尽量不出错”,到正视“出错是必然”的转变,才是微服务架构得以|

如此而已~~~

园龄:3年3个月粉丝:0关注:12

云服务上的SRS使用WebRTC进行推拉流

云服务上的SRS使用WebRTC进行推流

官方文档地址:https://ossrs.net/lts/zh-cn/

本教学使用自签证书,以CentOS7为例。文档推荐使用Ubuntu20,你也可以使用这个。

特别提醒:给RTC开放的端口一定要设置为UDP,一般我们设置安全规则都会习惯性的设置为TCP这个可能是导致你无法使用的一个问题

 

零、前置准备

1、一台CentOS7的云服务器

 

2、安装好git,安装好后输入git出现命令提示表示你已经装好了
yum list git # 列出git安装包
yum install git # 在线安装git

 

3、配置安全规则放行端口(注意这些端口是不是已经被你使用过了,比如我这里8080用了,不推荐改SRS端口):

注意:这里8000设置为UDP哦

# 使用前如果是一个新机没有使用过端口那不管,但是如果使用过,可以先查看对应端口的使用情况
netstat -tuln | grep 端口号 ## 如果存在输出,就需要你看看是改谁的端口方便了
###################### 这里需要的端口:1935、8080、1985、8000(udp)、80、443 以下为参考配置:
# WebRTC streaming config for SRS.
# @see full.conf for detail config.
listen              1935;
max_connections     1000;
daemon             off;
srs_log_tank       console;
http_server {
  enabled         on;
   # 如果你想要切换这个端口需要注意,因为SRS一些前端源码中可能还是用的这个端口 要不你都去切换,要不使用nginx代理
  listen          8080;
  dir             ./objs/nginx/html;
}
http_api {
  enabled         on;
  listen          1985;
}
stats {
  network         0;
}
rtc_server {
  enabled on;
  listen 8000; # UDP port
   # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate
  candidate $CANDIDATE;
}
vhost __defaultVhost__ {
  rtc {
      enabled     on;
       # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtc
      rtmp_to_rtc on; # 需要开启,不然rtmp的推流无法转换播放
       # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmp
      rtc_to_rtmp off;
  }
  http_remux {
      enabled     on;
      mount       [vhost]/[app]/[stream].flv;
  }
}

 

4、安装好对应的 FFmpeg

这里你有其他的安装方式也是可以的,主要是为了后面测试使用。主要这种方式需要的时间很久

# 添加含ffmpeg的仓库:
# URL可能会随着时间的推移而更改,所以请确保检查Nux Dextop的官方文档或网站以获取最新的URL
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
# 安装FFmpeg和FFmpeg开发包:
sudo yum install ffmpeg ffmpeg-devel
# ffmpeg -version
ffmpeg -version
# 需要添加额外功能到ffmpeg的自己去找教学,比如向nginx中加nginx-http-flv-module模块也可以搭建一个流媒体服务器

 

 

5、构建GO语言运行环境

1、删除旧版本(没装过就不管,有就别装^-^)

sudo rm -rf /usr/local/go
sudo apt-get remove golang
sudo apt-get remove golang-go
sudo apt-get autoremove

 

2、下载最新版本

#wget 后面的下载链接请去golang官网(https://golang.google.cn/dl/)获取你想下载的对应go版本
sudo wget https://golang.google.cn/dl/go1.20.3.linux-amd64.tar.gz
# 解压文件
sudo tar xfz go1.20.3.linux-amd64.tar.gz -C /usr/local

 

3、设置环境变量

#1、打开profile:
sudo vim /etc/profile
# 2、在末尾行添加以下变量:
export GOROOT=/usr/local/go
export GOPATH=$HOME/gowork
export GOBIN=$GOPATH/bin
export PATH=$GOPATH:$GOBIN:$GOROOT/bin:$PATH
# i 插入 esc :wq 保存退出后可以使用 cat /etc/profile 查看是否添加成功
# 3、是环境立即生效
source /etc/profile
# 4、将环境立即生效载入脚本
# 先打开文件这个文件:
cd ~
sudo vim .bashrc
# 末行加入这个命令:
source /etc/profile

 

4、查看go语言环境变量

go env

 

5、GO111MOUDLE和更改GOPROXY

go env -w GOPROXY="https://goproxy.cn"
go env -w GO111MODULE=on

 

6、查看go语言版本,输出版本后安装成功

go version

 

 

一、安装和编译SRS并测试使用

1、拉取SRS源码,github地址:https://github.com/ossrs/srs
# 在你觉得合适的地方可以创建一个目录
mkdir srs
# 拉取对应的源码
git clone -b https://github.com/ossrs/srs.git
# 查看我们所处的分支
git branch -a
# 切换分支到4.0 可以再次查看验证
git checkout 4.0release

 

2、编译安装
# 到 trunk 目录下:一般在srs/trunk
./configure  # 过程可能有点久
# 输出以下结果表示编译成功
You can build SRS:
" make " to build the SRS server
" make help " to get some help
# 运行make构建
make

 

3、运行

1、运行:

# 使用rtc.conf在 trunk目录 下运行
./objs/srs -c conf/rtc.conf
# 访问地址
http://你的服务器ip地址:8080 # 不推荐改配置文件的端口,除非你可以使用nginx代理或者对SRS熟悉

看到如下显示就成功了:

2、为了验证是否可用:

提示:在trunk目录下运行,友情提示要学会根据指令判断运行位置,比如这里./doc说明运行处有这个文件,而在trunk下就有,学会大胆假设

# 使用ffmpeg进行推流
ffmpeg -re -i ./doc/source.flv -c copy -f flv rtmp://localhost/live/livestream

进入对应的SRS播放器中,在SRS播放中点击播放视频,可以成功显示表示你前面的配置是ok的

image-20240627230526997

 

4、提示:如果使用RTC播发器会黑屏加载中 或者 闪退
# 在谷歌浏览器中输入这个地址(这个的使用需要去了解学习):
chrome://webrtc-internals
# conf/rtc.conf的配置文件中:
rtmp_to_rtc on; # 需要开启,不然rtmp的推流无法转换播放

 

通过这个可以看到得到服务器返回的IP地址存在问题,和实际的地址不符。处理方案:

# conf/rtc.conf的配置文件中:
rtc_server {
  enabled on;
  listen 8000; # UDP port
   # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate
  candidate 改为你的服务器ip;
}

 

最后当你使用RTC的播放器可以播放时,第一阶段就好了。

 

二、使用自签证书配置HTTPS

参考地址:https://github.com/ossrs/httpx-static?tab=readme-ov-file

为什么需要,因为WebRTC的推拉流为了保证安全是需要https的或者你再本机安装使用是如果地址是localhost可以不用https。

 

1、下载工具
# 我会在我创建的srs的同级目录下创建一个 httpx-static 再进克隆
git clone https://github.com/ossrs/httpx-static.git

 

2、生成证书

在对应参考地址下点击对应的httpx-static可以复制下面指令:

# 在 httpx-static 根目录下 的 httpx-static目录下执行
openssl genrsa -out server.key 2048 &&
subj="/C=CN/ST=Beijing/L=Beijing/O=Me/OU=Me/CN=me.org" &&
openssl req -new -x509 -key server.key -out server.crt -days 365 -subj $subj

1、步骤一:

 

2、步骤二:

image-20240628093325182

 

3、可以看到:

image-20240628093439999

 

 

3、使用GO构建项目
# 在 httpx-static 根目录下 的 httpx-static目录下执行
go build -mod=vendor .

可以生成:

 

注意:这里有两个证书的地址,取决于你在那里生成的证书,我这里证书在可执行脚本 httpx-static 的同级

1、这里你可以看到一些指令执行的帮助信息和参数解释

# 此时 httpx-static 可执行文件生成
./httpx-static

 

2、测试指令,运行成功后直接浏览器访问你的ip地址就可以看到

由于是自签证书,所以需要点击高级,继续访问。如果你有自己的域名和对应的SSL证书那你可以去根据自己的配置,此处以没有为例

# 80 ---> 443 这里是通过访问自带的页面查看代理是否成功
./httpx-static -t 80 -s 443 -k server.key -c server.crt -r ./html
# 访问测试:
ip
https://ip

image-20240628100640587

3、初步代理,发现无法进行推流:

提示:这里的参数 -r 后面跟的是你自己的srs的安装路径,-p参数 这里都是这样 把你自己ip对应的这些请求代理

# 代理 SRS 页面:https://你的IP/ 访问地址,这里的ip是安装SRS服务器的IP
./httpx-static -t 80 -s 443 -k server.key -c server.crt -r /usr/local/srs/srs/trunk/research

 

4、最终版本(注意替换你自己的ip地址):

提示:这里的参数 -r 后面跟的是你自己的srs的安装路径,-p参数 这里都是这样 把你自己ip对应的这些请求代理

# 发现还是无法推流,是需要把推流地址也进行代理
./httpx-static -t 80 -s 443 -k server.key -c server.crt -r /usr/local/srs/srs/trunk/research/ -p http://你的IP:1985/rtc/

 

 

三、最终效果

1、使用rtc.conf启动SRS
# 我的执行地址:/usr/local/srs/srs/trunk
./objs/srs -c conf/rtc.conf

 

2、开启代理
# 我的执行地址:/usr/local/srs/httpx-static/httpx-static/httpx-static
./httpx-static -t 80 -s 443 -k server.key -c server.crt -r /usr/local/srs/srs/trunk/research/ -p http://你的IP:1985/rtc/

 

3、访问地址

提示:这里的使用一个推流,可以多个播放,但是并不是双向的,但是WenRTC是可以实现一对一视频通话的。

# 开两个窗口一个用于推流,一个用于播放。你也可以给另外的人打开或者使用手机打开地址
https://你的ip/players/srs_player.html

 

这是最终的一个测试效果:

image-20240628103317563

 

 

四、总结

B站参考视频:

原作者视频,我只是抽出了里面的部分,这里就有关于webrtc的配置和一些问题(感谢作者)

https://www.bilibili.com/video/BV1M54y1z7jo/?spm_id_from=333.788&vd_source=3482c0c40f6a05b99c21075cb9535764

关于WebRTC一对一视频通话参考视频(感谢作者) https://www.bilibili.com/video/BV1D14y1W7qp/?spm_id_from=333.337.search-card.all.click&vd_source=3482c0c40f6a05b99c21075cb9535764

 

 

参考文档:

SRS官方文档:

https://ossrs.net/lts/zh-cn/

WebRTC中文文档:

https://webrtc.p2hp.com/

 

展望

我们可以使用WebRTC实现简单的一对一视频通话,这个可以用于一些IM即时通讯系统中,在聊天的基础上进行一对一视频通话。

 

这里我们使用的是官方提供的页面进行推拉流,如果我们可以自己写一个页面来进行推拉流,并结合进项目^-^。而且可以推本机屏幕的流实现一个屏幕共享的简易直播,这里就需要去研究一SRS所提供的接口了,还要去研究一下SRS的部分源码,推荐拉下源码使用CLion打开,参考前端页面路径:srs\trunk\research\players

 

测试成功的小伙伴可以感受的这个的延迟比起RTMPHLSHTTP-FLV的延迟效果要好很多,然后就是对于播放器来说,RTMP的播放器+_+,相比起来HLS和HTTP-FLV都支持http协议,所以播放器还是好点的。就是HLS延迟感人,适用于点播。而HTTP-FLV推荐使用B站开源播放器flv.jdhttps://github.com/bilibili/flv.js 而这个flv是可以较快搭建一个简易的Web直播的延迟大概在4-5秒左右。比如:使用nginx的 nginx-http-flv-module 模块配置一个流媒体服务器,再使用ffmpeg本机摄像头推流,然后前端使用flv.js进行播放。当然你也可以使用SRS的flv的播放地址。更多请参考文档和找好文章和教学。

 

最后,到这里结束了吗?不不不,结合前面我说过的YOLOv5,那么可以碰撞什么火花呢?YOLO 启动!

提示:WebRTC的流貌似不能直接获取,但是SRS其实也提供了一些rtc和rtmp的转化,这里我只能以默认的ffmpeg推流展示一下:

# 启动
./objs/srs -c conf/rtc.conf
# 推流
ffmpeg -re -i ./doc/source.flv -c copy -f flv rtmp://localhost/live/livestream
# YOLO运行
python detect.py --weights yolov5s.pt --source http://你的IP:8080/live/livestream.flv

 

image-20240628111258852

 

看到这里你懂了吧,我们可以在实现简单直播的基础上使用类似的YOLO的深度学习框架检测实时流,如果训练一些常见的违规模型,就可以实现一些简单的自动违规处理,但其中涉及的业务化和细节处理太过+_+,有兴趣的小伙伴可以研究,开源万岁^-^

本文作者:编程初学者求大佬指点

本文链接:https://www.cnblogs.com/fragmentary/p/18272851

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   如此而已~~~  阅读(729)  评论(0编辑  收藏  举报
//雪花飘落效果
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起