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

流媒体基础解析:从压缩到传输的基本了解

流媒体,又称为流式媒体,已成为现代网络视频传输的核心技术。其基本原理是将连续的影像和声音信息经过精心设计的压缩(编码)处理后,妥善存放在网站服务器上。随后,这些压缩后的数据通过网络高效传输至终端用户,最终由播放器通过解压设备(解码器)将这些数据还原,使得节目能够以接近原始发送状态的方式流畅显示出来。

1. 完整的视频流程

视频的播放过程是一个复杂而精细的系统工程,它涵盖了从声音的采集、编码压缩、封装格式的选择、传输协议的确定,到最终在用户侧选择合适的播放器和播放形式。这一流程是端到端的,任何一个环节的疏漏都可能影响到最终的观看体验。

2. 分辨率(不同分辨率的差异)

在探讨视频之前,我们不得不先了解图像的基本构成。图像,本质上是由无数个“带有颜色的点”组成的,这些点就是我们所说的“像素点”。像素,作为图像显示的基本单位,其数量直接决定了图像的清晰度。例如,一幅分辨率为1920×1080的图片,就意味着其长度为1920个像素点,宽度为1080个像素点,总像素数高达2,073,600,这样的图片通常被称为两百万像素的图片。

3. 帧率(I、B、P)

帧率,简单来说,就是在一秒钟时间内传输的图片数量,其单位为fps(帧每秒)。由于人类眼睛的特殊生理结构,当所看画面的帧率高于16fps时,我们就会认为画面是连贯的,这一现象被称为视觉停留。帧率越高,画面就越流畅,但相应的,文件体积也会增大,对带宽、显卡和内存资源的需求也会更高。

在视频压缩过程中,每一帧都代表着一幅静止的图像。为了减小数据容量,实际压缩时会采用各种算法,其中IPB就是最为常见的一种。

  • I帧:表示关键帧,可以理解为这一帧画面的完整保留。解码时,只需要本帧数据就可以完成,因为它包含了完整的画面信息。
  • P帧:前向预测编码帧,表示的是这一帧与之前的一个关键帧(或P帧)的差别。解码时,需要用之前缓存的画面叠加上本帧定义的差别,才能生成最终画面。P帧没有完整画面数据,只有与前一帧的画面差别的数据。
  • B帧:双向预测内插编码帧,是双向差别帧。B帧记录的是本帧与前后帧的差别,解码时不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。网络上的电影很多都采用了B帧,因为B帧的压缩率高,但解码时CPU会比较累。

在视频编码中,GOP(帧分组)是一个重要概念,它指的是两个关键帧之间有多少个编码帧(P帧和B帧)。两个关键帧之间帧的多少直接影响到对图像的解码和编码效率。GOP过长或过短都不是最优选择,需要找到一个合适的平衡点。

3.1 视频压缩说明

视频压缩主要分为帧内压缩和帧间压缩两种:

  • 帧内压缩:也称为空间压缩。当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息。这实际上与静态图像压缩类似,帧内一般采用有损压缩算法。由于帧内压缩是编码一个完整的图像,所以可以独立的解码、显示。但帧内压缩一般达不到很高的压缩比,跟编码jpeg差不多。帧内压缩是生成I帧的算法。
  • 帧间压缩:相邻几帧的数据有很大的相关性,或者说前后两帧信息变化很小的特点。也即连续的视频其相邻帧之间具有冗余信息,根据这一特性,压缩相邻帧之间的冗余量就可以进一步提高压缩量,减小压缩比。帧间压缩也称为时间压缩,它通过比较时间轴上不同帧之间的数据进行压缩。帧间压缩一般是无损的,帧差值算法是一种典型的时间压缩法,它通过比较本帧与相邻帧之间的差异,仅记录本帧与其相邻帧的差值,这样可以大大减少数据量。帧间压缩是生成B帧和P帧的算法。

通过以上对流媒体基础的详细解析,我们可以更深入地理解流媒体技术的核心原理和关键环节,为后续的学习和应用打下坚实的基础。

http://www.xdnf.cn/news/10413.html

相关文章:

  • Linux研学-用户解析
  • Java Spring 之过滤器(Filter)详解与实战
  • Correlations氛围测试:文本或图像的相似度热图
  • 2024年ESWA SCI1区TOP,自适应学习灰狼算法ALGWO+无线传感器网络覆盖优化,深度解析+性能实测
  • DeepSeek 赋能数字孪生城市,筑牢应急管理智慧防线
  • day42 简单CNN
  • C++ list数据删除、list数据访问、list反转链表、list数据排序
  • HCIE-STP复习
  • C# 密封类和密封方法
  • simulink mask、sfunction和tlc的联动、接口
  • CSS专题之层叠上下文
  • 小明的Java面试奇遇之:支付平台高并发交易系统设计与优化[特殊字符]
  • [SC]SystemC在CPU/GPU验证中的应用(三)
  • 【2025年软考中级】第二章 2.1 程序设计语言的基本概念
  • 【C语言】讲解 程序分配的区域(新手)
  • 论文笔记: Urban Region Embedding via Multi-View Contrastive Prediction
  • C#数字图像处理(一)
  • 【Hot 100】55. 跳跃游戏
  • Unity3D仿星露谷物语开发57之保存库存信息到文件
  • ROS2与Unitree机器人集成指南
  • Linux 基础IO(上)
  • javaweb-maven以及http协议
  • (LeetCode 每日一题) 909. 蛇梯棋 (广度优先搜索bfs)
  • 电子电器架构 --- OTA测试用例分析(上)
  • 华为OD机试_2025 B卷_小明减肥(Python,100分)(附详细解题思路)
  • 最卸载器——Geek Uninstaller 使用指南
  • 设备健康管理的战略升维:用预测性维护重构企业竞争力
  • JDK21深度解密 Day 9:响应式编程模型重构
  • 性能优化 - 理论篇:CPU、内存、I/O诊断手段
  • 性能优化 - 理论篇:常见指标及切入点