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

article/2025/6/23 14:59:45

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

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.hkcw.cn/article/LawYOCsbGq.shtml

相关文章

【MFC】如何设置让exe的控制台不会跟着exe退出而退出

在 Windows 下,MFC 程序(如 echo.exe)如果用 AllocConsole 创建了控制台窗口,默认情况下,当主程序(exe)退出时,控制台窗口也会自动关闭。这是操作系统的行为,不能直接阻止…

图像风格迁移笔记

图像风格迁移 最早实现风格迁移的原理:损失函数内容损失函数风格损失函数融合内容损失函数与风格损失函数可以融合多种风格图片的效果同一个网络可以生成多种风格图像的效果效果改进最早实现风格迁移的原理: 最早出现的论文的实现想法是将风格图像、内容图像、白噪声图像输入…

浏览器隐私:原理与检测方法

引言 浏览器信号和详细信息是在线识别用户和防止欺诈的关键。这些数据包括用户代理字符串、JavaScript设置和屏幕分辨率等信息,有助于区分不同的浏览器。然而,一些用户会有意修改这些信号,使用用户代理欺骗等方法来隐藏自己的身份。虽然一些…

python:在 PyMOL 中如何查看和使用内置示例文件?

参阅:开源版PyMol安装保姆级教程 百度网盘下载 提取码:csub pip show pymol 简介: PyMOL是一个Python增强的分子图形工具。它擅长蛋白质、小分子、密度、表面和轨迹的3D可视化。它还包括分子编辑、射线追踪和动画。 可视化示例‌:打开 PyM…

设计模式——建造者设计模式(创建型)

摘要 本文详细介绍了建造者设计模式,这是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离,便于创建不同表示。文中阐述了其设计意图,如隐藏创建细节、提升代码可读性和可维护性,并通过构建电脑的示例加以说…

深入Java性能调优:原理详解与实战

一、JVM内存模型与GC机制 原理: 堆内存结构: 新生代:Eden 2个Survivor区(Minor GC) 老年代:长期存活对象(Major GC/Full GC) 元空间:类元信息(替代永久代…

acwing刷题

目录 6122. 农夫约翰的奶酪块 6123. 哞叫时间 6122. 农夫约翰的奶酪块 #include <iostream> using namespace std; int res; int n, q; int X[1010][1010]; int Y[1010][1010]; int Z[1010][1010]; void solve() {int x, y, z;cin >> x >> y >> z;X…

姜老师的MBTI课程:MBTI是可以转变的

我们先来看内向和外向这条轴&#xff0c;I和E内向和外向受先天遗传因素的影响还是比较大的&#xff0c;因为它事关到了你的硬件&#xff0c;也就是大脑的模型。但是我们在大五人格的排雷避坑和这套课程里面都强调了一个观点&#xff0c;内向和外向各有优势&#xff0c;也各有不…

leetcode hot100刷题日记——34.将有序数组转换为二叉搜索树

First Blood&#xff1a;什么是平衡二叉搜索树&#xff1f; 二叉搜索树&#xff08;BST&#xff09;的性质 左小右大&#xff1a;每个节点的左子树中所有节点的值都小于该节点的值&#xff0c;右子树中所有节点的值都大于该节点的值。 子树也是BST&#xff1a;左子树和右子树也…

使用yocto搭建qemuarm64环境

环境 yocto下载 # 源码下载 git clone git://git.yoctoproject.org/poky git reset --hard b223b6d533a6d617134c1c5bec8ed31657dd1268 构建 # 编译镜像 export MACHINE"qemuarm64" . oe-init-build-env bitbake core-image-full-cmdline 运行 # 跑虚拟机 export …

探索TiDB数据库:WordPress在分布式数据库上的部署实践

作者&#xff1a; 江湖有缘 原文来源&#xff1a; https://tidb.net/blog/359d4e00 引言 在当今数据驱动的互联网应用中&#xff0c;数据库的性能与可扩展性已成为系统架构中的关键一环。WordPress 作为全球最流行的网站内容管理系统之一&#xff0c;传统上依赖于 MySQL 等…

2.3JS变量和数据类型m

1.认识JS变量 变化数据的记录--变量 2.变量的命名格式 在JS中如何命名一个变量呢 变量的声明&#xff1a;在JS中声明一个变量使用var关键字&#xff08;variable单词的缩写&#xff09;&#xff08;后续学习ES6还有let、const声明方式&#xff09; 变量赋值&#xff1a;使用给变…

深度学习总结(41)

微调预训练模型 另一种常用的模型复用方法是微调&#xff0c;如图所示&#xff0c;它与特征提取互为补充。微调是指&#xff0c;对于用于特征提取的已冻结模型基&#xff0c;将其顶部几层“解冻”​&#xff0c;并对这解冻的几层与新增加的部分&#xff08;本例中为全连接分类…

QT入门学习

一: 新建QT项目 二:QT文件构成 2.1 first.pro 项目管理文件&#xff0c;下面来看代码解析 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11TARGET main# The following define makes your compiler emit warnings if you use # any Qt feature …

kaggle 预测房价

利用简单的线性模型&#xff0c;训练kaggle 房屋数据集&#xff1a; import os import random import tarfile import time import zipfile import pandas as pd import requests import torch from torch import nn from torch.utils import data from matplotlib import pyp…

ASP.NET Core SignalR的基本使用

文章目录 前言一、SignalR是什么&#xff1f;在 ASP.NET Core 中的关键特性&#xff1a;SignalR 工作原理简图&#xff1a; 二、使用步骤1.创建ASP.NET Core web Api 项目2.添加 SignalR 包3.创建 SignalR Hub4.配置服务与中间件5.创建控制器(模拟服务器向客户端发送消息)6.创建…

AI书签管理工具开发全记录(七):页面编写与接口对接

文章目录 AI书签管理工具开发全记录&#xff08;七&#xff09;&#xff1a;页面编写与接口对接前言 &#x1f4dd;1. 页面功能规划 &#x1f4cc;2. 接口api编写 &#x1f4e1;2.1 创建.env,设置环境变量2.2 增加axios拦截器2.3 创建接口 2. 页面编写 &#x1f4c4;2.1 示例代…

“AI 编程三国杀” Google Jules, OpenAl Codex, Claude Code,人类开始沦为AI编程发展的瓶颈?

AI 编程三国杀:Google Jules, OpenAI Codex, Claude code “AI 编程三国杀”是一个形象的比喻,借指当前 AI 编程领域中几个主要参与者之间的激烈竞争与并存的局面。这其中,Google、OpenAI 以及 Anthropic (Claude 的开发者) 是重要的“国家”,而它们各自的 AI 编程工具则是…

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 文件事件处理部分)

分析客户端和服务端网络诵信交互实现 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 命令请求的执行过程案例分析介绍发送命令请求读取命令请求客户端状态的argv属性和argc属性命令执行器第…

第29次CCF计算机软件能力认证-3-LDAP

LDAP 刷新 时间限制&#xff1a; 10.0 秒 空间限制&#xff1a; 512 MiB 下载题目目录&#xff08;样例文件&#xff09; 题目背景 西西艾弗岛运营公司是一家负责维护和运营岛上基础设施的大型企业&#xff0c;拥有数千名员工。公司内有很多 IT 系统。 为了能够实现这些…