0 SRS 4.0流媒体服务器入门系列

结合SRS官方Wiki以及本人对SRS的理解,推出《SRS 4.0流媒体服务器入门系列》,包括内容:

  1. SRS 4.0 开发环境搭建
  2. SRS 4.0 配置支持WebRTC推拉流
  3. SRS 4.0 RTMP推拉流转发原理,包括延迟分析
  4. SRS 4.0 支持WebRTC一对一通话,包括信令原理讲解
  5. SRS 4.0 支持WebRTC多人通话,包括信令原理讲解
  6. SRS 4.0 RTMP to WebRTC原理分析
  7. SRS 4.0 WebRTC to RTMP 原理分析
  8. SRS 4.0 配置支持GB28181推流

0 SRS 4.0流媒体服务器入门系列

结合SRS官方Wiki以及本人对SRS的理解,推出《SRS 4.0流媒体服务器入门系列》,包括内容:

  1. SRS 4.0 开发环境搭建
  2. SRS 4.0 配置支持WebRTC推拉流
  3. SRS 4.0 RTMP推拉流转发原理,包括延迟分析
  4. SRS 4.0 支持WebRTC一对一通话,包括信令原理讲解
  5. SRS 4.0 支持WebRTC多人通话,包括信令原理讲解
  6. SRS 4.0 RTMP to WebRTC原理分析
  7. SRS 4.0 WebRTC to RTMP 原理分析
  8. SRS 4.0 配置支持GB28181推流

文章相关视频讲解,文档点击 学习资料 获取

云服务器:阿里云Ubuntu 16.04

服务器:SRS(Simple Realtime Server,支持RTMP、HTTP-FLV、HLS、WebRTC)

推流端:ffmpeg + OBS

拉流端:ffplay +VLC + srs播放器

1 安装和测试SRS流媒体服务器

1.1 安装SRS流媒体服务器

SRS官网:http://www.ossrs.net/

github源:https://github.com/ossrs/srs.git

码云源:https://gitee.com/ossrs/srs.git (如果GitHub较慢可以使用码云的源)

选择当前最新的release版本4.0

第一步,获取SRS

git clone https://github.com/ossrs/srs.git srs.4.0

cd srs.4.0

#直接使用当前最新的4.0release版本,写该文档时该branch最新的的tag是v4.0.98

cd trunk

第二步,编译SRS。详细参考Build

./configure --gb28181=on  && make

配置支持常见的协议:RTMP/HLS/RTMP/GB28181/WebRTC

更多的配置信息参考可以用help命令:./configure --help

第三步,查看SRS配置文件。详细参考RTMP分发

配置文件在trunk/conf目录,服务器启动时指定该配置文件(srs的conf文件夹有该文件)。

我们这里先使用srs.conf,支持rtmp推流,支持rtmp、hls、http-flv拉流。

# main config for srs.# @see full.conf for detail config.

listen              1935;

max_connections     1000;

srs_log_tank        file;

srs_log_file        ./objs/srs.log;

daemon              on;

http_api {

enabled         on;

listen          1985;

}

http_server {

enabled         on;

listen          8080;

dir             ./objs/nginx/html;

}

vhost __defaultVhost__ {

hls {

enabled         on;

}

http_remux {

enabled     on;

mount       [vhost]/[app]/[stream].flv;

}

}

对应配置的解释可以参考full.conf文件

这里的端口

  • 1935端口对应的是rtmp服务
  • 1985对应的是http api服务,进一步学习:https://github.com/ossrs/srs/wiki/v4_CN_HTTPApi
  • 8080对应的是http-flv、hls的服务器端口

PS:云服务器一定要在后台开放对应的端口。

音视频高级开发系统学习链接:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发-学习视频

第四步,启动SRS。

./objs/srs -c conf/srs.conf

第五步,查看日志

tail -f ./objs/srs.log

1.2 查看控制台

在浏览器输入

http://114.215.169.66:1985/console/ng_index.html

我们就可以通过Web查看SRS相关的状态信息。

如果有客户端推流

