前言

初入公司,调研SRS搭建流媒体服务器,实现直播、点播功能,并搭建基于SRS的流媒体服务器集群。

我们知道,SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。SRS提供了丰富的接入方案将RTMP流接入SRS,包括推送RTMP到SRS、推送RTSP/UDP/FLV到SRS、拉取流到SRS。SRS还支持将接入的RTMP流进行各种变换,譬如将RTMP流转码、转发给其他服务器、转封装成HTTP-FLV流、转封装成HLS、转封装成HDS、录制成FLV。SRS包含支持大规模集群如CDN业务的关键特性,譬如RTMP多级集群、VHOST虚拟服务器、无中断服务Reload、HTTP-FLV集群。此外,SRS还提供丰富的应用接口,包括HTTP回调、安全策略Security、HTTP API接口、RTMP测速。

互联网上直播现在主要有两种分发方式:HLS与RTMP,其中还有点播中运用较为频繁的HTTP协议。对比以下互联网上用的流媒体分发方式:

HLS:apple的HLS,支持点播和直播。

HTTP:即HTTP stream,各家自己定义的http流,应用于国内点播视频网站。

RTMP:直播应用,对实时性有一定要求,以PC为主。

RTMP本质是流协议,主要优点有1.实时性高,RTMP的实时性在3秒之内,2.支持加密,RTMPE与RTMPS为其加密协议,3.稳定性高,做CDN或者大中型集群分发,选择稳定性高的协议一定是必要的。RTMP的缺点是1.协议复杂,协议复杂带来的后果是在研发,扩展,维护等方面成本相对会高。2.Cache麻烦,流协议做缓存不方便,所以,直接用RTMP协议做点播实现起来很麻烦。HTTP本质是文件分发,主要优势有1.性能很高。分发的量特别大,没有实时性的要求,譬如点播,那么HTTP是最好的选择。劣势是实时性差,原生支持不好,尤其移动端对于HTTP的支持不是很完善。HLS的优势是性能高,原生支持很好,尤其对于移动端的支持。劣势是实时性差。

应用方式具体来说:

编码器输出RTMP协议。

流媒体系统接入使用RTMP协议。

流媒体系统内部直播分发使用RTMP。

PC+直播+实时性要求高:使用flash播放RTMP。

PC+直播+没有实时性要求:使用RTMP或者HLS均可。

PC+点播:使用HTTP或者HLS。

