docker中使用源码方式搭建SRS流媒体服务
一、背景
搭建流媒体服务的方式一般会采用nginx+rtmp和srs服务两种,前者是nginx加上插件所用,而后者是专门为了为了流媒体而生,在这一节中我们将从头搭建srs流媒体服务
二. 运行环境
为了此服务后期部署到生产环境中,笔者采用docker方式来搭建此服务,docker目前属于基础性软件了,在本文中就不再细述如何安装,大家可以去www.docker.com下载安装包安装即可;一般正式的生产环境中我们通常使用Linux系统作为服务器,所以我本文中同样使用了Linux系统,不过我选择了我比较喜欢的Ubuntu系统来搭建,其他Linux系统搭建流程基本一致。
2.1 docker容器
我们首先需要运行一个Ubuntu的容器,在运行容器之前,我们需要想好运行容器的一些参数,比如说我们需要搭建rtmp服务,rtmp默认端口是1935,这个时候我们就需要将此端口映射出去;再比如说安装nginx后需要进行验证Nginx是否安装完成,需要开放一个http端口,那么同样需要映射出去,但为了防止和宿主机的80端口产生冲突,这里我们使用8081端口替代80端口;最后服务搭建完成了,还需要播放视频,因此需要将视频文件拷贝到容器中,这时候需要挂载一个目录将视频文件放到容器中去,因此docker容器运行命令如下所示
docker run --name srs -v /Users/song/files:/root/files -d -i -p 1935:1935 ubuntu:18.04 && docker ps
命令很执行完成之后,docker返回结果如下图所示

在上图中中可以看到已经有一个容器运行了,接着我们需要进入容器安装nginx和rtmp模块,进入容器命令如下所示
docker exec -it srs bash
命令执行完成之后,返回信息如下图所示

在上图中从光标位置的左侧可以看到已经显示了root账户名称,说明已经进入容器成功;
2.2 国内加速源
docker的Ubuntu镜像apt软件源默认使用官方域名,这个域名在国内访问非常慢,为了后续安装速度能够更快,我们将apt的软件源更换成阿里云源的地址,执行命令如下所示
echo 'deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
' > /etc/apt/sources.list && cat /etc/apt/sources.list
命令执行之后,返回的信息如下图所示

从上图中可以看到已经执行成功,已经使用阿里云的软件源替代了默认的软件源;
2.3 更新软件源列表
接下来我们更新一下本地的软件源信息,执行命令如下所示
apt update
命令执行之后,返回的信息如下图所示

从上图中可以看到已经从阿里云中更新了软件源信息,更新速度也非常快,到此我们已经完成运行环境的基础准备。
三、服务搭建
在搭建SRS服务过程中,需要先解决依赖,然后安装SRS服务,安装完成之后需要配置服务
3.1 安装依赖
因为我们采用源码编译,在编译过程中会依赖一些其他软件,所以我们需要提前将这些软件编译好,安装依赖我们直接采用apt安装,如下命令所示
apt install -y git gcc g++ unzip make python
命令执行后,返回的信息如下图所示

在上图中我们可以看到上面的依赖已经安装完成,接着我们通过Git下载最新的srs源码
3.2 安装SRS
srs官方把源码托管在GitHub中,国内访问GitHub相对较慢,这里我通过码云复制了一个出来,下载srs执行命令如下所示
git clone https://gitee.com/songboy/srs.git && ls srs
命令执行后,返回的信息如下图所示

在上图中我们可以看到源码已经克隆完成,并展示了srs项目的目录结构,在项目中有一个trunk的文件夹,源代码都在这个里面,我们通过cd命令进去并查看目录,执行命令如下所示
cd srs/trunk/ && ls
命令执行后,返回的信息如下图所示

在上图中我们可以看到configure文件,这个文件是为了让一个程序能够在各种不同类型的机器上运行而设计的,在使用make编译源代码之前,configure会根据自己所依赖的库而在目标机器上进行匹配,我们执行如下命令便可以编译
./configure && make
命令执行完成后,返回的信息如下图所示

在上图中我们可以看到提示编译已经完成,并给出了一个启动命令的提示
3.3 启动服务
在启动命令中有一个配置文件,我们可以通过cat命令查看一下配置文件里面的具体内容,执行命令如下所示
cat conf/srs.conf
命令执行后,返回的信息如下图所示

在上图中我们可以看到监听的端口,以及日志文件存放位置等信息,这里我们就是要默认值即可,执行启动命令如下所示
./objs/srs -c conf/srs.conf
命令执行后,返回的信息如下图所示

在上图中我们可以看到日志文件的输出信息,此时程序以及在后台启动了。
四、服务验证
我们可以使用OBS进行一个推流测试;docker运行的容器就在我本地,因此这里我使用的推流地址如下
rtmp://127.0.0.1/live/tangqingsong
4.1 推流测试
启动OBS,然后打开设置,找到推流项;服务选择自定义,然后将上面的地址填写进去,如下图所示

