热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[流媒体]通读SRS后的总结文档以及搭建直播平台的初次尝试

“SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。”—winlin通读了simplertmpserver的2.0release版本的

“SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。”—winlin
           
            通读了simple rtmp server的2.0release 版本的wiki。从整体上,对simple rtmp server有了比较全面的认识,也根据wiki中的介绍,将simple rtmp server的一些demo跑通,体验了一下SRS部署的简单快速,但是由于手头机器有限,并不能体会SRS的集群部署性能,比较遗憾。
          Simple rtmp server,根据名称就能够知道,整个流媒体服务器的基础就是Real Time Messageing Protocol(RTMP),这是一种设计用来进行实时数据通讯的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间,进行音视频数据通信。为了能够支持IOS跟一些没有Flash播放器的机器,SRS有增加了HLS跟HTTP-FLV支持。其中HLS,指的是http live streaming ,是Apple公司的动态码率自适应技术,主要用于IOS,Mac OS X系统中。特色是拥有m3u8索引文件,然后将视频源切成特定大小的ts切片。基本上,SRS支持的流媒体协议就包括RTMP,HLS,HTTP-FLV。包括RTSP,RTMP变种协议等这些协议,在开源的SRS2.0Release版本中,还没有支持。
          SRS在支持三种协议的同时,也有着丰富的流媒体服务器所具备的功能,比如转码/转封装/采集,内部提供实验版本的http服务器,设置有内存、CPU等分析日志功能,低延迟属性设置功能,还能够实现与CDN对接,具备部署成RTMP分发集群或者HTTP-FLV分发集群的能力,还设立有vhost,可以在一个集群中支持多用户操作,并且,SRS还支持在不中断服务的情况下应用新的配置。
         
          说了那么多,都是纸上谈兵,没有什么卵用,所以,我利用元旦这两天假期,搭建了一个直播平台。平台具有以下功能:
1、 支持RTMP/HLS/HTTP-FLV
2、 支持转码,提供1080P,720P,D1和原始视频源这四种模式流
3、 支持RTMP分发集群
4、 支持将不同种类的流拉到srs中作为rtmp流分发
 
          主流详细的配置文件
1、 布置最基本的RTMP服务器

listen                          1935; #设置主流监听端口max_connections       1000; #设置最大链接数

2、 布置主流

pid                   ./objs/build.home.work.master.pid; # 设置主流PID文件srs_log_file        ./objs/build.home.work.master.log; # 设置主流log文件

3、 布置http server

