FFmpeg开发笔记(四十八)从0开始搭建直播系统的开源软件架构

本文涉及的产品
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,图像资源包5000点
视觉智能开放平台,视频资源包5000点
简介: 音视频技术广泛应用于直播系统,涵盖电视、电脑、手机直播等多种形式,并延伸至在线教育、医疗咨询和安全监控等领域。直播系统涉及实时编解码与传输,技术实现较复杂。从用户角度看,直播系统分为来源方和观看方,但在开发者视角下还需加入云平台作为中转。本文提出一套基于全开源软件的直播系统架构,分为三层:开源直播录制软件(如OBS Studio、RTMP Streamer),开源流媒体服务器(如SRS、ZLMediaKit),以及开源音视频播放器(如VLC media player、ExoPlayer)。这些组件共同构成一个高效、灵活且成本低廉的直播解决方案。

​音视频技术的一个主要用途是直播,包括电视直播、电脑直播、手机直播等等,甚至在线课堂、在线问诊、安防监控等应用都属于直播系统的范畴。由于直播系统不仅涉及到音视频数据的编解码,还涉及到音视频数据的实时传输,因此直播领域采用的网络技术标准比较高,实现起来也比一般的WEB系统复杂。

一、直播系统的概念结构

如果仅仅从用户的角度来看,直播系统无非是直播的来源方和直播的观看方。来源方支起三脚架,打开补光灯,调好手机摄像头,一顿操作之后就卿卿我我地开始直播了。观看方打开直播APP,蹭蹭蹭进了直播间,一会儿捏脸蛋,一会儿刷火箭,玩得不亦乐乎。对于一般开发者来说,直播的来源方和直播的观看方之间,还要加上一层用于中转音视频数据的云平台。那么在硬件层面,就构成了直播系统的概念结构,如下图所示。

live-system1.png

可是这个概念结构太笼统了,因为什么软件都没体现,天晓得要怎么实施呀。对于音视频开发者来说,要提供直播系统的软件架构图,才算有指导意义。纵览网络上的直播系统架构文章,很多属于洋洋洒洒的长篇大论,给出的直播系统架构图百转千折,看起来足够专业足够高大上。然而这种直播大全的内容过于丰富,面对巍峨高山一般的直播架构,普通开发者往往望洋兴叹,不得其门而入。

也有的公司贴心提供了专门的音视频直播SDK,只需开发者在代码中调用SDK提供的API,寥寥数行即可实现直播录制和直播观看的功能。不过这种SDK既存在收费使用的可能性,也难以对业务需求做深入定制,毕竟不像开源软件那般自由,当真是鱼与熊掌不可兼得呀。

二、直播系统的软件架构

有鉴于此,博主经过多年的苦心钻研,摸索出了一套全部采用开源软件的直播系统软件架构,废话不多说先看这幅直播系统的软件架构图。

live-system2.png

上面这个直播系统软件架构图依然分成了三个层次,分别说明如下:

1、开源直播录制软件

开源的直播录制软件主要有两种,一种是电脑端的直播录制软件,以OBS Studio、Streamlabs为代表;另一种是手机端的直播录制软件,以RTMP Streamer、SRT Streamer为代表。
OBS Studio是一个开源的直播录制软件,基于QT+FFmpeg编码,它广泛用于视频录制、实时直播等领域。OBS不但开源,而且跨平台,兼容Windows、Mac OS、Linux等操作系统。有关OBS Studio的源码下载、安装过程和使用说明详见之前的文章《使用OBS Studio开启RTMP直播推流》。
RTMP Streamer是一个安卓手机端的开源RTMP直播推流框架,可用于RTMP直播和RTSP直播,其升级版还支持SRT直播(腾讯视频云就采用SRT协议)。RTMP Streamer支持的视频编码包括H264、H265、AV1等等,支持的音频编码包括AAC、G711、OPUS等等。有关RTMP Streamer的源码下载、安装过程和使用说明详见之前的文章《使用RTMP Streamer开启APP直播推流》。
SRT Streamer是一个安卓手机端的开源SRT协议直播推流框架,可用于RTMP直播和SRT直播。SRT Streamer支持的视频编码包括H264、H265等等,支持的音频编码包括AAC、OPUS等等。有关SRT Streamer的源码下载、安装过程和使用说明详见之前的文章《使用SRT Streamer开启APP直播推流》。

2、开源流媒体服务器

