前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FFmpeg开发笔记(四十八)从0开始搭建直播系统的开源软件架构

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

原创
作者头像
aqi00
发布2024-08-18 11:31:07
1130
发布2024-08-18 11:31:07
举报
文章被收录于专栏:FFmpeg实战

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

一、直播系统的概念结构

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

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

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

二、直播系统的软件架构

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

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

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工程中导入它的依赖包,如下所示。

代码语言:javascript
复制
# 必要的依赖包
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开发实战:从零基础到短视频上线》一书。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、直播系统的概念结构
  • 二、直播系统的软件架构
    • 1、开源直播录制软件
      • 2、开源流媒体服务器
        • 3、开源音视频播放器
        相关产品与服务
        云直播
        云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档