填写完推流地址之后,我们点击确定按钮,然后回到OBS的主界面,点击开始推流按钮,就会开始向SRS推流,如下图所示

在上图中我们可以看到已经在推流当中了,下方显示占用CPU资源很高
4.2 拉流测试
接着我们再使用VLC播放器进行拉流测试,拉流地址和推流地址是一样的,拉流效果如下所示

在上图中我们可以看到VLC已经播放成功
作者:汤青松
日期:2019-12-13
docker中使用源码方式搭建SRS流媒体服务的更多相关文章
- win10下通过编译源码方式在chrome中成功安装react-devtools开发工具插件
win10下通过编译源码方式在chrome中成功安装react-devtools开发工具插件 1.去git上下载react-devtools文件到本地,https://github.com/fac ...
- spring5.0源码项目搭建
一.准备相应环境以及下载spring项目 Ps:此处只讲解安装gradle 1.JDK安装 2.Idea安装 3.gradle安装 Gradle下载路径:https://services.gradle ...
- 第6章 RTX 操作系统源码方式移植
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章教程为大家将介绍 RTX 操作系统源码方式移植,移植工作比较简单,只需要用户添加需要的源码文件即可, ...
- php中foreach源码分析(编译原理)
php中foreach源码分析(编译原理) 一.总结 编译原理(lex and yacc)的知识 二.php中foreach源码分析 foreach是PHP中很常用的一个用作数组循环的控制语句.因为它 ...
- vue打包时,assets目录 和static目录下文件的处理区别(nodeModule中插件源码修改后,打包后的文件应放在static目录)
为了回答这个问题,我们首先需要了解Webpack如何处理静态资产.在 *.vue 组件中,所有模板和CSS都会被 vue-html-loader 及 css-loader 解析,并查找资源URL.例如 ...
- 源码方式安装 lrzsz库
源码方式安装 lrzsz库:https://www.cnblogs.com/cocoajin/p/11731787.html 我们都知道安装了lrzsz工具的linux系统环境,在shell里可以非常 ...
- Linux上生产环境源码方式安装配置postgresql12
1.Linux上源码方式安装postgresql12 01.准备操作系统环境 echo "192.168.1.61 tsepg61" >> /etc/hosts mou ...
- 手把手教你实现栈以及C#中Stack源码分析
定义 栈又名堆栈,是一种操作受限的线性表,仅能在表尾进行插入和删除操作. 它的特点是先进后出,就好比我们往桶里面放盘子,放的时候都是从下往上一个一个放(入栈),取的时候只能从上往下一个一个取(出栈), ...
- go 中 select 源码阅读
深入了解下 go 中的 select 前言 1.栗子一 2.栗子二 3.栗子三 看下源码实现 1.不存在 case 2.select 中仅存在一个 case 3.select 中存在两个 case,其 ...
随机推荐
- HTML语法检测
网络上收集到的资源: HTML在线编辑//////////////////////////////////////////http://tool.oschina.net/codeformat/ 文本框 ...
- html编写的日历
1.html (1) <html> <head> <meta http-equiv="Content-Type" content="text ...
- JS去除字符串拼接末尾的符号(逗号)
前言:在JS中,有时需要进行字符串的拼接,而拼接的字符串以某种符号分隔,在拼接好的字符串末尾会多出一个分隔符,这时我们可以采取以下几种方法来去除末尾的分隔符. 方法一:使用substring() 和 ...
- 从别人git下载项目下来然后运行
1点击clone or download 2.自由选择 3.拉到你想放的位置,我是放到桌面上的 4. cmd 打开,进入你 的下载到桌面的项目 5. # install dependencies n ...
- Oracle大数据SQL语句优化
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 视频云肖长杰:视频AI科技助力短视频生态
人工智能技术是当今炙手可热的技术领域,它在制造.家居.零售.交通.安防等行业的应用已经是大势所趋.在本月云栖Techday音视频技术沙龙中,阿里云视频云产品专家肖长杰为我们分享了一些AI技术在视频中应 ...
- thinkphp 静态路由
静态路由其实属于规则路由的静态简化版(又称为URL映射),路由定义中不包含动态参数,静态路由不需要遍历路由规则而是直接定位,因此效率较高,但作用也有限. 如果我们定义了下面的静态路由 'URL_ROU ...
- 0920CSP-S模拟测试赛后总结
依旧挂了. 这次出题人十分良心.白送了180分……于是我没有拿到.130分rank43滚粗了. T1是道sbdp.然而我死想哈希.然后就死在哈希上了. 我简直是个傻子.之前考了几次字符串的题可以用哈希 ...
- 概率期望——cf round362 div1
给定n个数,求i的位置的期望 那么反向考虑,j!=i排在i前面的概率是0.5,那么对i的位置的期望贡献就是1*0.5 这题就是拓展应用一下 #include<bits/stdc++.h> ...
- spring boot项目开发中遇到问题,持续更新
1.JPA中EntityManager不能执行建表语句,提示要加事务Error:javax.persistence.TransactionRequiredException: Executing an ...