SRS流媒体服务器(1)概述和环境搭建

1.概述

SRS(Simple Realtime Server)是一款高性能、跨平台的流媒体服务器,支持多种协议,包括 RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH 和 GB28181。本文介绍了 SRS,包括其用途、关键功能、架构和支持协议。SRS 旨在创建一个免费的开源社区,帮助开发人员构建高质量的流媒体和 RTC 平台。它已获得 MIT 许可,使其适用于商业和非商业用途。

目标和设计理念

SRS 旨在成为一种简单、高效和实时的流媒体服务器,其基本功能侧重于性能和稳定性。代码库遵循模块化架构,将核心服务器框架、协议处理程序和流处理组件之间的关注点分开。

2.环境搭建

2.1 srs源码下载

复制代码
git clone https://github.com/ossrs/srs.git srs.4.0
cd srs.4.0
./configure --gb28181=on --debug=on && make

2.2 srs服务启动

srs.conf 配置示例

html 复制代码
# 主配置文件 for SRS(Simple Real-time Messaging Server)
# @see full.conf for detail config.  # 详见 full.conf 以获取详细配置

# 监听的 RTMP 推流端口,默认为 1935
listen              1935;

# 最大连接数,限制同时可建立的连接数量
max_connections     1000;

# 日志存储方式,可选值为 file 或 console,默认为 file
# srs_log_tank        file;

# 日志文件的路径,默认为 ./objs/srs.log
#srs_log_file        ./objs/srs.log;

# 开启守护进程模式,使 SRS 在后台运行
daemon              on;


# srs提供辅助功能以html显示,有srs控制台,srs播放器 HTTP 服务器配置 
http_server {
    # 启用 HTTP 服务器功能
    enabled         on;
    # HTTP 服务器监听的端口,默认为 8080
    listen          8080;
    # 静态文件的存储目录,默认为 ./objs/nginx/html
    dir             ./objs/nginx/html;
}

# srs推流信令api HTTP API 配置
http_api {
    # 启用 HTTP API 功能
    enabled         on;
    # HTTP API 监听的端口,默认为 1985
    listen          1985;
}


# RTC 服务器配置
rtc_server {
    # 启用 RTC 服务器功能
    enabled on;
    # RTC 服务器监听的端口,注意是 UDP 协议,默认为 8000
    listen 8000;
    # 服务器提供服务的 IP 地址,由于 RTC 的特殊性,必须配置这个地址
    # 可以通过多种方式配置,如固定 IP、环境变量、自动获取等 
    #  = * 自动获取 = 127.0.0.1指定 =$CANDIDATE 以ifconfig网卡接口作为ip
    candidate 117.72.13.81;
}

# 默认虚拟主机配置
vhost __defaultVhost__ {
    # HLS 配置
    hls {
        # 启用 HLS 功能
        enabled         on;
    }

    # HTTP-FLV 配置
    http_remux {
        # 启用 HTTP-FLV 功能
        enabled     on;
        # 指定要转换的流的挂载点,格式为 [vhost]/[app]/[stream].flv
        mount       [vhost]/[app]/[stream].flv;
    }

    # RTC 配置
    rtc {
        # 启用 RTC 功能
        enabled     on;
        # 是否开启 RTMP 转 RTC,默认为 off
        rtmp_to_rtc on;
        # 是否开启 RTC 转 RTMP,默认为 off
        rtc_to_rtmp on;
    }
}
复制代码
./objs/srs -c conf/srs.conf
tail -f ./objs/srs.log

2.2.1 使用Docker 启动

java 复制代码
docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \
    -p 8000:8000/udp -p 10080:10080/udp ossrs/srs:5

2.3 效果演示

2.3.1 推流至srs服务器

除了可以使用ffmpeg进行推流,也可以使用obs进行推流。

java 复制代码
#使用ffmpeg文件推流远程服务器
ffmpeg -re -i  time.flv  -vcodec copy -acodec copy  -f flv -y rtmp://117.72.13.86:1935/live/livestream

2.3.1 srs服务器拉流

java 复制代码
#1. srs播放器拉流访问
http://localhost:8080/
http://localhost:1985/api/

#2.ffplay拉流
ffplay rtmp://localhost:8080/live/livestream
ffplay http://localhost:8080/live/livestream.flv
ffplay http://localhost:8080/live/livestream.m3u8


#3. 官方在线播放器
https://ossrs.net/srs.release/trunk/research/players/rtc_player.html?autostart=true&server=r.ossrs.net&vhost=r.ossrs.net

进入上文srs播放器播放即可

java 复制代码
http://127.0.0.1:8080/players/srs_player.html?schema=http

官方学习地址

https://ossrs.net/lts/zh-cn/docs/v4/doc/http-api

https://ossrs.net/lts/zh-cn/blog/lets-do-h265-live-streaming

https://ossrs.net/lts/zh-cn/guide

学习资料分享

0voice · GitHub

相关推荐
OpenLoong 开源社区2 天前
打破 NAT 限制,零侵入跨网络通信:基于 WebRTC 的透明 TCP 隧道跨网络通信方案
网络协议·tcp/ip·开源·webrtc·openloong开源社区
探鸽小钛5 天前
4G 终端 ES8311 - 挂断一次,下次说话就没声了之解决办法
物联网·音视频·嵌入式·esp32·webrtc
草根大哥6 天前
AI 编程实践之自建视频CDN
音视频·webrtc·低延迟直播·视频cdn·低延迟cdn
EasyCVR6 天前
应急指挥怕延迟?聊聊视频汇聚/视频融合/视频分析EasyCVR平台WebRTC低延迟方案
音视频·webrtc·easycvr
TrueDei7 天前
WebRTC ICE 候选变成 mDNS 地址导致连接失败:原因分析与解决方案
webrtc
中屹指纹浏览器svip10 天前
WebRTC泄露是什么,怎么关闭?
webrtc
海边捡石子11 天前
从零设计一个通用智能电话平台:FreeSWITCH + ESL + AI 实战架构
人工智能·架构·webrtc
音视频牛哥11 天前
不换摄像机,也能接入 WebRTC?SmartMediaKit RTSP/RTMP 转 WHIP 技术实践
音视频·webrtc·smartmediakit·rtsp转whip·rtmp转whip·whip推流·rtsp转webrtc播放
直播技术开发交流13 天前
Android 端 WHIP 协议推流技术实践:相机/录屏/多路转发WHIP实现测试
webrtc·android whip·rtsp转whip·毫秒级实时媒体流·whip低延时推送·whip推送实现·rtsp转webrtc
程序员阿明15 天前
docker搭建视频流服务go2rtc,webRTC
docker·容器·webrtc