对应的api(https://github.com/ossrs/srs/wiki/v4_CN_HTTPApi),比如源码里面对应的:

1.3 需要重点阅读的官方Wiki

如官方的README.md所示:

Fast index for Wikis:

  • How to deliver RTMP streaming?(CN,EN)
  • How to build RTMP Edge-Cluster?(CN,EN)
  • How to build RTMP Origin-Cluster?(CN,EN)
  • How to deliver HTTP-FLV streaming?(CN,EN)
  • How to deliver HLS streaming?(CN,EN)
  • How to deliver low-latency streaming?(CN,EN)
  • How to use WebRTC? (CN,EN)

srs作者提供了详细的中英文参考文档,配置问题基本上都可以从对应的文档可以找到答案,大家能查文档的尽量去查文档。

1.4 测试SRS流媒体服务器

1.4.1 使用FFmpeg推流

ffmpeg -re -i  time.flv  -vcodec copy -acodec copy  -f flv -y rtmp://114.215.169.66/live/livestream

注: 上述命令中的flv完整路径,以及srs server ip,大家根据情况自行替换为实际值。另外:默认情况下srs的rtmp采用1935端口,如果该端口被占用或修改了srs.conf中的端口,注意根据情况调整;防火墙如果开了,也要检测下1935是否允许访问。

对应的RTMP/HLS/HTTP-FLV拉流地址

  • RTMP流地址为:rtmp://114.215.169.66/live/livestream
  • HTTP FLV: http://114.215.169.66:8080/live/livestream.flv
  • HLS流地址为:http://114.215.169.66:8080/live/livestream.m3u8

1.4.2 使用ffplay播放

ffplay rtmp://114.215.169.66/live/livestream
ffplay http://114.215.169.66:8080/live/livestream.flv
ffplay http://114.215.169.66:8080/live/livestream.m3u8

1.4.3 使用在线srs播放器拉流

在线SRS播放器播放, 由于RTMP已经被禁用了,请使用HTTP-FLV链接。

  • http://114.215.169.66:8080/players/srs_player.html (改成自己ip地址)
  • http://ossrs.net/srs.release/trunk/research/players/srs_player.html (官方提供的连接)

2 使用OBS推流

ffmpeg的命令行方式不太友好,推荐使用主流的OBS开源推流软件,可从官网https://obsproject.com/ 下载最新版本,目前很多网络主播都是用它做直播。该软件支持本地视频文件以及摄像头推流。

或者使用:https://pc.qq.com/detail/4/detail_23604.html 去下载。

2.1 文件推流

先添加一个:“媒体源”

然后新建一个名称(随便输入)

选择本机视频文件

接下来是关键的部分,进入设置:

在串流->服务器这里,输入srs的地址:rtmp://114.215.169.66:1935/live (注意这里不要带livestream), 然后在串流密钥这里,才是输入livestream (地址要注意换成自己的ip地址,局域网ip就用局域网地址,云服务器就用公网地址)

设置好以后,就可以点击“开始推流”了。如果顺利,下面的状态栏,会显示一些实时数据:

https://pic2.zhimg.com/80/v2-61866191d9da06396c68dc95d75298f1_720w.webp

注意:OBS进行推流占用率比较高,原因在于obs在推流时对源文件进行了解码再编码的操作。

2.2 摄像头推流

跟上面的其实差不多,区别只是添加“视频捕捉设备”

然后选择本机检测到的摄像头设备(比如:下图为Dell笔记本自带的Integrated Webcam)

接下来的操作就一样了:

2.3 更多设置

参见:OBS 推流 https://cloud.tencent.com/document/product/267/32726

3 补充

修改ffplay的缓存,降低延迟

(1)码流分析时间设置,单位为微秒

ffplay  -i rtmp://114.215.169.66/live/livestream -analyzeduration 500000

ffplay  -i rtmp://114.215.169.66/live/livestream -analyzeduration 10000

(2)减少缓冲

ffplay  -i rtmp://114.215.169.66/live/livestream -fflags nobuffer

音视频开发-SRS 4.0流媒体服务器系列相关推荐

  1. 音视频开发-SRS 4.0开发环境搭建丨webrtc丨FFmpeg丨SRS流媒体服务器开发

    SRS 4.0开发环境搭建 视频讲解如下,点击观看: 音视频开发-SRS 4.0开发环境搭建丨webrtc丨FFmpeg丨SRS流媒体服务器开发 音视频高级开发学习学习资料链接:FFmpeg/WebR ...

  2. 音视频开发(7)---流媒体服务器原理和架构解析

    流媒体服务器原理和架构解析 多媒体数据文件 一个完整的多媒体文件是由音频和视频两部分组成的,H264.Xvid等就是视频编码格式,MP3.AAC等就是音频编码格式,字幕文件只是附加文件.目前大部分的播 ...

  3. (音视频开发)WebRTC进阶流媒体服务器开发-多人互动架构

    一:多人互动架构方案 (一)WebRTC回顾,两层含义: 1.WebRTC是google开源的流媒体客户端,可以进行实时通讯,主要应用于浏览器之间进行实时通讯,也可以单独编译在自己的应用中 2.Web ...

  4. SRS 4.0流媒体服务器开发环境搭建:包括推流、服务器配置、拉流测试

    SRS 4.0流媒体服务器入门系列 结合SRS官方Wiki以及本人对SRS的理解,推出<SRS 4.0流媒体服务器入门系列>,包括内容: SRS 4.0 开发环境搭建 SRS 4.0 配置 ...

  5. 音视频开发(28)---流媒体并发量与宽带、码率计算详解

    流媒体并发量与宽带.码率计算详解 码率计算公式     基本的算法是:[码率](kbps)=[文件大小](字节)X8/[时间](秒)*1000     音频文件专用算法:[比特率](kbps)=[量化 ...

  6. 从事音视频开发,需要学习哪些知识点?

    总体来讲,音视频开发是有一定的技术门槛的,我觉得至少需要在这个领域踏踏实实积累个3-5年,才能对音视频相关的开发知识有一个整体.深刻的理解. 从技术上来讲,需要从如下两个大类知识点上去积累: C/C+ ...

  7. C++音视频开发的技术要点

    总体来讲,音视频开发是有一定的技术门槛的,我觉得至少需要在这个领域踏踏实实积累个3-5年,才能对音视频相关的开发知识有一个整体.深刻的理解. 从技术上来讲,需要从如下两个大类知识点上去积累: 1. C ...

  8. 音视频开发总结之三网络直播技术

    一. 直播流程总览 目前主流的直播架构中主要有两种方案,即流媒体转发.P2P.流媒体转发,是一种在视频直播中以流的方式将连续的音.视频数据经编码压缩后传输到流媒体服务器,用户实时从服务器获取流媒体资源 ...

  9. C/C++音视频开发技术要点与学习路线

    总体来讲,音视频开发是有一定的技术门槛的,我觉得至少需要在这个领域踏踏实实积累个3-5年,才能对音视频相关的开发知识有一个整体.深刻的理解. 从技术上来讲,需要从如下两个大类知识点上去积累: 1. C ...

最新文章

  1. 计算机系统的分类补充完整,数据库系统原(理B)13春A卷.doc
  2. Django博客系统(推荐文章数据展示)
  3. retract手机版怎么登录服务器未响应,retract和retreat各自的用法以及它们的区别
  4. 64位十六进制转浮点数
  5. 【verilog语法】关于testbench与被测module的输入输出数据类型定义:reg/wire原因
  6. flex 点击空格键会有以前点击过的事件的保留
  7. nodejs操作sqlserver数据_nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例...
  8. 如何将第三方控件嵌入ToolStrip控件,并提供Design-Time支持
  9. Linux服务器查看日志方法小结
  10. vue里面实现百度地图 标记多点 地点连线
  11. SVM-sklearn
  12. 前端如何引用字体文件
  13. python微信发送消息过于频繁_微信发送信息频率上限?
  14. 我喜欢计算机作文300字,关于我喜欢作文300字
  15. 电影html css页面,纯CSS3构建的电影屏幕效果
  16. 我的世界联机教程java_我的世界(minecraft)联机教程
  17. 智源社区AI周刊:Hinton预测破解大脑机制时间;Gary Marcus批判追捧深度学习风潮;谷歌发布Imagen...
  18. 分支机构稳定接入 库存信息实时掌握
  19. php 解析word文件,php解析word文档
  20. 移动OA(手机OA)是什么?与OA系统有何关系?

热门文章

  1. php代码纵向排列文字怎么写,css里怎么文字纵向排列?
  2. MySQL DATE_SUB() -- 从日期减去指定的时间间隔
  3. 第一天:django+vue项目立项
  4. 视频火焰烟雾光线闪电科技粒子破碎特效PR标题模板
  5. 2021全球与中国光纤熔接机市场现状及未来发展趋势
  6. oracle驱动下载地址
  7. 语雀实现收藏网页的功能(借助印象笔记)
  8. 查看计算机屏幕颜色软件,电脑屏幕的颜色的红绿蓝值如何查看?
  9. 视频画面添加图片,这个方法分享给你
  10. 调用本地主干的预训练的.pth文件