Docker部署 SRS rtmp/flv流媒体服务器

一、介绍


SRS(Simple Realtime Server)是一款开源的流媒体服务器,具有高性能、高可靠性、高灵活性的特点,能够支持直播、点播、转码等多种流媒体应用场景。SRS 不仅提供了流媒体服务器,还提供了适用于多种平台的客户端 SDK 和在线转码等辅助服务,是一款十分强大的流媒体解决方案。

SRS 在流媒体直播、点播、转码等方面的应用场景十分丰富:

  • 在直播行业方面,SRS 能够支持多种流媒体协议(如 RTMP、HLS、RTSP、MPEG-TS 等)和传输模式,以及实时录制、转码等额外的功能,可以适用于直播监控、教学、演唱会等场景。

  • 在点播方面,SRS 提供了多种点播服务协议(如 HTTP-FLV、HTTP-DASH、HTTP-HLS 等),并支持高并发和多种混合流媒体格式的传输。

  • 在转码方面,SRS 支持多种常见音视频格式的转换和输出,例如 H.264, HEVC 等。


二、安装SRS

流媒体镜像docker-hub官方拉取

docker pull ossrs/srs

 二、安装并启动SRS的容器

1. 不挂载目录或修改配置文件,docker镜像原始配置运行

docker run -it -d -p 1935:1935 -p 1985:1985 -p 8080:8080 --name srs ossrs/srs

2. 挂载目录,将容器内部所需配置文件copy到宿主机然后进行映射

2.1  宿主机新建两个目录

mkdir -p /root/srs/conf

mkdir -p /root/srs/objs

2.2  在前述运行的SRS容器中,把上述三个目录内的文件和目录全部拷贝到宿主机中。

# 把容器中的配置文件复制出来

docker cp -a srs:/usr/local/srs/conf /root/srs/conf

# 把容器中的数据文件复制出来

docker cp -a srs:/usr/local/srs/objs /root/srs/objs

 2.2.1重新启动

docker run -it -p 1935:1935 -p 1985:1985 -p 8080:8080 --name srs --restart=always -v /root/srs/conf:/usr/local/srs/conf  -v  /root/srs/objs:/usr/local/srs/objs  ossrs/srs

此时流服务器已经可以使用,如果需要自定义配置文件可继续按照下面步骤。

2.2.2 自定义配置文件  

(仅供参考:具体去看官方配置文档 )
在 /root/srs/conf 创建自己的配置文件 srs.my.conf

# SRS 参考配置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;# 开启 https 支持,需要开放 8088端口# https {# enabled on;# listen 8088;# key ./conf/xxxx.key;# cert ./conf/xxxx.crt;# }
}
vhost __defaultVhost__ {# http-flv设置http_remux{enabled    on;mount      [vhost]/[app]/[stream].flv;hstrs      on;}# hls设置hls {enabled         on;hls_fragment    1;hls_window      2;hls_path        ./objs/nginx/html;hls_m3u8_file   [app]/[stream].m3u8;hls_ts_file     [app]/[stream]-[seq].ts;}# dvr设置dvr {enabled             off;dvr_path            ./objs/nginx/html/[app]/[stream]/[2006]/[01]/[02]/[timestamp].flv;dvr_plan            segment;dvr_duration        30;dvr_wait_keyframe   on;}# rtc 设置rtc {enabled     on;bframe      discard;}# SRS支持refer防盗链:检查用户从哪个网站过来的。譬如不是从公司的页面过来的人都不让看。refer {# whether enable the refer hotlink-denial.# default: off.enabled         off;# the common refer for play and publish.# if the page url of client not in the refer, access denied.# if not specified this field, allow all.# default: not specified.all           github.com github.io;# refer for publish clients specified.# the common refer is not overrided by this.# if not specified this field, allow all.# default: not specified.publish   github.com github.io;# refer for play clients specified.# the common refer is not overrided by this.# if not specified this field, allow all.# default: not specified.play      github.com github.io;}# http 回调http_hooks {# 事件:发生该事件时,即回调指定的HTTP地址。# HTTP地址:可以支持多个,以空格分隔,SRS会依次回调这些接口。# 数据:SRS将数据POST到HTTP接口。# 返回值:SRS要求HTTP服务器返回HTTP200并且response内容为整数错误码(0表示成功),其他错误码会断开客户端连接。# whether the http hooks enable.# default off.enabled         on;# 当客户端连接到指定的vhost和app时on_connect      http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients;# 当客户端关闭连接,或者SRS主动关闭连接时on_close        http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients;# 当客户端发布流时,譬如flash/FMLE方式推流到服务器on_publish      http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams;# 当客户端停止发布流时on_unpublish    http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams;# 当客户端开始播放流时on_play         http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions;# 当客户端停止播放时。备注:停止播放可能不会关闭连接,还能再继续播放。on_stop         http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions;# 当DVR录制关闭一个flv文件时on_dvr          http://127.0.0.1:8085/api/v1/dvrs http://localhost:8085/api/v1/dvrs;# 当HLS生成一个ts文件时on_hls          http://127.0.0.1:8085/api/v1/hls http://localhost:8085/api/v1/hls;# when srs reap a ts file of hls, call this hook,on_hls_notify   http://127.0.0.1:8085/api/v1/hls/[app]/[stream]/[ts_url][param];}
}

 通过自定义配置文件启动 (未尝试,大家可以看看配置文件是否可以使用,大多数还是使用第一种方式)