http_server {               enabled       on; # 启用http server,这里我并没有使用srs中内置的http server,而是采用nginxlisten           8080; # 设定http监听端口dir               ./objs/nginx/html; # 设置nginx启动的app目录}

4、 布置vhost

vhost __defaultVhost__

5、 布置hls服务器

hls{enabled                 on; # 启动hls服务器hls_fragment         10; # 设置hls切片的最大数量hls_window           60; # 设置hls切片的播放窗口时间限制hls_path                ./objs/nginx/html; # 设置使用hls的App的path,这里我使用了srs提供的app}

6、 布置HTTP-FLV服务器

http_remux {enabled     on; # 启动HTTP-FLV服务器mount       [vhost]/[app]/[stream].flv; # 设定挂靠的flv文件hstrs         on; #启动hstrs}

7、 布置拉流

ingest ingest_livestream { #启动拉流,这里只是一个尝试enabled                 on; #启动额外的拉流input{#设定拉流type            file;#设定拉流的类型url               ./doc/source.200kbps.768x320.flv; # 设定拉流的url}ffmpeg                  ./objs/ffmpeg/bin/ffmpeg; #启动ffmpeg作为拉流的工具engine { #将拉流绑定到主流监听enabled                 on;output                  rtmp://127.0.0.01:[port]/live?vhost=[vhost]/ingest_livestream;#设置拉流的访问地址}}

8、 布置转码引擎

transcode {enabled       on; # 开启转码引擎ffmpeg        ./objs/ffmpeg/bin/ffmpeg; #设定转码工具为ffmpeg
a. 1080Pengine super_profile{enabled                 on; # 开启转码引擎vfilter {}vcodec                  libx264; #设定video 的编码工具vbitrate                 1024; # 设定码率vfps                       20;# 设定帧率vwidth                   1920; # 设定图像宽vheight                 1080; # 设定图像高vthreads                4; # 设定转码threadsvprofile                 main; # 设置转码profilevpreset                  medium;# 设置转码质量vparams{}acodec                  libfdk_aac; # 设定audio的编码工具abitrate                 70; # 设定码率asample_rate         44100; # 设定采样率achannels              2; # 设定声道aparams {}output                  rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];#绑定输出}
b. 720Pengine high_profile{enabled                 on; # 开启转码引擎vfilter {}vcodec                  libx264; #设定video 的编码工具vbitrate                 700; # 设定码率vfps                       20;# 设定帧率vwidth                   1280; # 设定图像宽vheight                 720; # 设定图像高vthreads                4; # 设定转码threadsvprofile                 main; # 设置转码profilevpreset                  medium;# 设置转码质量vparams{}acodec                  libfdk_aac; # 设定audio的编码工具abitrate                 70; # 设定码率asample_rate         44100; # 设定采样率achannels              2; # 设定声道aparams {}output                  rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];#绑定输出}
c. D1engine normal_profile{enabled                 on; # 开启转码引擎vfilter {}vcodec                  libx264; #设定video 的编码工具vbitrate                 500; # 设定码率vfps                       20;# 设定帧率vwidth                   704; # 设定图像宽vheight                 576; # 设定图像高vthreads                4; # 设定转码threadsvprofile                 main; # 设置转码profilevpreset                  medium;# 设置转码质量vparams{}acodec                  libfdk_aac; # 设定audio的编码工具abitrate                 70; # 设定码率asample_rate         44100; # 设定采样率achannels              2; # 设定声道aparams {}output                  rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];#绑定输出}边缘流配置,这里使用一个edge流作为例子

1、 基本RTMP服务器

listen                          19350;#设定监听端口max_connections       1000;# 设定最大链接数

2、 Edge配置

pid                             ./objs/build.home.work.slave.pid;# 设定PID文件srs_log_file                 ./objs/build.home.work.slave.log;# 设定log文件

3、 Vhost

vhost __defaultVhost__

4、 设定主流

mode                         remote;# 设定为remoteorigin                         127.0.0.1:1935; # 绑定主流的IP端口

5、 布置转码引擎,与主流的转码引擎一直,不再赘述,唯一不同的就是在访问时,我们要访问19350这个端口。
 
推流命令:ffmpeg -re -i 1.flv -vcodec copy -acodec copy -f flv -y rtmp://192.168.1.100/live/livestream
搭建完成后,对应不同流的访问地址(服务器地址为192.168.1.100):
主流:
1、 原始RTMP流:rtmp://192.168.1.100:1935/live/livestream
2、 1080P RTMP 流:rtmp://192.168.1.100:1935/live/livestream_super_profile
3、 720P RTMP流:rtmp://192.168.1.100:1935/live/livestream_high_profile
4、 D1 RTMP流:rtmp://192.168.1.100:1935/live/livestream_normal_profile
试验用CDN的edge流:
1、 原始RTMP流:rtmp://192.168.1.100:19350/live/livestream
2、 1080P RTMP 流:rtmp://192.168.1.100:19350/live/livestream_super_profile
3、 720P RTMP流:rtmp://192.168.1.100:19350/live/livestream_high_profile
4、 D1 RTMP流:rtmp://192.168.1.100:19350/live/livestream_normal_profile
HLS流:
http://192.168.1.100:8080/live/livestream.m3u8
HTTP-FLV 流:
http://192.168.1.100:8080/live/livestream.flv
试验用拉流到srs的访问流:
rtmp://192.168.1.100:1935/live/ingest_livestream



推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 台式电脑的电力消耗:待机一天耗电多少?
    探讨台式电脑的电力消耗问题,特别是待机状态下的能耗。本文将详细介绍影响电脑功耗的因素,并提供计算和优化电源配置的方法。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
author-avatar
wu勿望我_957
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有