当前位置: 首页 > news >正文

没有正确使用HTTP Range Request,导致访问Azure Blob存储的视频没有实现流式播放

引文:

组里的小伙伴在修改视频播放相关的代码,修改之前的方案使用CDN转发,可以实现流式播放,修改之后的代码因为没有正确的使用Http Range Request, 导致画面访问Azure Blob存储的视频没有实现流式播放,整理下线索在这里。

一 解释:

在 Azure 中,通过 Blob 存储直接访问视频文件,通常是基于 HTTP 下载的方式,因此客户端会尝试下载整个文件后再播放。如果通过 CDN 转发,同一个文件能够实现边下边播,这是因为 CDN 支持了分段传输范围请求(Range Request),这是流媒体播放的核心功能。


二 CDN支持流式播放的关键原理

  1. HTTP Range Request

    • Range Request 是 HTTP 协议中的一种功能,允许客户端请求文件的特定字节范围。
    • 播放器会根据播放进度逐步请求文件的后续部分,而不是一次性请求整个文件。
    • Azure Blob 本身支持 Range Request,但播放器需要明确支持这一特性。
  2. CDN的优化

    • 缓存优化
      CDN 缓存视频文件,减少从源服务器(Azure Blob)的读取延迟。
    • 分片预取
      CDN 会根据播放器的请求预取后续视频片段,以确保播放过程的流畅性。
    • 协议适配
      CDN 可以将标准的文件传输协议(HTTP/HTTPS)转换为支持流媒体的格式,例如 HLS 或 DASH,从而更好地支持边下边播。

三 为什么 CDN 可以实现边下边播,而 Blob 不能

  1. 播放器行为差异

    • 如果播放器不支持 Range Request,直接访问 Azure Blob 会尝试完整下载文件。
    • CDN 转发会对客户端的请求进行优化,模拟流媒体的按需加载行为。
  2. 缓存与加速

    • CDN 的缓存机制可以将文件分段处理,让边下边播更加高效。
    • Blob 存储的访问速度相对受限于区域和网络延迟。
  3. 协议转换

    • 使用 CDN 时,可以配置流媒体协议(如 HLS 或 DASH),使视频文件适配播放器的流式播放需求。

四 如何优化 Azure Blob 支持边下边播

如果希望直接通过 Azure Blob 存储实现边下边播,可以考虑以下方法:

1. 确保播放器支持 Range Request
  • 现代浏览器中的 HTML5 播放器和一些第三方播放器(如 Video.js)通常都支持 Range Request。
  • 测试播放器的功能,确保它能够根据文件的特定范围发起请求。
2. 通过转码工具创建流媒体文件
  • 将视频文件转换为支持分段播放的格式(如 HLS 或 DASH)。
  • 可以使用工具如 FFmpeg:
    ffmpeg -i input.mp4 -hls_time 10 -hls_playlist_type vod -hls_segment_filename "segment_%03d.ts" output.m3u8 
  • 生成的 .m3u8 文件和分段 .ts 文件可以直接存储在 Blob 中。
3. 配置 Azure CDN
  • 为 Blob 存储配置 Azure CDN 加速,将视频文件通过 CDN 分发。
  • 在 CDN 配置中启用 Range Request 和流媒体优化功能。
4. 使用 Azure Media Services
  • Azure Media Services 提供了完整的流媒体解决方案,包括 HLS 和 DASH 格式支持。
  • 步骤:
    1. 将视频文件上传到 Azure Blob。
    2. 使用 Azure Media Services 进行编码和动态打包。
    3. 通过 Media Services 提供的流式播放 URL 播放视频。

五 对比:Blob 存储 vs. CDN 的使用场景

功能Azure Blob 存储CDN 转发
下载完整文件支持支持
Range Request依赖播放器支持默认优化
边下边播需要配置播放器和协议支持原生支持(适合流媒体)
性能取决于 Blob 的区域和网络提供全球加速和低延迟
成本较低CDN 可能增加流量成本

六 推荐方案

如果你的视频需要频繁流式播放,建议通过以下方法改进:

  1. 配置 Azure CDN

    • 简单易用,无需修改现有视频文件,适合常规边下边播需求。
  2. 使用 HLS/DASH 格式

    • 适合需要更高播放性能和自适应比特率的场景,推荐结合 Azure Media Services 使用。
  3. 结合播放器优化

    • 确保播放器对 Range Request 和流媒体协议的支持。


