一、背景

搭建流媒体服务的方式一般会采用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流媒体服务的更多相关文章

  1. win10下通过编译源码方式在chrome中成功安装react-devtools开发工具插件

    win10下通过编译源码方式在chrome中成功安装react-devtools开发工具插件   1.去git上下载react-devtools文件到本地,https://github.com/fac ...

  2. spring5.0源码项目搭建

    一.准备相应环境以及下载spring项目 Ps:此处只讲解安装gradle 1.JDK安装 2.Idea安装 3.gradle安装 Gradle下载路径:https://services.gradle ...

  3. 第6章 RTX 操作系统源码方式移植

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章教程为大家将介绍 RTX 操作系统源码方式移植,移植工作比较简单,只需要用户添加需要的源码文件即可, ...

  4. php中foreach源码分析(编译原理)

    php中foreach源码分析(编译原理) 一.总结 编译原理(lex and yacc)的知识 二.php中foreach源码分析 foreach是PHP中很常用的一个用作数组循环的控制语句.因为它 ...

  5. vue打包时,assets目录 和static目录下文件的处理区别(nodeModule中插件源码修改后,打包后的文件应放在static目录)

    为了回答这个问题,我们首先需要了解Webpack如何处理静态资产.在 *.vue 组件中,所有模板和CSS都会被 vue-html-loader 及 css-loader 解析,并查找资源URL.例如 ...

  6. 源码方式安装 lrzsz库

    源码方式安装 lrzsz库:https://www.cnblogs.com/cocoajin/p/11731787.html 我们都知道安装了lrzsz工具的linux系统环境,在shell里可以非常 ...

  7. Linux上生产环境源码方式安装配置postgresql12

    1.Linux上源码方式安装postgresql12 01.准备操作系统环境 echo "192.168.1.61 tsepg61" >> /etc/hosts mou ...

  8. 手把手教你实现栈以及C#中Stack源码分析

    定义 栈又名堆栈,是一种操作受限的线性表,仅能在表尾进行插入和删除操作. 它的特点是先进后出,就好比我们往桶里面放盘子,放的时候都是从下往上一个一个放(入栈),取的时候只能从上往下一个一个取(出栈), ...

  9. go 中 select 源码阅读

    深入了解下 go 中的 select 前言 1.栗子一 2.栗子二 3.栗子三 看下源码实现 1.不存在 case 2.select 中仅存在一个 case 3.select 中存在两个 case,其 ...

随机推荐

  1. 2018-8-10-WPF-使用-Direct2D1-画图-绘制基本图形

    title author date CreateTime categories WPF 使用 Direct2D1 画图 绘制基本图形 lindexi 2018-08-10 19:16:53 +0800 ...

  2. ASCII part of UTF8

    UTF8 所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码. UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1 ...

  3. 幂等 zuul的Filter实现

    通过zuul的过滤器 filter实现 //app 幂等过滤 @SuppressWarnings("all") @Order(Ordered.HIGHEST_PRECEDENCE) ...

  4. The linux command之环境

    一.环境 shell在环境中存储了两种数据类型:环境变量(environment variables )shell变量(shell variables).在shell中这两种变量基本没有什么不同. 此 ...

  5. MYSQL查询查找重复的电子邮箱

    编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱. 示例: +----+---------+| Id | Email |+----+---------+| 1 | a@b.com | ...

  6. js 阻止事件

    event.stopPropagation();//阻止事件冒泡 ,可阻止父类事件的发生 event.preventDefault();//阻止默认行为 如A标签

  7. GoDaddy商务主机建站具有的优势

    GoDaddy是世界第一域名注册服务商,近年来凭借着优异的性能受到国内站长的欢迎,其中Godaddy商务主机得到了很多站长的喜爱,那么为什么GoDaddy商务主机可以受到那么多站长的喜爱呢?下面就带大 ...

  8. soj114 中位数

    题意:给你一个长度为2n-1的数组A,设Bi是A的1~2i-1的中位数.问打乱A,有多少种不同的B序列? 标程: #include<bits/stdc++.h> using namespa ...

  9. Java 多线程 - 死锁deadlock产生原因+避免方法

    ref: java中产生死锁的原因及如何避免 https://blog.csdn.net/m0_38126177/article/details/78587845 java如何避免死锁 http:// ...

  10. SQL Server ODBC 解决方案

    { } { }