开源的流媒体服务器主要有两种,一种是国外的开源流媒体服务器,以MediaMTX和nginx-rtmp为代表;另一种是国产的开源流媒体服务器,以SRS和ZLMediaKit为代表。
MediaMTX是个开源的轻量级流媒体服务器,它的安装过程参见《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2.2 FFmpeg向网络推流”,使用说明详见之前的文章《详解MediaMTX的推拉流》。
nginx-rtmp是开源WEB服务器Nginx可增强的第三方rtmp模块,可以提供简单的rtmp流媒体服务器功能。Nginx默认没开启rtmp模块,需要在编译nginx时添加rtmp模块,还要修改配置文件才能开启rtmp,有关nginx-rtmp的源码下载、安装过程和使用说明详见之前的文章《Linux编译nginx-rtmp实现RTMP推拉流》。
SRS是一款国产的开源实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT等流媒体协议。SRS与FFmpeg、OBS、VLC、WebRTC等客户端配合使用,提供音视频流的接收和分发的能力,还支持各种音视频协议转换。有关SRS的源码下载、安装过程和使用说明详见之前的文章《Linux环境安装SRS实现视频推流》。
ZLMediaKit是一款国产的开源流媒体服务器,它基于C++11开发,支持多种流媒体协议(RTSP/RTMP/HLS/HTTP-FLV/SRT/WebRTC等),支持的音视频编码标准包括H265、H264、AAC、G711、OPUS等。有关ZLMediaKit的源码下载、安装过程和使用说明详见之前的文章《Linux环境安装ZLMediaKit实现视频推流》。
以上的几种流媒体服务器中,MediaMTX可在Windows系统部署,而nginx-rtmp、SRS、ZLMediaKit均需在Linux系统部署,部署的云平台厂商可选择华为云、阿里云、腾讯云等等。

3、开源音视频播放器

开源音视频播放器主要有两种,一种是电脑端的播放软件,以ffplay和VLC media player为代表;另一种是手机端的播放软件,以ExoPlayer和ijkplayer为代表。
ffplay是FFmpeg自带的播放器程序,可在命令行直接播放音视频文件。在播放音频时,ffplay不仅会让扬声器放出声音,还会在屏幕展示该音频的波形画面。在播放视频时,ffplay会在屏幕展示连续的视频画面,就像看电影看电视那样。有关ffplay的详细用法参见《FFmpeg开发实战:从零基础到短视频上线》一书的“1.4.1 可执行程序”。
VLC media player是一款跨平台的音视频播放器,它不但开源,还兼容多语言,且与FFmpeg深度融合,几乎支持所有的音视频格式。除了常见的音视频文件,VLC media player还能播放RTMP、RTSP等网络串流。有关VLC media player的源码下载、安装过程和使用说明详见《FFmpeg开发实战:从零基础到短视频上线》一书的“3.4.1 通用音视频播放器”。
ExoPlayer是Android官方在Jetpack库中搭载的新型播放器,它的音视频内核依赖于原生的MediaCodec接口,不但能够播放MediaPlayer所支持的任意格式的视频,而且支持包括DASH、HLS、RTMP在内的视频直播协议。有关ExoPlayer的详细用法参见《Android Studio开发实战:从零基础到App上线(第3版)》一书的“14.3.3 新型播放器ExoPlayer”。
ijkplayer是哔哩哔哩公司开发的基于ffplay的手机端开源播放器,它支持rtmp、rtsp、http等流媒体协议的视频直播,还具备B站特有的应用弹幕功能。ijkplayer的源码托管地址在 https://github.com/bilibili/ijkplayer ,可以在App工程中导入它的依赖包,如下所示。

# 必要的依赖包
implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
# 可选的依赖包(其他指令集)
implementation 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'
# 可选的实验的ExoPlayer依赖包
implementation 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'

不过ijkplayer基于FFmpeg 3.4编写,已经很久没有更新了,支持的Android平台仅限于API 9~23,支持的iOS平台仅限于iOS 7.0~10.2.x。
综合以上的开源直播录制软件、开源流媒体服务器和开源音视频播放器,即可搭建完整的直播系统,该系统的效果图详见之前的文章《利用RTMP协议构建电脑与手机的直播Demo》和《利用SRT协议构建手机APP的直播Demo》。

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

