圈木云科技
首页
  • 快速开始

    • k8s环境搭建
    • golang微服务版本
    • php环境搭建
    • vue前端技术说明
    • uniapp混合开发介绍
    • 压测报告
    • 错误代码
  • IM服务

    • 简介
    • 快速开始
    • 错误代码
  • 流媒体服务

    • 简介
    • 快速开始
    • 错误代码
教程
  • 01.直播app演示
  • 02.陪玩语聊app演示
  • 03.IM聊天交友app演示
  • php接口文档
  • golang接口文档
  • IM接口文档
  • 流媒体接口文档
  • 源站接口文档
  • 问题反馈
  • 项目问题
  • 异常问题
  • 功能问题
  • 名词解释
  • 关于
  • 谁在用
  • 捐赠列表
  • 更新记录
GitHub (opens new window)

qmcloud

首页
  • 快速开始

    • k8s环境搭建
    • golang微服务版本
    • php环境搭建
    • vue前端技术说明
    • uniapp混合开发介绍
    • 压测报告
    • 错误代码
  • IM服务

    • 简介
    • 快速开始
    • 错误代码
  • 流媒体服务

    • 简介
    • 快速开始
    • 错误代码
教程
  • 01.直播app演示
  • 02.陪玩语聊app演示
  • 03.IM聊天交友app演示
  • php接口文档
  • golang接口文档
  • IM接口文档
  • 流媒体接口文档
  • 源站接口文档
  • 问题反馈
  • 项目问题
  • 异常问题
  • 功能问题
  • 名词解释
  • 关于
  • 谁在用
  • 捐赠列表
  • 更新记录
GitHub (opens new window)
  • 简介
  • 快速开始

  • IM服务

  • 流媒体服务

    • golang流媒体服务简介
      • 简介
      • 特性
      • 协议转换支持情况
      • 各协议推拉流url地址列表
      • 性能测试
        • 其他相关文档参考
        • Cluster Guides
        • Integration Guides
        • Solution Guides
        • Develop Guide
        • Migrate From NGINX-RTMP
        • Product & Milestones
      • Tech Docs
  • 指南
  • 流媒体服务
qmcloud
2021-09-20
目录

golang流媒体服务简介

# 简介

提示

纯Golang开发的流媒体(直播音视频网络传输)服务器。目前已支持RTMP, RTSP(RTP/RTCP), HLS, HTTP[S]/WebSocket-FLV/TS, GB28181协议。并支持通过插件形式进行二次开发扩展。

Note: 分布式部署,多节点架构,适用于大多数场景。

# 特性

  • 支持linux/macOS/windows多系统开发、调试、运行
  • 支持多arch运行。比如amd64/arm64/arm32/ppc64le/mipsle/s390x
  • 支持交叉编译。可在任一平台编译出其他平台的可执行文件
  • 运行无依赖。可执行文件无任何环境、库安装依赖,可单文件独立运行
  • 提供各平台可执行文件,可免编译直接运行(前提是开放全部源码哈)
  • 支持docker。支持amd和arm架构
  • 高性能。多核多线程扩展,支持高并发,性能和同类型c/c++开发服务处于同一水平
  • 高可用。完善的单元测试。并且有多个线上环境应用
  • 多种直播流封装协议
  • 支持RTMP, RTSP(RTP/RTCP), HLS, HTTP[S]/WebSocket-FLV/TS, GB28181
  • 支持不同封装协议间相互转换
  • 支持通过插件形式进行二次开发,支持扩展自定义协议,输入输出都可以
  • 多种编码格式。视频支持H264/AVC,H265/HEVC,音频支持AAC, G711A/G711U, OPUS
  • 多种格式录制。支持FLV,长MPEGTS,HLS录制(HLS直播与录制可同时开启)
  • HTTPS。支持HTTPS-FLV,HTTPS-TS,HLS over HTTPS拉流
  • WebSocket。支持Websocket-FLV,WebSocket-TS拉流
  • TLS/SSL。所有协议都支持相应的TLS/SSL加密传输。比如RTMPS,RTSPS,HTTPS,WebSockets
  • HLS。支持LIVE实时直播、VOD全列表直播。切片文件支持多种删除方式。支持内存切片。支持统计HLS播放者数量
  • RTSP。支持over TCP(interleaved模式)。支持basic/digest auth验证。支持461。
  • RTMP。支持给单视频添加静音音频数据,支持合并发送。兼容对接各种常见RTMP实现。支持enhanced RTMP。
  • RTP。支持解析扩展头
  • HTTP API接口。用于获取服务信息,向服务发送命令。
  • HTTP Notify事件回调。获取时间通知,业务方可以轻松定制自身的逻辑。
  • 支持多种方式鉴权
  • 支持分布式集群
  • 静态pull回源。通过配置文件配置回源地址
  • 静态push转推。支持转推多个地址。通过配置文件配置转推地址
  • 支持按需回源。没有观众的回源拉流可以主动关闭
  • CORS跨域。支持HTTP-FLV,HTTP-TS,HLS跨域拉流。HTTP-API支持跨域。
  • HTTP文件服务器。比如HLS切片文件可直接播放,不需要额外的HTTP文件服务器
  • 监听端口复用。HTTP-FLV,HTTP-TS,HLS可使用相同的端口。over HTTPS类似
  • 秒开播放。GOP缓冲
  • 支持(在服务端)自动叠加静音音频
  • 支持先拉流后推流
  • 支持推流断开后重连,拉流端无感知。
  • 支持自定义debug格式流录制、流回放,快速复现、定位问题
  • 自带Web UI页面
  • 支持有B帧的视频

