设计一个像ESPN一样的实时视频流系统

这篇具有很好参考价值的文章主要介绍了设计一个像ESPN一样的实时视频流系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

功能需求

•直播事件与流之间的最大延迟不超过1分钟•系统应能够适应大量用户(异构交付)•系统应能将视频转换为不同的分辨率和编解码器•系统应具备容错性

视频转换和接收

由于我们正在实时直播整个事件,因此我们不能等待整个视频结束后再开始将其转换为不同的格式和编解码器。为了实现这一点,我们可以使用一种名为RTMP(Real-Time Messaging Protocol)的协议。

•RTMP代表实时消息传输协议(Real-Time Messaging Protocol)•我们使用RTMP是因为它是基于TCP的,因此不会丢失数据,更加可靠。我们需要使用TCP,因为我们不希望在传输过程中丢失数据包。如果我们使用UDP之类的协议,虽然传输速度会更快,但在每个阶段丢失数据将导致视频质量下降。

所需组件

•转换服务:RTMP提供视频流,转换服务将该视频流转换为不同的编解码器和分辨率。它还具有作业调度器,以原始视频流为输入,将其转换为所有的分辨率和编解码器。多个工作节点执行这些任务。当有新的原始视频流时,转换服务将其推送到消息队列。工作节点订阅此消息队列。它们接受输入,并在视频转换完成后将其推送到另一个消息队列。•数据库:为了在发生灾难时不丢失视频数据(我们需要容错性),我们将使用数据库存储原始视频数据。•分布式文件服务:在工作节点处理视频后,还需要将结果存储在文件服务中以实现容错性。•消息队列

架构图

设计一个像ESPN一样的实时视频流系统

向终端用户传输视频

我们将使用内容交付网络(CDN)将视频传输给终端用户。CDN或边缘服务器在地理上更接近终端用户。

由于用户将通过HTTP连接,因此我们可以使用诸如HLS(HTTP Live Streaming)(用于iPhone)或DASH(Dynamic Adaptive Streaming over HTTP)(用于其他操作系统)的协议。

但是,为什么我们要使用HLS/DASH?

HLS/DASH具有自适应比特率。这意味着我们将根据以下因素调整比特率:

•可提供的视频质量•网络速度•客户设备支持的分辨率和格式

由于它是一种流媒体协

议,它可以根据带宽的使用情况和实时需求来合理地进行调整。

注意:与RTMP相比,HLS/DASH是较低质量的连接,因此我们在实时性和质量之间进行了权衡。

为了将视频发送到CDN,我们可以在全球范围内部署服务器。我们将处理后的视频发送到这些服务器,然后服务器将其发送到CDN。

我们将使用RTMP将视频发送到服务器。

但是,为什么我们不直接将处理后的视频发送到CDN?

跨内容交付网络的传播速度可能不太高。因此,如果我们将处理后的视频发送到CDN,而它们在不同位置拥有服务器,则SLA保证可能无法与实时直播保证相匹配。

每当客户端请求视频时,其中一个服务器将客户端引导到CDN上的一个端点。客户端可以使用此端点来获取视频。

缓存

我们将让CDN负责缓存视频。尽管您可以将热门视频片段缓存在内存中,但为了减轻服务器负载,我们可以缓存客户端 <-> 终点的映射。这样,我们可以直接获取终点,而无需每次重新路由。

设计一个像ESPN一样的实时视频流系统

容错性

为了使我们的系统更具容错性,我们可以使用负载均衡器。如果其中一个服务器离线,我们可以将请求重定向到其他服务器。

折衷方案

•使用WebRTC与使用HLS/DASH进行视频传输。HLS/DASH是基于HTTP并通过TCP工作的。它们保持有序传输。另一方面,WebRTC基于点对点,并通过UDP工作。它可能还会发送无序的数据块。由于我们希望保持视频质量,因此我们将使用HLS/DASH。

所需组件

•内容交付网络(CDN)•在不同位置的服务器

架构图

设计一个像ESPN一样的实时视频流系统

容量估算

每个直播流需要处理多少个视频?

假设:

•捕捉的视频为8k。•我们要提供的分辨率:1080p、720p、480p和360p。•编解码器数量:4•板球比赛持续时间:10小时•视频大小:10GB

720p视频大小:10/2 = 5GB

480p视频大小:10/4 = 2.5GB

360p视频大小:10/8 = 1.25GB

所有分辨率所需的总存储空间:18.75GB

所有分辨率和编解码器所

需的总存储空间:18.75 * 4 = 75GB

在单个直播流中需要向CDN传输多少数据?

假设:

•用户数量:10,000,000•使用高清分辨率的用户比例:50%•观看直播流的用户比例:50%

标准分辨率下的视频大小:10/4 = 2.5GB

因此,总数据传输量 = SUM(视频类型的大小 * 类型的用户数量) * 平均观看百分比

= (10 GB * 50/100 * 10⁶ + 2.5 GB * 50/100 * 10⁶) * 50/100 = 3.125 * 1000000GB = 3.125 PB

从事件到用户设备传输数据需要多长时间?

假设:

•用户每秒消耗的数据量 = 10GB / 10小时 = 300 kB/sec•将300kB数据传输到最近的CDN所需时间 = 1秒•从CDN向用户传输300kB数据所需时间 = 150毫秒

总传输时间 = 1秒 + 0.15秒 + 0.15秒 = 1.3秒

假设ffmpeg运行速度为视频速度的2倍,处理时间为1 / 2 = 0.5秒