七 补充视频流式播放的一些技术概念

视频流式播放(Streaming Media)技术是一项复杂且广泛的技术领域,涉及编码、传输协议、播放协议、网络优化、内容分发等多个方面。以下是详细的技术知识和核心概念。


1. 视频流式播放的基本概念

  • 流式播放(Streaming)
    视频或音频文件通过网络分段传输到用户端,用户可以边下载边播放,无需等待整个文件下载完成。

  • 实时流(Live Streaming)
    实时传输音视频内容,常用于直播场景。

  • 点播流(Video-on-Demand, VOD)
    用户按需播放存储在服务器上的预录制内容。


2. 流式播放的工作流程

  1. 视频捕获与处理

    • 使用摄像头、麦克风等设备录制视频或音频。
    • 将内容转码为适合流式播放的格式(如 MP4、HLS、DASH)。
  2. 视频编码

    • 使用编码器(如 H.264、H.265、VP9、AV1)对视频进行压缩,减少带宽占用。
    • 常见的音频编码格式包括 AAC、MP3。
  3. 分片与打包

    • 将视频按时间切分为小段(如 HLS 中的 .ts 文件或 DASH 中的 .m4s 文件)。
    • 生成播放清单文件(如 .m3u8.mpd)。
  4. 分发与传输

    • 使用流媒体服务器(如 Wowza、Nginx RTMP 模块)或 CDN 分发内容。
    • 客户端通过协议请求数据。
  5. 客户端解码与播放

    • 客户端播放器接收视频片段并进行解码,按时间顺序播放,客户端需要支持流媒体解码,比如 HTML5 视频播放器、Flash 播放器或专有播放器(如 VLC、QuickTime)。

3. 核心技术组件

(1)编码与格式

  • 编码(Codec)
    视频和音频内容的压缩标准:
    • 视频:H.264、H.265、VP9、AV1。
    • 音频:AAC、MP3、Opus。
  • 容器格式
    用于存储编码后的音视频数据:
    • 常见格式:MP4、MKV、WebM、TS。

(2)流媒体协议

  • HLS (HTTP Live Streaming)

    • Apple 开发,基于 HTTP,兼容性强。
    • 优点:支持自适应比特率(ABR)、简单实现。
    • 缺点:延迟较高(通常 6-30 秒)。
  • DASH (Dynamic Adaptive Streaming over HTTP)

    • 开放标准,类似 HLS。
    • 优点:跨平台支持、高度灵活。
    • 缺点:实现相对复杂。
  • RTMP (Real-Time Messaging Protocol)

    • 传统直播协议,低延迟。
    • 缺点:逐渐被 HLS 和 WebRTC 取代。
  • WebRTC

    • 专为实时通信设计,支持超低延迟。
    • 应用场景:视频会议、实时互动直播。
  • RTSP (Real-Time Streaming Protocol)

    • 常用于监控视频,主要适配 IP 摄像头。

(3)分发与优化

  • 内容分发网络(CDN)

    • 提供全球范围内的内容缓存和分发,降低延迟,提高可靠性。
    • 常见服务商:Cloudflare、Akamai、Azure CDN。
  • 自适应比特率(ABR)

    • 根据用户的网络带宽动态调整视频质量,保证流畅播放。
  • 缓存与预取

    • 缓存:将常用内容存储在离用户较近的服务器上,客户端会在播放视频时同时缓冲后续数据,以确保播放的连续性,即使网络连接有短暂的波动也能平滑播放。
    • 预取:提前加载用户可能请求的视频片段。

4. 视频流式播放的优化技术

(1)低延迟优化

  • 使用低延迟 HLS(LL-HLS)或 DASH(LL-DASH)。
  • 减少片段长度(通常从 10 秒减少到 2 秒)。
  • 使用 WebRTC 或 RTMP 替代传统协议。

(2)编码优化

  • 调整编码参数(如分辨率、比特率)以适配网络条件。
  • 使用高效编码格式(如 H.265、AV1)。

(3)缓冲管理

  • 增大播放器缓冲区以应对网络抖动。
  • 平衡缓冲区大小和延迟。

(4)QoS(服务质量)监控

  • 监控用户端的播放体验(卡顿率、起播时间)。
  • 实时调整传输策略。

