go语言实战-----31-----流媒体架构设计之直播架构、音视频通话(常见 流媒体协议 解释)

article/2025/8/6 18:37:13

一 直播架构

直播架构例如以某主播在某直播平台直播为例:

  • 1)首先向平台请求直播url。
  • 2)主播得到url。
  • 3)然后主播开始往该url推流,实际最终是推流至流媒体服务器。
  • 4)此时,当有用户观看时,即拉流,那么拉流成功。

可能网页端还会有其它功能,例如主播直播相关信息等等业务。
在这里插入图片描述

1 直播框架示例1

在这里插入图片描述

2 直播框架示例2-某直播学院框架

在这里插入图片描述

3 直播架构-基本逻辑

上面两个图主要是按业务功能来区分模块。而下面这幅图可能更倾向于按代码区分模块。
在这里插入图片描述

4 常见流媒体协议

  • 1)RTP实时传输协议(Real-time Transport Protocol或简写RTP): 用于直接封装音视频数据的封装载体,支持UDP或者TCP传输。

  • 2)RTCP RTP Control Protocol: 一种调整协议,一般配合RTP使用。例如一对一通话时,接收端网络不好,那么接收端会将卡顿的问题通过RTCP协议发送给发送端,发送端收到后调整发送速率,例如降低码率、分辨率等等。

  • 3)RTSP (Real Time Streaming Protocol),RFC2326,实时流传输协议: 安防方面使用最多,例如海康、大华、宇视等品牌都支持取rtsp流播放。可认为是一个容器,内部最终使用RTP、RTCP实现。因为RTP支持TCP、UDP,所以RTSP也是支持的,但也因为这样,所以会比较复杂。
    例如rtsp的端口不管tcp还是udp,都只占用配置好的554端口。而在TCP下,RTCP视频、RTCP音频、RTP视频、RTP音频也是共同占用一个端口,并且也是554。
    但是在UDP下,RTCP在音视频各自占1个,是独立的,RTP也是音视频各自一个,也是独立的。
    此外,RTSP的交互还需要用到信令,它基于SDP协议。

  • 4)RTMP RTMP是Real Time Messaging Protocol(实时消息传输协议): 主要用于推流,拉流比较少,因为需要flash插件,所以在拉流方面逐渐被HTTP-FLV、HLS、WebRTC淘汰。
    并且,RTMP目前主流是TCP,很少会有人支持UDP,如果使用UDP传输的话,那么你就不要选择RTMP。因为RTMP 内部没有处理数据丢包重传,如果用UDP的话,需要自己处理数据重传的问题,所以有的公司把数据传输这块改成quic的协议。

  • 5)HTTP-FLV: HTTP-FLV可以推拉流,但是很少用于推流(估计是效果不如RTMP这些),主要用于拉流,通过http协议,拉取flv协议格式的文件进行播放。flv不能直接在html的video标签播放,需要使用flv.js第三方插件处理。

  • 6)HTTP-MP4: 主要用在点播,没办法用于直播。因为mp4必须要读到尾部即要等mp4流全部下载完后才能播放,而实时流你根本无法读到像文件末尾这样的尾部。
    点播、录播、直播的区别:
    点播就是我们平常点击视频后,它就可以播放,并且我们可以想放就放,可以想暂停就暂停,相当于播放一个文件,时长一般比较短。
    而录播则是对直播的回放,它也是一个名义上的直播,我们不能想放就放,不能想暂停就暂停,例如央视回放某足球赛事,时长一般比较长,因为这类直播是知道视频的固定大小的,MP4对于完整的视频可以把box提到头部去,所以理论上HTTP-MP4应该也是支持录播的(可以自行百度,笔者未验证过)。
    直播比较简单,就是我们平时在某鱼、某牙等等看到的直播。

  • 7)HLS: 苹果公司推出的协议,该协议会将音视频数据切割成多个ts文件,m3u8文件会统计这些ts文件。电视播放目前主要就是使用这种协议。
    优点:流畅度好,跨平台性好,rtmp不能在手机端播放,而http-flv在手机端支持也不是特别友好,而hls可以在web(html原生支持)、手机app(苹果原生的Safari浏览器原生支持)、手机小程序播放。可以无缝切换高清 / 标清的清晰度。例如,当切换清晰度时,后台在推流时会提前准备几套不同码率的视频,即高清、标清的推流。此时假设用户在读取一个时长为5秒的ts文件,在第二秒时,用户切换清晰度,那么下一秒(更具体点应该是下一帧)只需要换成高清的流即可。
    缺点:正因为将音视频数据切成多个ts文件,所以延时比较大,一般在30s到2min左右。

  • 8)WebRTC:Web的实时通话,如果你想要实时通话的话,那么WebRTC是唯一的方案,因为WebRTC才是双向交流的,而其它协议例如RTMP、HTTP-FLV这些要么只适合推流要么只适合拉流。在使用场景方面,在一对一实时通话、安防、云游戏等方面都已经在使用了。例如流媒体服务器SRS、ZLMEDIAKIT,安防方面的LiveGbs等等都已经在使用了。
    因为目前前景都是趋于web化,例如人们看视频直播不想下载手机app、电脑客户端,而是想直接在网页就能观看,所以这个协议目前算是最火的一个。

