1.SRS流媒体服务器——单机环境搭建和源码目录介绍
2.FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
3.SRS4.0源代码分析之WebRTC服务总体介绍
4.CentOS7下使用SRS搭建流媒体服务器
5.SRS(simple-rtmp-server)流媒体服务器源码分析--RTMP消息play
6.分析流媒体服务器源码:Rtmp发布流程的SRS解析
SRS流媒体服务器——单机环境搭建和源码目录介绍
启动srs
2. 显示日志信息
3. 确认srs是否正常启动
4. 安全退出正在运行的srs
5. 默认后台启动,调试需修改配置文件为前台
相关视频推荐
SRS-RTMP-WebRTC流媒体服务器入门
全球Star第一的流媒体服务器SRS4.0 WebRTC音视频通话分析
SRS流媒体服务器架构设计及源码分析
免费FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发免费学习地址
纯干货免费分享C++音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,网盘文件管理app 源码FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击 加群免费领取哦~
源码目录介绍
1. trunk目录
2. src下的源码
3. app
4. core
5. kernel 音视频格式相关
6. libs
7. main
8. protocol 流媒体协议相关
9. service
. utest
. 八个目录,二百零三个文件
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
在FFmpeg开发实践中,MediaMTX虽然在《FFmpeg开发实战》一书的第章有所提及,但其功能过于基础,不适合实际的直播生产环境。真正的生产级流媒体服务器,如SRS和ZLMediaKit,更为可靠。SRS作为一款国产开源的实时视频服务器,支持RTMP、WebRTC等多种协议,是推流(发布)和播放(订阅)服务器模型的典型代表,能处理协议转换,如将RTMP转为HLS、jellyfin源码WebRTC等。
要测试SRS与FFmpeg的音视频推拉流,首先在华为欧拉系统上进行编译安装。首先,确保Linux服务器上安装了必要的依赖,如git和patch,然后从gitee下载SRS源码并进行配置和编译。FFmpeg的编译安装步骤可以参考《FFmpeg开发实战》中的相关章节,这里不再详述。
启动SRS时,需要配置srs.conf文件,开启关键帧缓存,这对于画面渲染至关重要。随后,通过命令行启动SRS服务,并检查(RTMP)和(HTTP)端口是否开启。测试推流时,使用FFmpeg将本地视频推送到SRS,同时用VLC播放器通过RTMP或HTTP协议拉流验证视频是cvCreateMemStorage源码否正常播放。
总之,SRS与FFmpeg的集成是实现视频直播推流的重要步骤,通过上述操作,开发者可以充分了解和实践这一过程。更多关于FFmpeg的开发内容,可以参考《FFmpeg开发实战》这本书。
SRS4.0源代码分析之WebRTC服务总体介绍
SRS4.0的WebRTC服务提供了一种强大的实时音视频通信解决方案,它基于Web标准,支持浏览器之间的双向通信。SRS4.0引入WebRTC的主要目的是为了增强服务器的SFU(服务器转发单元)功能,以优化客户端接入和降低音视频处理对服务器CPU的负担。通过部署SFU,客户端可以将本地音视频数据推送到服务器,同时服务器根据需要拉取数据,实现低延迟的直播连麦场景。
WebRTC涉及的知识点广泛,包括SDP报文处理、ICE连接建立、DTLS加密等,源码执行但SRS4.0的重点在于简化用户对WebRTC的理解。SRS4.0 WebRTC服务的核心模块在`srs_app_rtc_server.cpp`中初始化,主要负责自签名证书生成、UDP端口监听(如)和推拉流API接口注册。RTMP与WebRTC的不同在于,WebRTC通过P2P/ICE技术建立UDP连接,而RTMP则通过socket复用控制命令和数据流。
SRS4.0通过HTTP(S)接口提供对外API,如/rtc/v1/publish/和/rtc/v1/play/,用于接收和发送音视频数据。当客户端发起推流或拉流请求时,SRS会创建相应的对象(如SrsRtcPublishStream和SrsRtcPlayStream),并处理SDP交换和ICE连接建立。推流和拉流过程涉及SDP报文协商,ICE用于客户端和服务端建立数据传输通道,确保安全性和稳定性。
最后,总结SRS4.0 WebRTC的处理流程:首先,监听端口并提供API接口;其次,solrhighlighter源码根据API请求创建相应的数据流对象;接着,通过SDP和ICE建立连接;最后,音视频数据在服务器和客户端之间按此流程传递:客户端→服务器→SRS对象→客户端。理解这些核心流程有助于深入研究SRS4.0的WebRTC功能和实现机制。
CentOS7下使用SRS搭建流媒体服务器
本地服务器配置:使用 CentOS7 Linux 系统(版本:3..0-..1.el7.x_),IP 地址为 ...。将服务器角色定位为使用 SRS(Simple Realtime Server)搭建流媒体服务器。SRS 支持 RTMP、HTTP-FLV、HLS、WebRTC 协议。推流端设备采用 ffmpeg + OBS 软件进行流媒体推送,拉流端则可以使用 VLC 播放器或在网页中嵌入 SRS 自带的播放器。测试场景设计为通过 ffmpeg 测试 RTMP 推流功能,然后分别使用 VLC 和 SRS 播放器进行流媒体拉取。
所需资料与工具:
链接:pan.baidu.com/s/1x5DyST...(提取码:epxx)
参考网站与资源:
GitHub:ossrs/srs(SRS 源码)
SRS 官网:ossrs.net/(SRS 官方网站)
GitHub Wiki:ossrs/srs/wi...(SRS 起步知识与文档)
SRS:如何用 NGINX 搭建 HLS 分发集群(链接:qq.com)(关于使用 NGINX 与 SRS 集成搭建 HLS 分发集群的教程)
下载 ffmpeg 官方地址:ffmpeg.org/download.htm...(官方 ffmpeg 下载页面)
1、准备工作与环境搭建(使用 root 用户执行):
1.1、安装 CentOS 基础依赖环境
1.2、关闭与禁用防火墙(避免重启服务器后自动开启)
1.3、将 ffmpeg、yasm 和 kk.flv 等文件拷贝至 CentOS 主目录下(使用主目录作为存储位置)
1.4、安装 yasm 编译器
1.5、安装 ffmpeg
1.6、修改 /etc/ld.so.conf 文件
1.7、配置环境变量
1.8、检查环境变量配置是否生效
1.9、Windows 下安装 VLC 和 OBS 播放器
2、SRS 流媒体服务搭建:
2.1、获取 SRS 源码:
- 通过官网下载
- 通过 GitHub 使用**软件下载(推荐)
- 在国内码云使用 gitee.com/ossrs/srs 下载(推荐)
2.2、配置与编译 SRS:
2.3、查看 SRS 配置文件与支持的协议配置(参考 SRS 官方 Wiki)
2.4、启动与关闭 SRS 服务
2.5、通过网页控制台查看 SRS 状态
3、流媒体服务测试:
3.1、使用 ffmpeg 进行 RTMP 推流测试(注意替换实际值)
3.2、RTMP、HTTP-FLV、HLS 拉流地址获取与测试(VLC 或网页 SRS 播放器)
3.3、使用 OBS 播放器进行推流测试(文件推流、摄像头推流与更多推流方式)
4、扩展与学习资源:
4.1、Windows 下搭建 nginx-rtmp 流媒体服务器(参考教程)
4.2、深入学习 SRS 相关知识与技巧(访问 GitHub Wiki 或 SRS 官方网站)
SRS(simple-rtmp-server)流媒体服务器源码分析--RTMP消息play
本章内容梳理了SRS在接收到RTMP信息后如何进行转发的过程。在此过程中,首先进行代码梳理,作者也在源码熟悉阶段,可能尚未完全梳理完接受到RTMP后信息如何处理、缓存以及转发给直播用户等内容。
SRS源码中的Play流程如下:
1. 进入play流程:本章内容直接从SrsRtmpConn::stream_service_cycle()方法开始梳理。
2. 在接受流程中,客户类型为SrsRtmpConnFMLEPublish “fmle publish”,而在转发流程中,客户类型为SrsRtmpConnPlay。
3. 在http_hooks_on_play()方法中,回调on_play()方法通知vhost,xxx用户已经开始play。
4. 在http_hooks_on_stop()方法中,回调on_stop()方法通知vhost,xxx用户已经停止play。
5. 最重要的是进入该函数。
在函数中:
1.1 根据客户端创建消费者对象:create_consumer(this, consumer)
1.2 为该消费者开启一个独立协程:trd.start() //此处一直不太明白,在play流程中创建一个协程用来做什么?
1.3 进入play主流程:do_playing(source, consumer, &trd);
2. 进入主play循环:do_playing()函数内容众多且非常重要,因此将函数内容全部列出。
2.1 通知消费者准备play
2.2 从消费者列表中取出Rtmp信息(SrsMessageQueue)
2.3 进入play入口
3. 进入SRS发送接口(play):在int SrsProtocol::send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, int stream_id)函数中,进入int SrsProtocol::do_send_messages(SrsSharedPtrMessage** msgs, int nb_msgs),该函数有一个#ifdef SRS_PERF_COMPLEX_SEND宏定义,一般rtmp协议都是要混合音视频数据,在做转发。在往后面看,
最后进入
在该函数中,最重要的一点是send message总出口writen()函数。它负责将转发给直播用户的流转发出去。
4. 最后:play总结
(1)通知client开始play
(2)从消费者列表中取出Rtmp数据
(3)从总出口writev()函数中转发出去
分析流媒体服务器源码:Rtmp发布流程的SRS解析
Rtmp发布流程在SRS服务器中主要通过单线程多协程模型来实现,以简化线程管理和数据同步。以下是关键步骤的解析:
SRS基于state-threads协程库工作,每个协程在单线程内独立执行,无需考虑线程安全问题。程序启动后,通过SrsStreamListener监听并处理TCP连接,创建SrsTcpListener和SrsReusableThread进行并发处理。
当接收到客户端连接时,会根据连接类型创建不同的SrsConnection,如RtmpConn。SrsRtmpConnFMLEPublish负责处理推流至服务器,会进入publishing函数,其中创建SrsPublishRecvThread协程,接收和处理客户端的消息。
消息处理中,视频数据会经过缓存H序列头、HLS分发和消费者分发等步骤。每个消费者有自己的SrsMessageQueue,队列大小由配置文件中的"queue_length"设置,队列满时旧消息会被丢弃,但关键的序列头不会被删除,避免影响客户端解码。
总结来说,SRS的Rtmp发布流程通过高效的单线程协程设计,保证了数据的缓存和分发,同时通过策略性丢包避免了可能导致花屏的问题。
年 C++音视频开发学习路线(ffmpeg/rtsp/srs/webrtc/hls)
音视频工作领域繁复多样,自学时易陷入迷茫。本文整理出九个前景不错的方向:直播、传输、算法、视频播放器、流媒体后端、短视频、音频播放、视频编辑、图像处理。以下为详细学习路线: 音视频基础音频基础知识
视频基础知识
解复用基础知识
FFmpeg开发环境搭建
音视频开发常用工具
FFmpeg实战教程FFmpeg命令
SDL跨平台
FFmpeg基石精讲
FFmpeg过滤器
FFmpeg音视频解复用+解码
ffplay播放器
FFmpeg音视频编码+复用合成视频
ffmpeg多媒体
FFmpeg+ QT播放器
流媒体客户端RTMP推拉流项目实战
RTSP流媒体实战
HLS拉流分析
流媒体服务器SRS源码剖析协程
ZLMediaKit源码剖析
WebRTC项目实战WebRTC中级开发实践指南
WebRTC高级开发-SRS 4.0/5.0源码分析
WebRTC高级开发-MESH模型多人通话
WebRTC高级开发-Janus SFU模型多人通话
Android NDKAndroid NDK开发基础
Android FFmpeg编译和应用
Android RTMP推拉流
Android Ijkplayer源码分析
iOS音视频开发iOS FFmpeg 6.0编译和应用
iOS FFmpeg RTMP推拉流
VideoToolbox硬件编解码
iOS jkplayer编译和应用
iOS ijkplayer编译和应用
音视频项目实战 相关开源网站与地址 本文涵盖音视频全栈开发技术,适合各类技术人员。