Apple IOS/OSX:都使用HLS(实时性要求高得自己解析RTMP,或者使用外部库,譬如https://www.vitamio.org)

Andorid:和IOS一样,不过可以确定的是可以自己开发支持RTMP。

协议的比较见下表:

分发

平台

协议

公司

说明

RTMP

Windows Flash

RTMP

Adobe

主流的低延时分发方式,
Adobe对RTMP是Flash原生支持方式,
FMS(Adobe Media Server前身),
就是Flash Media Server的简写,可见Flash播放RTMP是多么“原生”,
就像浏览器打开http网页一样“原生”,
经测试,Flash播放RTMP流可以10天以上不间断播放。

HLS

Apple/
Android

HTTP

Apple/
Google

延时一个切片以上(一般10秒以上),
Apple平台上HLS的效果比PC的RTMP还要好,
而且Apple所有设备都支持,
Android最初不支持HLS,后来也支持了,
但测试发现支持得还不如Apple,
不过观看是没有问题,稳定性稍差,
所以有些公司专门做Android上的流媒体播放器。

对于利用SRS做流媒体服务器集群,可以借用EasyDSS的方案,一台SRS接受直播端的推流并转发给其他服务器。

SRS流媒体服务器搭建

1.源码下载:git clone https://git.oschina.net/winlinvip/srs.oschina.git && cd srs.oschina && git remote set-url origin https://github.com/ossrs/srs.git

2.分支切换,有些功能只有SRS2.0有,SRS1.0没有,请注意看wiki是v1还是v2的。

如果是1.0的功能,更新代码后要改变到1.0分支:

git pull && git checkout 1.0release

如果是2.0的功能,更新代码后要改变到2.0分支:

git pull && git checkout 2.0release

如果是3.0的功能,更新代码后要改变到3.0分支(没有单独的3.0release分支就是develop):

git pull && git checkout develop

3.编译。下载文件名为srs.oschaina,如图所示:

进入该目录下,找见trunk目录,进入trunk目录。

输入命令./configure,配置完成后,输入make && make install命令,等到编译完成。

4.配置文件,配置文件是:conf/rtmp.conf,默认非常精简只有下面这些:

只需上面这几行配置就可以完整的实现rtmp流媒体服务器,其中listen默认为1935,是rtmp流推送的默认端口;max_connections值最大连接;daemon是否为守护进行在后台执行,然后vhost为虚拟主机可以隔离客户,这个默认不用配置即可.

然后可以执行命令启动rtmp服务: ./objs/srs -c conf/rtmp.conf ,启动之后就可以向服务推流了,另外srs也提供了完整的http服务用作srs服务器使用,具体配置文件在conf/srs.conf,其中多了http部分的配置,其中用于播放测试的配置如下,也可以添加到rtmp.conf配置中:

http_server {enabled         on;listen          8080;dir             ./objs/nginx/html;}

添加配置完成后,重启srs服务器然后可以访问页面,我这里地址是:http://10.0.4.181:8080,ip和端口要改成实际配置的,访问会跳转到默认页面。注意:我在配置的时候,端口号1935与8080都被占用了,我修改了端口号,1935改为1930,8080改为8081。启动srs服务器,页面如下图所示:

5.安装FFmpeg:

1.git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

2.cd ffmpeg

3../configure && make

在第三步配置的时候,我遇到了问题:

yasm/nasm not found or too old. Use –disable-yasm for a crippled build.

If you think configure made a mistake, make sure you are using the latest

version from Git. If the latest version fails, report the problem to the

ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.

Include the log file “config.log” produced by configure as this will help

solve the problem.

解决办法是:https://java-er.com/blog/linux-installffmpeg/,这是在Linux上安装FFmpeg的教程。vi

6.进行FFmpeg进行推流,进入FFmpeg目录,输入命令./ffmpeg -re -i /home/k8s/srs.oschina/trunk/doc/source.200kbps.768x320.flv -vcodec copy -acodec copy -f flv rtmp://10.0.4.181:1930/live/livestream,其中,rtmp://10.0.4.181:1930/live/livestream为rtmp地址,其具体解释见链接https://github.com/ossrs/srs/wiki/v1_CN_RtmpUrlVhost。推流成功显示如下图:

7.播放推流视频。不知道什么原因,在编写本文档时候,SRS网页中自带的播放器不能播放视频,可能是配置时候出了问题,我下载了VLC播放器,VLC播放器下载安装教程可自行百度。下载安装完成后,打开,播放器如图所示:

点击媒体按钮,然后点击打开网络串流,输入rtmp协议,点击播放,即可播放推流视频。

8.使用obs推流,下载obs推流客户端,下载安装完成,打开界面如下图:

具体如何推流教程网上可以百度,这里不做赘述,推流完成后,效果如下图:

利用SRS搭建直播服务器相关推荐

  1. 利用自己的电脑设置web服务器建网站_win7系统篇,win7系统利用iis搭建web服务器实现信息浏览资源共享的操作方法...

    很多小伙伴都遇到过对win7系统利用iis搭建web服务器实现信息浏览资源共享进行设置的困惑吧,一些朋友看过网上对win7系统利用iis搭建web服务器实现信息浏览资源共享设置的零散处理方法,并没有完 ...

  2. centos下利用httpd搭建http服务器方法

    centos下利用httpd搭建http服务器方法 1. 解决的问题 在开发测试过程中,分析图片任务需要将图片保存在服务器端,通过url来访问和下载该图片,这就需要使用一台图片服务器,但常常遇到图片服 ...

  3. 如何利用ewomail搭建邮件服务器

    如何利用ewomail搭建邮件服务器 首先你应该做好如下准备 1.需要一台全新干净的服务器,就是不需要安装任何东西的服务器,mysql,apache都不要.不然会安装不成功.切记!!! 2.查看官方文 ...

  4. 使用Nginx搭建直播服务器(nginx-rtmp-module)

    使用Nginx搭建直播服务器 1 简介 2 RTMP Module 3 gcc 4 OpenSSL 5 g++ 6 pcre 7 zlib 8 安装nginx 9 配置文件 10 systemctl ...

  5. Qt显示视频流——nginx+rtmp搭建直播服务器(二)

    上次介绍的是使用ffmpeg推流,这次介绍的是使用nginx + rtmp搭建直播服务器. 环境:ubuntu 16.04 一. 安装nginx 和 rtmp模块 1. 下载安装 nginx 和 ng ...

  6. win10系统如何配置web服务器,win10系统利用iis搭建web服务器的设置教程

    有关win10系统利用iis搭建web服务器的操作方法想必大家有所耳闻.但是能够对win10系统利用iis搭建web服务器进行实际操作的人却不多.其实解决win10系统利用iis搭建web服务器的问题 ...

  7. 使用SRS搭建流服务器使用ffmpeg推流用VLC拉流

    目录 一.背景 二.下载srs 三.编译srs 四.编写srs配置文件 五.启动srs 六.使用ffmpeg推流 七.使用VLC拉流观看 八.在树莓派上推一下摄像头的视频流用VLC拉流看一下延迟 一. ...

  8. SRS搭建流媒体服务器

    流媒体服务器搭建 目录 流媒体服务器搭建 1.安装 2.常用设置 HTTPCallback Config SRS HTTP callback events(回调事件) 3.回调测试 SRS HTTP ...

  9. Centos7.6利用vsftpd搭建FTP服务器详细教程

    Centos7搭建FTP服务器 目录 Centos7搭建FTP服务器 一.关闭防火墙 二.安装vsftpd并启动服务 1.安装vsftpd 2.启动服务 三.编辑配置 四.新建用户并设置密码 1.新建 ...

最新文章

  1. Zookeeper和Redis实现分布式锁,附我的可靠性分析
  2. Android 侧划菜单
  3. 命令行是你的至交好友
  4. 如何用DW设计界面 结合 VS设计后台代码
  5. MySQL运维知识点_mysql运维必备知识点(转载至其他作者)
  6. php如何随机显示图片,php中随机显示图片的函数代码_php
  7. 开源云操作系统:找到适合自己的应用模式
  8. HDU 3695 Computer Virus on Planet Pandora (AC自己主动机)
  9. Java表示语言(文化)代码及国家地区对照表
  10. tkinter教程——toplevel
  11. Ubuntu18.04 显卡驱动安装(GTX1060)正确步骤
  12. 常规操作系统Windows系统淋雨系统Unix系统netware等系统介绍分析
  13. 什么是软件即服务(SaaS) ? SaaS新手入门指南
  14. 粒子滤波的通俗解释,傻子的搜寻策略--我的理解_拔剑-浆糊的传说_新浪博客
  15. 【小程序】报getUserProfile:fail can only be invoked by user TAP gesture.
  16. 计算机无法设置双屏显示,win10无法设置双屏显示怎么办_win10系统设置双屏显示失败如何解决...
  17. Discourse 调整使用不同的表情符号
  18. 大学我都是自学走来的,这些私藏的实用工具/学习网站我贡献出来了,建议收藏精品推荐
  19. Integer 用法
  20. Continued Fraction

热门文章

  1. UE4 让材质的UV动起来
  2. VMware虚拟机如何开启雷电模拟器的VT?
  3. LeetCode739. Daily Temperatures
  4. 【案例】用 turtle 绘制一个月饼
  5. libuv 的Processes
  6. 110115-07-6,Ac-LLM-CHOCalpain 抑制剂
  7. 高尔顿与回归分析的起源
  8. 小米嵌入式研发工程师校招面试总结
  9. 微电子封装技术未来发展面临的问题与挑战
  10. ANDROID内存优化(大汇总——全)