# 协议转换支持情况

转封装类型 rtmp http[s]/websocket[s]-flv http[s]/websocket[s]-ts hls rtsp
rtmp √ √ √ √ √
rtsp √ √ √ √ √

# 各封装协议对编码协议的支持情况

编码类型 rtmp rtsp hls flv mpegts
aac √ √ √ √ √
avc/h264 √ √ √ √ √
hevc/h265 √ √ √ √ √

# 录制文件的类型

录制类型 hls flv mpegts
rtmp √ √ √
rtsp √ √ √

# 各协议推拉流url地址列表

# 启动成功后,就可以开始使用了。 作为流媒体服务,最主要的功能就是流数据转发。比如:

使用ffmpeg推rtmp流:

ffmpeg -re -i demo.flv -c:a copy -c:v copy -f flv rtmp://127.0.0.1:1935/live/test110
1

使用ffplay拉rtmp流播放:

ffplay rtmp://127.0.0.1/live/test110
1

# 各协议推拉流url地址列表

协议 url地址 协议标准端口
RTMP推流 rtmp://127.0.0.1:1935/live/test110 1935
RTSP推流 rtsp://localhost:5544/live/test110 554
RTMP拉流 rtmp://127.0.0.1:1935/live/test110 1935
HTTP-FLV拉流 http://127.0.0.1:8080/live/test110.flv https://127.0.0.1:4433/live/test110.flv (https地址) 80 443
WebSocket-FLV拉流 ws://127.0.0.1:8080/live/test110.flv wss://127.0.0.1:4433/live/test110.flv (websockets地址) 80 443
HLS(m3u8+ts)拉流 http://127.0.0.1:8080/hls/test110.m3u8 (直播地址格式1) http://127.0.0.1:8080/hls/test110/playlist.m3u8 (直播地址格式2) http://127.0.0.1:8080/hls/test110/record.m3u8 (全量录播地址) 80
RTSP拉流 rtsp://localhost:5544/live/test110 554
HTTP-TS拉流 http://127.0.0.1:8080/live/test110.ts (http地址) https://127.0.0.1:4433/live/test110.ts (https地址) ws://127.0.0.1:8080/live/test110.ts (websocket地址) wss://127.0.0.1:4433/live/test110.ts (websockets地址) 80 443 80 443

# 关于端口

Note: 表格示例中的端口是初始配置,用户可自由修改配置

# 播放器支持

拉流客户端 RTMP RTSP HTTP-FLV HTTPS-FLV HLS HTTP-TS WebSocket-FLV WebSocket-TS
ffmpeg/ffplay ✔ ✔ ✔ ✔ ✔ ✔ X X
vlc ✔ ✔ ✔ X ✔ ✔ X X
MPV ✔ ✔ ✔ ✔ ✔ ✔ X X
flv.js X X ✔ ? X X ✔ X
hls.js X X X X ✔ X X X
西瓜播放器(js) X X ✔ ? ✔ X ✔ X