目录
相关文章
|
29天前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
154 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
4天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
23天前
|
机器学习/深度学习 算法 数据可视化
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
本文探讨了在量化交易中结合时序特征和静态特征的混合建模方法。通过整合堆叠稀疏降噪自编码器(SSDA)和基于LSTM的自编码器(LSTM-AE),构建了一个能够全面捕捉市场动态特性的交易系统。SSDA通过降噪技术提取股票数据的鲁棒表示,LSTM-AE则专注于捕捉市场的时序依赖关系。系统采用A2C算法进行强化学习,通过多维度的奖励计算机制,实现了在可接受的风险水平下最大化收益的目标。实验结果显示,该系统在不同波动特征的股票上表现出差异化的适应能力,特别是在存在明确市场趋势的情况下,决策准确性较高。
62 5
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
|
2天前
|
消息中间件 监控 小程序
电竞陪玩系统架构优化设计,陪玩app如何提升系统稳定性,陪玩小程序平台的测试与监控
电竞陪玩系统架构涵盖前端(React/Vue)、后端(Spring Boot/php)、数据库(MySQL/MongoDB)、实时通信(WebSocket)及其他组件(Redis、RabbitMQ、Nginx)。通过模块化设计、微服务架构和云计算技术优化,提升系统性能与可靠性。同时,加强全面测试、实时监控及故障管理,确保系统稳定运行。
|
1月前
|
机器学习/深度学习 人工智能 并行计算
【AI系统】Kernel 层架构
推理引擎的Kernel层负责执行底层数学运算,如矩阵乘法、卷积等,直接影响推理速度与效率。它与Runtime层紧密配合,通过算法优化、内存布局调整、汇编优化及调度优化等手段,实现高性能计算。Kernel层针对不同硬件(如CPU、GPU)进行特定优化,支持NEON、AVX、CUDA等技术,确保在多种平台上高效运行。
89 32
|
1月前
|
存储 机器学习/深度学习 人工智能
【AI系统】计算图优化架构
本文介绍了推理引擎转换中的图优化模块,涵盖算子融合、布局转换、算子替换及内存优化等技术,旨在提升模型推理效率。计算图优化技术通过减少计算冗余、提高计算效率和减少内存占用,显著改善模型在资源受限设备上的运行表现。文中详细探讨了离线优化模块面临的挑战及解决方案,包括结构冗余、精度冗余、算法冗余和读写冗余的处理方法。此外,文章还介绍了ONNX Runtime的图优化机制及其在实际应用中的实现,展示了如何通过图优化提高模型推理性能的具体示例。
59 4
【AI系统】计算图优化架构
|
19天前
|
机器学习/深度学习 存储 人工智能
基于AI的实时监控系统:技术架构与挑战分析
AI视频监控系统利用计算机视觉和深度学习技术,实现实时分析与智能识别,显著提升高风险场所如监狱的安全性。系统架构包括数据采集、预处理、行为分析、实时决策及数据存储层,涵盖高分辨率视频传输、图像增强、目标检测、异常行为识别等关键技术。面对算法优化、实时性和系统集成等挑战,通过数据增强、边缘计算和模块化设计等方法解决。未来,AI技术的进步将进一步提高监控系统的智能化水平和应对复杂安全挑战的能力。
|
24天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
77 3
|
22天前
|
前端开发 搜索推荐 安全
陪玩系统架构设计陪玩系统前后端开发,陪玩前端设计是如何让人眼前一亮的?
陪玩系统的架构设计、前后端开发及前端设计是构建吸引用户、功能完善的平台关键。架构需考虑用户需求、技术选型、安全性等,确保稳定性和扩展性。前端可选用React、Vue或Uniapp,后端用Spring Boot或Django,数据库结合MySQL和MongoDB。功能涵盖用户管理、陪玩者管理、订单处理、智能匹配与通讯。安全性方面采用SSL加密和定期漏洞扫描。前端设计注重美观、易用及个性化推荐,提升用户体验和平台粘性。
53 0
|
1月前
|
存储 人工智能 监控
【AI系统】推理系统架构
本文深入探讨了AI推理系统架构,特别是以NVIDIA Triton Inference Server为核心,涵盖推理、部署、服务化三大环节。Triton通过高性能、可扩展、多框架支持等特点,提供了一站式的模型服务解决方案。文章还介绍了模型预编排、推理引擎、返回与监控等功能,以及自定义Backend开发和模型生命周期管理的最佳实践,如金丝雀发布和回滚策略,旨在帮助构建高效、可靠的AI应用。
118 15

热门文章

最新文章