额外提醒:

1. 视频在传输时不需要再使用zip压缩,效果不大,并且视频在传输前已经使用h264、h265等编码技术进行压缩了。
2. WebRTC不能大规模直播(同时在线5000或者10000人以上算大规模)使用。因为WebRTC走UDP,如果中间转发节点多且网络不好,那么一层一层丢包下来,会导致画面严重失真。
如果直播并且不需要双向通话的话,那么使用rtmp推流,HTTP-FLV、HLS拉流是个很好的选择。

5 直播常用工具

  • 1)推流工具:
    • ffmpeg:https://www.ffmpeg.org/download.html
    • OBS studio:https://obsproject.com/download
  • 2)拉流工具:
    • ffplay播放器: https://www.ffmpeg.org/download.html 。
    • cutv www.cutv.com/demo/live_test.swf flash播放器。
    • vlc播放器。
    • ijkplayer (基于ffplay): 一个基于FFmpeg的开源Android/iOS视频播放器。开源,API易于集成;编译配置可裁剪,方便控制安装包大小;支持硬件加速解码,更加省电简单易用,指定拉流URL,自动解码播放.。
  • 3)流媒体服务器:
    • SRS :一款国人开发的优秀开源流媒体服务器系统。普通C++语法,底层使用协程编写。
    • BMS :也是一款流媒体服务器系统,但不开源,是SRS的商业版,比SRS功能更多。作者也是目前SRS的作者,这个是目前SRS作者在上一家公司(guanzhiyun)的产物。
    • nginx :免费开源web服务器,也常用来配置流媒体服务器,集成Rtmp_module即可。C语言编写。
    • zlmediakit:开源,国人开发的优秀流媒体服务器,使用C++11多线程编写。
    • Red5:是java写的一款稳定的开源的rtmp服务器。
  • 4)压测工具:
    • st-load。

6 直播框架之CDN

CDN主要用来节点分发,能有效提供拉流速度。
概念可以自行百度,代码可以参考SRS源码,SRS实现了follow以及edge边缘模式。

在这里插入图片描述

二 音视频通话

音视频通话那么肯定就是使用WebRTC协议了。目前有三种架构:

  1. Mesh架构。
  2. MCU架构。
  3. SFU架构。

WebRTC的客户端代码可以参考谷歌提供的webrtc案例,服务器可以参考janus,这里就不详细解释,有兴趣的自行去查找相关资料或者课程学习。


http://chatgpt.dhexx.cn/article/f68olHCq.shtml

相关文章

优酷网架构

记得以前给大家介绍过视频网站龙头老大YouTube的技术架构,相信大家看了都会有不少的感触,互联网就是这么一个神奇的东西。今天我突然想到,优酷网在国内也算是视频网站的老大了,不知道他的架构相对于YouTube是怎么样的,…

视频综合平台系统架构分析-1

一. 视频综合平台意义 视频综合平台这类设备之前都称为数字视频矩阵。此类设备以其强大的性能,丰富的功能和极高的集成度成为监控中心核心设备。其架构支持视频综合平台同时接入和管理上千路的高清视频数据而不会卡顿崩溃,特别是内部设计了双高速总线成…

大数据环境下的优酷视频数据分析与推荐系统

优酷视频网是中国最具影响力的网络媒体和具有全球影响力的中文视频网站,研究优酷视频标题的网络抓取技术,研究标题语料库的数据库设计方法和用户接口设计实现方法,标题语料的字词处理方法,实现标题语料字词检索、增删改查、统计、…

优酷、YouTube、Twitter及JustinTV几个视频网站的架构

优酷视频网站架构 一、网站基本数据概览据2010年统计,优酷网日均独立访问人数(uv)达到了8900万,日均访问量(pv)更是达到了17亿,优酷凭借这一数据成为google榜单中国内视频网站排名最高的厂商。硬件方面&am…

已开源 优酷动态模板研发体系为分发提效30%

概述 优酷是一个多屏、多端,以内容分发及内容消费为主体的文娱生态综合体。 在内容分发场景,存在大量的客户端开发需求,包括视觉升级、各场景的业务需求迭代、大小屏设备需求同步等,为了降低研发在跨端场景中组件重复开发的技术成…