5. 视频流式播放的应用场景

  1. 在线视频

    • 平台:YouTube、Netflix。
    • 技术:HLS、DASH。
  2. 直播

    • 平台:Twitch、抖音直播。
    • 技术:RTMP、WebRTC。
  3. 远程教育

    • 平台:Coursera、edX。
    • 技术:点播 + 直播。
  4. 视频会议

    • 平台:Zoom、Microsoft Teams。
    • 技术:WebRTC。
  5. 监控系统

    • 技术:RTSP。

6. 视频流式播放的挑战

  1. 网络延迟

    • 挑战:高延迟会影响实时交互体验。
    • 解决方案:使用低延迟协议(如 WebRTC)。
  2. 网络带宽限制

    • 挑战:用户网络差异导致播放不流畅。
    • 解决方案:自适应比特率(ABR)。
  3. 内容安全

    • 挑战:防止盗链和未授权访问。
    • 解决方案:使用 DRM(数字版权管理)和 URL 签名。
  4. 多设备兼容

    • 挑战:不同设备对协议和编码的支持差异。
    • 解决方案:提供多种编码版本和播放协议。

7. 技术栈与工具

  1. 视频编码与处理

    • FFmpeg:开源工具,用于转码、分片。
    • HandBrake:视频转换和压缩。
  2. 流媒体服务器

    • Nginx + RTMP 模块。
    • Wowza Streaming Engine。
    • AWS Elemental Media Services。
  3. 播放器

    • Video.js:开源 HTML5 播放器。
    • Shaka Player:支持 HLS 和 DASH。
    • ExoPlayer:Android 原生播放器。
  4. 调试工具

    • Chrome DevTools:网络请求分析。
    • Wireshark:网络协议分析。




相关文章:

没有正确使用HTTP Range Request,导致访问Azure Blob存储的视频没有实现流式播放

引文: 组里的小伙伴在修改视频播放相关的代码,修改之前的方案使用CDN转发,可以实现流式播放,修改之后的代码因为没有正确的使用Http Range Request, 导致画面访问Azure Blob存储的视频没有实现流式播放,整理下线索在这…...

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测 目录 回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 RVM-Adaboost相关向量机集成学习多输入单输出回归预测是一种先进的机器学习方法,用于处理…...