# 性能测试

  • 测试机:32核16G
  • 压测工具:pushrtmp 以及 pullrtmp
  • 推流码率:大概200kbps

# 测试场景一:

持续推送n路RTMP流至流媒体服务器

推流数量 CPU占用 内存占用(RES)
1000 (占单个核的) 16% 104MB

# 测试场景二:

持续推送1路RTMP流服务器,使用RTMP协议拉取n路流

推流数量 CPU占用 内存占用(RES)
1000 (占单个核的) 30% 120MB

# 测试场景三:

持续推送1000路RTMP流至服务器,使用RTMP协议拉取1000路流(推拉流为1对1的关系)

推流数量 拉流数量 CPU占用 内存占用(RES)
1000 1000 125% 464MB

# 延迟测试:

本地推拉流低延迟不到200毫秒

# 其他相关文档参考

  • Delivery RTMP (opens new window): 如何部署SRS提供RTMP服务。
  • Delivery HLS (opens new window): 如何部署SRS提供RTMP和HLS服务。
  • Delivery HTTP FLV (opens new window): 如何部署SRS分发FLV流。
  • Delivery HDS (opens new window): 如何部署SRS分发HDS流。
  • Delivery DASH (opens new window): 如何部署SRS分发DASH流。
  • Transmux SRT (opens new window): 如何部署SRS支持SRT流。
  • Transmux GB28181 (opens new window):如何部署SRS支持GB28181流。
  • Transcode (opens new window): 如何部署SRS对直播流转码。
  • Snapshot (opens new window): 如何对直播流截图。
  • Forward (opens new window): 如何部署SRS转发RTMP流到其他服务器。
  • Low latency (opens new window): 如何部署SRS为低延迟模式。
  • Ingest (opens new window): 如何将其他流拉到SRS作为RTMP流。
  • HTTP Server (opens new window): 如何部署SRS为HTTP服务器。
  • SRS DEMO (opens new window): 如何启动SRS的DEMO。
  • Projects (opens new window): 都有谁在使用SRS。
  • Setup (opens new window): SRS安装和部署摘要。
  • WebRTC Play (opens new window): SRS支持WebRTC播放流。
  • GB28181 Publish (opens new window): SRS支持GB28181推流。
  • SRT Publish (opens new window): SRS支持SRT推流。
  • HEVC/H.265 (opens new window): SRS支持H.265编码格式。

# Cluster Guides

  • [Origin Cluster][v5_CN_OriginCluster]: 如何支持源站集群,扩展源站能力。
  • [Edge Cluster: RTMP][v5_CN_SampleRTMPCluster]: 如何部署RTMP分发集群,譬如CDN支持RTMP分发。
  • [Edge Cluster: FLV][v5_CN_SampleHttpFlvCluster]: 如何部署HTTP-FLV分发集群,譬如CDN支持HTTP-FLV分发。
  • [Edge Cluster: HLS][v5_CN_SampleHlsCluster]: 如何部署HLS分发集群,比如CDN支持HLS分发。
  • [VHOST][v5_CN_RtmpUrlVhos]: 如何一个集群支持多个用户,即Vhost。
  • [Reload][v5_CN_Reload]: 如何不中断服务的前提下应用新的配置,即Reload。
  • [Tracable Log][v5_CN_SrsLog]: 如何在集群中追溯错误和日志,基于连接的日志,排错日志。
  • [Log Rotate][v5_CN_LogRotate]: 如何切割服务器的日志,然后压缩或者清理。
  • [K8s][v4_CN_K8s]: 如何使用ACK(阿里云容器服务Kubernetes版) (opens new window)部署SRS集群。

# Integration Guides

  • Linux Service (opens new window): 启动或停止服务。
  • HTTP Callback (opens new window): 使用HTTP回调侦听SRS的事件。
  • HTTP API (opens new window): 使用SRS的HTTP API获取数据。
  • Special Control (opens new window): 一些特殊的控制配置。