优酷youku 1080P 视频下载方法

> PC端下载优酷视频方法,以下是优酷视频下载地址解析python脚本 import re, requests, time, subprocess, json, base64 from hashlib import md5class YouKu:def __init__(self, cookie):self.cookie cookiedef youku_sign(self, t, data, token):appKey 24679788 …

亿级短视频,如何架构?

说在前面 在尼恩的(50)读者社群中,经常指导大家面试架构,拿高端offer。 前几天,指导一个年薪100W小伙伴,拿到字节面试邀请。 遇到一个 非常、非常高频的一个面试题,但是很不好回答&#xff0…

优酷网视频存储架构

视频分享网站总会面对这样两个问题:视频资源能否吸引网民以及视频浏览是否顺畅?中国互联网协会互联网数据中心发布的《2008上半年视频网站数据》显 示,2008年上半年,优酷网月度总访问时长突破1.1亿小时,通过与全行业的…

Java实现简单在线播放器——支持优酷和土豆

今天本来是打算继续写“Java新浪微博客户端开发”的,也实现了“系统托盘”,“点击查看大图”的功能,写到一半,想起上篇博文中有CSDN有一网友提及客户端中播放微博的视频的功能,自己之前完成的客户端也没实现这功能&…

优酷弹幕穿人「渲染技术」揭秘

弹幕穿人功能,能使用户在弹幕刷屏的情况下,又不错过人物画面。因此,弹幕穿人功能一经推出就受到了广大用户的喜爱。 就技术方案而言,弹幕穿人方案可以分为以下两大类:“云端离线人体分割端侧渲染”和“端侧实时人体分割…

学习笔记:RTC时钟

学习笔记:RTC时钟 1.什么是RTC (1) RTC是个独立的定时器。RTC拥有一个连续计数的计数器。 (2)注意:RTC模块和时钟配置系统(RCC_BDCR寄存器)工作在后备区域,系统断电或者复位不会影响RTC的设置和事件&…

STM32-RTC实时时钟

RTC实时时钟 RTC(Real Time Clock)是个独立的定时器。RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期。 RTC模块和时钟配置系统(RCC_BDCR寄…

STM32的RTC时钟的获取

STM32的RTC时钟的获取 硬件 1.STM32F103RCT6最小系统板(mini) 2.下载器(我这里使用的ST-linkV2) 3.纽扣电池 软件 1.keil5 (MDK) 2.STM32CuBe MX(因为比较方便嘛,其实也可以拖库&…

STM32 RTC时钟掉电日期不更新 STM32 HAL库RTC时钟配置

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 STM32 RTC时钟掉电日期不更新 & STM32 HAL库RTC时钟配置 一、STM32CubeMX RTC配置二、RTC初始化三、RTC日期掉电不更新(F1...这里暂时只考虑F103,其他系列未测…

STM32CubeMX | 基于STM32使用HAL库驱动RTC时钟及闹钟功能

STM32CubeMX | 基于STM32使用HAL库驱动RTC时钟及闹钟功能 目录 STM32CubeMX | 基于STM32使用HAL库驱动RTC时钟及闹钟功能(一)工程配置(二)代码编写(三)运行效果 本章实现效果: RTC时钟获取周期…

STM32G4之RTC实时时钟

文章目录 前言一、RTC介绍二、STM32CubeMX配置三、部分源码总结 前言 一、RTC介绍 STM32 的 RTC 外设(Real Time Clock) ,实质是一个掉电后还继续运行的定时器。STM32G4 的 RTC,是一个独立的 BCD 定时器/计数器。 RTC 提供一个日历…

什么是RCT实时时钟?(STM32中RTC时钟源)

什么是RCT(Real Time Clock,实时时钟)? 一、RTC时钟简介 RTC(Real Time Clock,实时时钟)是指安装在电子设备或实现其功能的IC(集成电路)上的时钟,一般会是集成电路&am…

STM32:RTC实时时钟原理

RTC (Real Time Clock):实时时钟 RTC是个独立的BCD定时器/计数器。RTC 提供一个日历时钟,两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。RTC还包含用于管理低功耗模式的自动唤醒单元。 两个32位寄存器包含二进码十进制格式…

STM32物联网项目-RTC时钟

RTC时钟 RTC简介 实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系…

十九、RTC实时时钟

一、.RTC实时时钟工作框图 RTC 由两个主要部分组成,第一部分(APB1 接口)用来和 APB1 总线相连。此单元还包含一组 16 位寄存器,可通过 APB1 总线对其进行读写操作。APB1 接口由 APB1 总线时钟驱动,用来与 APB1 总线连接。 RTC_PRL设置100&a…