docker run -it -p 1935:1935 -p 1985:1985 -p 8080:8080 --name srs --network src_network 
--restart=always  -v /root/srs/conf:/usr/local/srs/conf  -v  /root/srs/objs:/usr/local/srs/objs   ossrs/srs ./objs/srs -c conf/srs.my.conf

要想外网可以访问,需要打开1935、8080、1985 三个端口号(云服务安全组) 

3. 通过8080端口可以访问srs中心

三、命令行FFmpeg (局域网的摄像头推流到云服务上部署的流媒体服务器)

ffmpeg -i "rtsp://admin:Pc@12138@192.168.7.34" -c:v libx264 -c:a aac -f flv rtmp://192.168.14.93/live/stream

 使用vlc 或者前端来进行视频播放

 

转换为flv播放

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/329072.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot进行多环境配置的2种方式

本文来说下Springboot使用Spring Profile和Maven Profile进行多环境配置 文章目录 概述Spring Profile多环境主配置文件与不同环境的配置文件 Maven ProfileProfile配置资源过滤 Spring Profile与Maven Profile具体使用 概述 原因 在实际的项目上,一般会分三种环境d…

端云协同,Akamai 与快手联合落地 QUIC 提升海外用户视频体验

10月10日,负责支持和保护数字化体验且深受全球企业信赖的解决方案提供商阿卡迈技术公司( Akamai Technologies, Inc.,以下简称:Akamai )( NASDAQ:AKAM )携手全球领先的短视频记录和分享平台快手(HK:1024)通过全面落地 …

静态网页设计——环保网(HTML+CSS+JavaScript)(dw、sublime Text、webstorm、HBuilder X)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频: https://www.bilibili.com/video/BV1BC4y1v7ZY/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术:HTMLCSSJS(…

我与nano实验室交流群

感兴趣的同学、朋友可以加入群聊共同学习聊天哦。 主要是工训赛、电赛、光电、集成电路等等,会分享一些开源代码,博主自己做的项目,自己画的PCB等等,包含但不限于STM32、K210、V831、机器视觉,机械臂,ROS&a…

Python爬虫获取百度的图片

一. 爬虫的方式: 主要有2种方式: ①ScrapyXpath (API 静态 爬取-直接post get) ②seleniumXpath (点击 动态 爬取-模拟) ScrapyXpath XPath 是 Scrapy 中常用的一种解析器,可以帮助爬虫定位和提取 HTML 或 XML 文档中的数据。 Scrapy 中使用 …

09.简单工厂模式与工厂方法模式

道生一,一生二,二生三,三生万物。——《道德经》 最近小米新车亮相的消息可以说引起了不小的轰动,我们在感慨SU7充满土豪气息的保时捷设计的同时,也深深的被本土品牌的野心和干劲所鼓舞。 今天我们就接着这个背景&…

广义零样本学习综述的笔记

1 Title A Review of Generalized Zero-Shot Learning Methods(Farhad Pourpanah; Moloud Abdar; Yuxuan Luo; Xinlei Zhou; Ran Wang; Chee Peng Lim)【IEEE Transactions on Pattern Analysis and Machine Intelligence 2022】 2 conclusion Generali…

STM32F407ZGT6时钟源配置

1、26M外部时钟源 1、25M外部时钟源

Open3D 读写并显示PLY文件 (2)

Open3D 读写并显示PLY文件 (2) 一、算法介绍二、算法实现1.代码2.注意 一、算法介绍 读取PLY文件中的点云坐标,写出到新的文件中,并显示在屏幕上。 二、算法实现 1.代码 import open3d as o3dprint("读取点云") pl…

本地部署 gemini-openai-proxy,使用 Google Gemini 实现 Openai API

本地部署 gemini-openai-proxy,使用Google Gemini 实现 Openai API 0. 背景1. 申请 Google Gemini API key2. (Optional)Google Gemini 模型说明3. gemini-openai-proxy Github 地址4. 本地部署 gemini-openai-proxy5. 测试 0. 背景 使用 Google Gemini 实现 Opena…

嵌入式(二)单片机基础 | 单片机特点 内部结构 最小系统 电源 晶振 复位

上一篇文章我们介绍了嵌入式系统 嵌入式系统(Embedded System)是一种特定用途的计算机系统,它通常嵌入在更大的产品或系统中,用于控制、监测或执行特定的任务。这些系统通常由硬件和软件组成,旨在满足特定的需求&…

解决SlF4J配置冲突警告:【SLF4J: Class path contains multiple SLF4J providers】

1、问题背景 最近在启动Springboot的时候出现了SLF4J相关的报红警告,虽然是不影响程序运行,但是作为一个有着代码洁癖的人看的是真难受。 警告信息如下: SLF4J: Class path contains multiple SLF4J providers. SLF4J: Found provider [ch…