# Solution Guides

  • 陈海博:SRS在安防中的应用 (opens new window)
  • 最佳实践:一对一通话 (opens new window),多人通话 (opens new window)和直播连麦 (opens new window)
  • 最佳实践:如何扩展你的SRS并发能力? (opens new window)
  • SRS是单进程模型,不支持多进程;可以使用集群 (opens new window) 或者ReusePort (opens new window)扩展多进程(多核)能力。
  • 基于HLS-TS&RTMP-FLV的微信小程序点直播方案 (opens new window)
  • 借力SRS落地实际业务的几个关键事项 (opens new window)
  • 干货 | 基于SRS直播平台的监控系统之实现思路与过程 (opens new window)
  • Android直播实现 (opens new window)
  • SRS直播服务器与APP用户服务器的交互 (opens new window)
  • 使用flvjs实现摄像头flv流低延时实时直播 (opens new window)
  • IOS 直播方面探索(服务器搭建,推流,拉流) (opens new window)
  • 国产开源流媒体SRS4.0对视频监控GB28181的支持 (opens new window)

# Develop Guide

  • 高性能网络服务器设计 (opens new window),分析高性能网络服务器的设计要点。
  • SRS高精度、低误差定时器 (opens new window),论高并发服务器的定时器问题。
  • 协程原理:函数调用过程、参数和寄存器 (opens new window),剖析SRS协程实现的最底层原理。
  • 性能优化:SRS为何能做到同类的三倍 (opens new window),论性能优化的七七八八、前前后后。
  • SRS代码分析 (opens new window),分析SRS结构和代码逻辑,类结构图,线程模型,模块架构。
  • Third-party Client SDK (opens new window): 第三方厂商提供的客户端推流和播放的SDK,一般是移动端包括Andoird和iOS。
  • 轻量线程分析 (opens new window),分析SRS依赖的库ST的关键技术。
  • SRS代码分析 (opens new window),分析SRS结构和代码逻辑,类结构图,线程模型,模块架构。
  • 深度: 掀起你的汇编来:如何移植ST协程到其他系统或CPU? (opens new window)
  • 肖志宏:SRS支持WebRTC级联和QUIC协议 (opens new window)
  • StateThreads源码分析 (opens new window)
  • SRS 4.0源码分析 (opens new window)

# Migrate From NGINX-RTMP

  • NG EXEC (opens new window): 为特殊的事件执行外部程序,譬如exec_publish,当发布流时exec外部程序。

# Product & Milestones

  • Milestones (opens new window): SRS的路线图和产品计划。
  • Why SRS (opens new window): 为何选择SRS?SRS的路线图?
  • GIT Mirrors (opens new window): SRS在各个主要GIT站点的镜像,代码都是保持同步的。
  • Main Features (opens new window): SRS的功能列表。请注意有些功能只有特定的版本才有。请注意有些功能是实验性的。
  • Releases (opens new window): SRS目前已经发布的版本。
  • Docs (opens new window): SRS的详细文档。
  • Compare (opens new window): SRS和其他服务器的对比。
  • Performance (opens new window): SRS的性能测试报告。

# Tech Docs

  • 历经5代跨越25年的RTC架构演化史 (opens new window)
  • 技术解码 | SRT和RIST协议综述 (opens new window)
  • 公众号专栏:SRS,知识库,重要功能和阶段性结果,解决方案和DEMO (opens new window)
  • 公众号专栏:深度,底层技术分析,服务器模型,协议处理,性能优化等 (opens new window)
  • 公众号专栏:动态,关于最新的会议和动态,新闻,社区等 (opens new window)
  • WebRTC 的现状和未来:专访 W3C WebRTC Chair Bernard Aboba (opens new window)
  • B站专栏(视频):SRS开源服务器 (opens new window)
  • 零声学院(视频):SRS流媒体服务器实战 (opens new window)
  • 音视频开发为什么要学SRS流媒体服务器 (opens new window)
#rtmp
Last Updated: 2024/11/16, 10:54:20
IM服务简介

← IM服务简介

Theme by Vdoing | Copyright © 2022-2025 Copyright © 2021-2040 Quanmu. All rights reserved. 圈木云科技 | 琼ICP备2022006049号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式