开发人员学习书籍推荐(C#、Python方向)

作为一名开发人员,持续学习和提升自己的技术水平是至关重要的。如今,技术不断更新换代,新的开发框架、语言和工具层出不穷。对于刚入行的开发者或希望深入某一领域的工程师来说,选对书籍是学习的捷径之一。本篇文章将推荐一些经典…...

Springboot + vue 小区物业管理系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…...

基于深度学习的视觉检测小项目(十二) 使用线条边框和渐变颜色美化界面

到目前为止,已经建立起了基本的项目架构,样式表体系也初步具备,但是与成品的界面相比,还是差点什么。 我的界面效果图: 优秀demo的界面截图: 是的,我的界面太“平” 了,没有立体感&…...

基于OQuPy的量子编程实例探究:理论、实践与展望

基于OQuPy的量子编程探究:理论、分析与实践 一、引言 1.1 研究背景与意义 近年来,量子计算作为一种革命性的计算范式,在科学界与产业界引发了广泛关注。它依托量子力学原理,运用量子比特(qubit)进行信息处理,与传统计算相比,具备并行处理、指数级加速等显著优势,为解…...

【数据库】二、关系数据库

文章目录 二、关系数据库1 关系2 关系数据库3 完整性约束4 关系运算 二、关系数据库 1 关系 域:一组具有相同数据类型的值的集合。 笛卡尔积:所有域(域可相同)中所有取值的组合 例如:D1{1,2,3},D2{A,b}&…...

C#类型转换

C#是静态类型的语言,变量一旦声明就无法重新声明或者存储其他类型的数据,除非进行类型转换。本章的主要任务就是学习类型转换的知识。类型转换有显式的,也有隐式的。所谓显式,就是我们必须明确地告知编译器,我们要把变…...

【Vue】Vue组件--上

目录 一、组件基础 二、组件的嵌套关系 1. 基础架构 2. 嵌套 三、组件注册方式 1. 局部注册: 2. 全局注册: 四、组件传递数据 1. 基础架构 2. 传递多值 3. 动态传递数据 五、组件传递多种数据类型 1. Number 2. Array 3. Object 六、组…...

21、Transformer Masked loss原理精讲及其PyTorch逐行实现

1. Transformer结构图 2. python import torch import torch.nn as nn import torch.nn.functional as Ftorch.set_printoptions(precision3, sci_modeFalse)if __name__ "__main__":run_code 0batch_size 2seq_length 3vocab_size 4logits torch.randn(batch…...

构建高性能网络服务:从 Socket 原理到 Netty 应用实践

1. 引言 在 Java 网络编程中,Socket 是实现网络通信的基础(可以查看我的上一篇博客)。它封装了 TCP/IP 协议栈,提供了底层通信的核心能力。而 Netty 是在 Socket 和 NIO 的基础上,进一步封装的高性能、异步事件驱动的…...

Spring Boot教程之五十六:用 Apache Kafka 消费 JSON 消息

Spring Boot | 如何使用 Apache Kafka 消费 JSON 消息 Apache Kafka 是一个流处理系统,可让您在进程、应用程序和服务器之间发送消息。在本文中,我们将了解如何使用 Apache Kafka 在 Spring Boot 应用程序的控制台上发布 JSON 消息。 为了了解如何创建 …...

Elasticsearch ES|QL 地理空间索引加入纽约犯罪地图

可以根据地理空间数据连接两个索引。在本教程中,我将向你展示如何通过混合邻里多边形和 GPS 犯罪事件坐标来创建纽约市的犯罪地图。 安装 如果你还没有安装好自己的 Elasticsearch 及 Kibana 的话,请参考如下的链接来进行安装。 如何在 Linux&#xff0…...

csp-j知识点:联合(Union)的基本概念

一、联合(Union)的基本概念 联合是C/C语言中一种特殊的数据结构,它的主要特点是所有成员共享同一块内存空间。这意味着在任何给定时刻,联合中只有一个成员是有效的,因为它们都占用相同的物理内存位置。联合的大小取决…...

docker-compose 方式安装部署confluence

一、confluence简介 Confluence是一款由澳大利亚软件公司Atlassian开发的企业协作工具。它是一个基于web的团队协作平台,用于帮助团队成员共享和协同工作的知识、文档、想法和项目。 Confluence提供了一个集中管理和共享文档、知识库和项目信息的平台。团队成员可…...

深入理解计算机系统阅读笔记-第十二章

第12章 网络编程 12.1 客户端-服务器编程模型 每个网络应用都是基于客户端-服务器模型的。根据这个模型,一个应用时由一个服务器进程和一个或者多个客户端进程组成。服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务。例如&#xf…...

网络原理(九):数据链路层 - 以太网协议 应用层 - DNS 协议

目录 1. 数据链路层 1.1 以太网协议 1.1.1 以太网帧格式 1.2 mac 地址 1.2.1 IP 地址和 mac 地址的区别 1.3 帧中的类型字段 1.3.1 MTU - 最长载荷长度 1.3.2 ARP 协议 2. DNS 协议 1. 数据链路层 数据链路层, 是一个底层的层次, 主要用于交换机开发, 对于 Java 开发…...

rtthread学习笔记系列(4/5/6/7/15/16)

文章目录 4. 杂项4.1 检查是否否是2的幂 5. 预编译命令void类型和rt_noreturn类型的区别 6.map文件分析7.汇编.s文件7.1 汇编指令7.1.1 BX7.1.2 LR链接寄存器7.1.4 []的作用7.1.4 简单的指令 7.2 MSR7.3 PRIMASK寄存器7.4.中断启用禁用7.3 HardFault_Handler 15 ARM指针寄存器1…...

【拒绝算法PUA】3065. 超过阈值的最少操作数 I

系列文章目录 【拒绝算法PUA】0x00-位运算 【拒绝算法PUA】0x01- 区间比较技巧 【拒绝算法PUA】0x02- 区间合并技巧 【拒绝算法PUA】0x03 - LeetCode 排序类型刷题 【拒绝算法PUA】LeetCode每日一题系列刷题汇总-2025年持续刷新中 C刷题技巧总结: [温习C/C]0x04 刷…...

今日总结 2025-01-14

学习目标 掌握运用 VSCode 开发 uni - app 的配置流程。学会将配置完善的项目作为模板上传至 Git,实现复用。项目启动 创建项目:借助 Vue - Cli 方式创建项目,推荐从国内地址 https://gitee.com/dcloud/uni - preset - vue/repository/archiv…...

JVM垃圾回收机制全解析

Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

OpenLayers 分屏对比(地图联动)

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...