总延迟时间 = 1.3秒 + 0.5秒 = 1.8秒

通过以上内容,我们设计了一个类似ESPN的实时视频流系统,该系统具备容错性、支持不同分辨率和编解码器的视频转换,以及使用CDN进行视频传输。我们还进行了容量估算,估计了处理视频、传输数据和传输延迟所需的时间。文章来源地址https://www.toymoban.com/news/detail-469756.html

到了这里,关于设计一个像ESPN一样的实时视频流系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【精选】基于OpenCV的实时视频流车牌识别(源码&教程)

    近年来,智能交通系统(ITS)在我国应用日益广泛。作为ITS重要组成部分的自动车牌识别系统在交通流量检测、交通诱导控制、违章车辆监控等方面有着广泛的应用,是确保道路安全畅通的重要手段,也为统计有关资料,为管理者决策提供有效数字依据的重要途径。由于一般的识别系

    2024年01月23日
    浏览(58)
  • FFmpeg+SDL实时解码和渲染H264视频流

    之前实现了Android手机摄像头数据的TCP实时传输,今天接着聊聊,如何在PC端把接收到的H264视频流实时解码并渲染出来。这次使用的语言是C++,框架有FFmpeg和SDL2。 解码部分使用FFmpeg,首先,需要初始化H264解码器: 然后,使用创建TCP连接到我们的Android端,读取数据包: 再把每

    2024年02月13日
    浏览(45)
  • Qt推流程序自动生成网页远程查看实时视频流(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)

    推流程序将视频流推送到流媒体服务器后,此时就等待验证拉流播放,一般可以选择ffplay命令行播放或者vlc等播放器打开播放,也可以选择网页直接打开拉流地址播放,一般主流的浏览器都支持网页直接播放hls/m3u8/webrtc类型的视频流,而且推流的主要目的可能就是为了能够在

    2024年02月05日
    浏览(75)
  • 基于OpenCv+Django的网络实时视频流传输(前后端分离)

    秋风阁——北溪入江流:https://focus-wind.com/ 秋风阁——基于OpenCv+Django的网络实时视频流传输(前后端分离) 使用OpenCv捕获摄像机画面后,我们有时候需要将画面显示在界面上。本博客基于Django的前后端分离模式,将视频流从后端读取,传送给前端显示。 在使用Django进行视频

    2024年02月08日
    浏览(49)
  • [chatGPT] 如何通过JNI在Android上显示实时视频流

    相机拍摄的画面通过local socket 获取,所以C++的代码可以轻易的获取到每一帧视频数据,需要通过JNI 让 Android显示出来,方法有两种,一种是在Android内创建回调函数使用Bitmap 和ImageView 进行赋值显示,另一种也就是ChatGPT完成的,Android将surface 传递到JNI层内,C++来完成赋值和渲

    2023年04月26日
    浏览(81)
  • VUE3 播放RTSP实时、回放(NVR录像机)视频流(使用WebRTC)

    1、下载webrtc-streamer,下载的最新window版本 Releases · mpromonet/webrtc-streamer · GitHub  2、解压下载包  3、webrtc-streamer.exe启动服务 (注意:这里可以通过当前文件夹下用cmd命令webrtc-streamer.exe -o这样占用cpu会很少,直接双击exe文件会占用cpu) cmd  webrtc-streamer.exe -o 启动如下图所示,

    2024年04月12日
    浏览(60)
  • 记录对接海康威视摄像头web端实时预览:Linux+ffmpeg+nginx转换RTSP视频流(完整版实现)

            需求:web端实现海康摄像头实时预览效果         由于市面上大部分网络摄像头都支持RTSP协议视频流,web端一般无法直接使用RTSP实现视频预览,本篇使用ffmpeg对视频流进行转换,最终实现web端实时预览。         工具介绍:ffmpeg、nginx、vue         介

    2024年01月25日
    浏览(53)
  • Python 实现海康机器人工业相机 MV-CU060-10GM 的实时显示视频流及拍照功能

    一、背景介绍 1、最近项目中需要给客户对接海康机器人工业相机 MV-CU060-10GM; 2、客户要求通过部署的管理平台,可以在页面上实现如下功能: 1)相机视频流开始预览; 2)相机视频流停止预览; 3)相机拍照功能。 需求背景:客户需要对生产的产品进行定期抽样质检,其中

    2024年02月08日
    浏览(73)
  • Android MediaCodec将h264实时视频流数据解码为yuv,并转换yuv的颜色格式为nv21

    初始化mediacodec 处理数据,解码h264数据为yuv格式 这里传入的是h264格式的实时视频流数据。 处理获取到的nv21颜色格式的yuv数据  yuv视频数据颜色格式转换 h264实时视频流的数据来源 写入h264视频流到sdcard中 rtsp获取h264实时视频流数据  编写C代码加载ffmpeg库 源码地址 https://gi

    2024年01月17日
    浏览(60)
  • Qt编写视频监控系统73-不同视频流不同类型的判断和解析(http/m3u8/rtsp/rtmp等)

    这套视频监控系统大概从2018年起步整体框架,一步步积累到现在,中间经历了无数次的各种视频文件、视频流、视频设备的播放测试,比如光视频文件就有mp4/wmv/rmvb/mkv/avi等格式,视频设备有本地USB摄像头、桌面等,视频流有rtmp/rtsp/rtp/http等,其中http开头的就有视频文件和视

    2024年02月05日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包