【Stream】流媒体从入门到入土 (1)

news2024/11/15 4:13:22

最近工作需要学了很多流媒体相关的知识,谁能想象一个月前还是只听说过 HLS 的快乐小屁孩,现在已经背负了巨大的知识的重担了,头发也秃了几根,发际线严重后移

H.264 (AVC) vs H.265 (HEVC)

H.264 和 H.265 是两种视频编码,或者用英语叫 Video Codec / Video encoding。这和 HLS、Dash 不是一层的,HLS Dash 是属于视频传输协议,Protocol。和 FMp4、TS 也不是一层的,虽然都是协议的下一级,但它俩不一样,FMp4 TS 叫视频格式,Format,还有另一个更专业的名称叫 Container,它俩是传输时候传输的东西的外在表现,格式,后缀名,找了一张图描述编码和格式的关系:

265 > 264,H.265 肯定是要比 H.264 先进一点,先进在哪里呢,先进在它的压缩率高,H.265 是有一点算法在身上的


具体高到什么程度,放个表格对比一下:

H.264H.265
HD640x360 at 1 Mbps
960x540 at 2 Mbps
1280x720 at 3.5 Mbps
1920x1080 at 6.5 Mbps
640x360 at 500 Kbps
960x540 at 1 Mbps
1280x720 at 1.7 Mbps
1920x1080 at 3.2 Mbps
UHD支持但是商业上一般不用1280x720 at 1.5 Mbps
1920x1080 at 3 Mbps
2560x1440 at 6.5 Mbps
3840x2160 at 12.5 Mbps

HD 是高清,1080p,UHD 是超清,4K。这俩叫 Resolution 分辨率。里面有这么多不同的 Resolution 是因为在一个 m3u8 里面不止一条路,一般好几条,链接到第二级的 m3u8,player 根据网络情况切换不同的二级 m3u8。具体切换的边界就是上面写的 xx Mbps

可以看到,想播 1080p 的视频,H.265 只要 3.2M 就够了,H.264 得 6.5M,需求要高一倍,所以可以看作平均来说 H.265 的压缩率比 H.264 高一倍

H.265 虽然先进,但先进的东西一般兼容性不大行,尤其是老东西还能用的情况下,这点在开发中是需要仔细考虑的。不过现在好多了,至少 Chrome 终于是支持了。H.265 兼容性:https://caniuse.com/?search=AVC

Anamorphic pixels

Anamorphic pixels 的出现是有一定的历史背景的。在上世纪 90 年代那会基本 720×480,也就是 4:3,后来出现了 1920×1080,纵横比变成了 16:9 了。为了统一这俩发明了这个东西,在 4:3 上选择 0.9 pixel aspect ratio,在 16:9 上选择 1.3 pixel aspect ratio,使得它俩都能充满屏幕,最后显示的效果有点小拉伸,不过问题不大。那么为啥选择这个不上不下的数值作为基准呢,因为当时录像带是 MiniDV 标准的,后来发展到 HDV,它的分辨率是 1440×1080,以这个纵横比作为标准

但是现在基本很少用到这种东西了,设备基本不接收说你给我一个标准纵横比的,我帮你拉伸一下显示给用户,这需要一定的底层支持,不是每台设备都行的。拉伸也可以拉伸,在视频的导出前进行,导出前怎么拉伸都行,但导出出来的都要是方形像素

Framerate

帧率在不同国家有不同的标准:

  • 美国和加拿大:29.97 fps
  • 欧洲和澳大利亚:25 fps
  • 日本:23.976 fps
  • 中国:24 fps

Menifest

用 HLS 协议播放流媒体时,一般拿到的是一个 stream url,它指向一个 m3u8 文件,这个文件就称为 Master Menifest。它会写明 BANDWIDTH,CODECS,RESOLUTION 这些内容,这个一般不需要改动

在 Master Menifest 中会包含一些 Variant Manifest,也是 .m3u8,表示不同编码或尺寸的流。

Variant Manifest 里有一串 xxx.ts,这是视频的本体,称为 Media Segment Manifest。一个 Segment Manifest 一般就 5~6s,而一个 Variant Manifest 中视频加起来要大于 60s

此外,还有 Subtitle Manifest,加载字幕用,放在 Master Menifest 里

HLS

协议 RFC 8216 (https://tools.ietf.org/html/rfc8216)

HLS 是 Sessionless 的,也就是说,每次请求都是独立的,没有持久连接。这样设计的目的是为了更好地利用 HTTP 缓存和代理服务器,提高传输效率。由于没有 Session,因此 HLS 协议可以很好地支持断点续传功能。当然,这也意味着 HLS 协议需要在每次请求时重新建立 TCP 连接,可能会带来一定的开销

关于 ts 片段的时间同步,有两个概念

  • PTS(Presentation Time Stamp),表示视频帧在播放时应该被呈现的时间。
  • DTS(Decoding Time Stamp),表示视频帧在解码时应该被解码的时间。

PTS 和 DTS 的差异可以用来衡量视频帧的延迟,从而确保了视频帧在客户端上的正确排序和同步。

CMAF

CMAF 旨在用一种通用媒体格式来对 TS 和 FMP4 这样的视频分片进行统一

虽然有 CMAF 在,仍然还有很多 HLS 的 CP 使用 TS

LKFS / LUFS

LKFS / LUFS 代表响度,两个是一回事。LKFS 全称 Loudness K-weighted Full Scale。1 LKFS = 1 dB,不是说它俩数值一样嗷,是说它俩的“一格”一样

为什么二者单位一样但是有两个名称呢,这是因为制定这俩标准的两家组织在统一这件事上没有谈拢。。。


先写这么多,下班了,还有其他的到时候出 2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2068487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记】Day 22

一、进度概述 1、机器学习常识23-24,以及相关代码复现 2、python 补完计划(详见 python 专题) 二、详情 23、U-Net 从宏观结构上来讲(以下摘自常识23): U-Net 就是 U 形状的网络, 前半部分 (左边…

[Android studio]无法联网

问题情景: 我的Android studio 更新软件到 Android Studio Koala | 2024.1.1 Patch 1 这个版本后,当前的项目无法正常编译。 因为之前有次更新版本后,我也遇到这个无法编译的问题,后面给解决掉了。想着这次应该也没有事情。 可这…

【通信协议】SPI总线

目录 SPI简介 硬件电路 SPI模式 软件模拟初始化 时序基本单元 起始条件 终止条件 发送与接收 SPI基本单元代码 MySPI.h MySPI.c SPI简介 SPI(Serial Peripheral Interface),即串行外围设备接口,是由Motorola公司开…

在 FPGA 上实现以太网的“低级”指南

如今,我们日常的网络连接大多是通过无线方式进行的,因此很容易忘记以太网。但它仍然是一种有用的标准,是一个可靠的高吞吐量网络链接的好方法。为此,[Robert Feranec] 和 [Stacy Rieck] 编写了一个关于如何在 FPGA 上使用以太网的…

uniapp实现苹果账号登录

appleLogin(){uni.showToast({title: 正在进行苹果账户登录...,icon: none})uni.login({provider: apple,success: (loginRes) > {uni.getUserInfo({provider: apple,success: async(userInfoRes) > {console.log(用户信息, userInfoRes)// userInfoRes.userInfo.identit…

Python和MATLAB和R对比敏感度函数导图

🎯要点 深度学习网络两种选择的强制选择对比度检测贝叶斯自适应估计对比敏感度函数空间观察对比目标量化视觉皮质感知差异亮度、红/绿值、蓝/黄值色彩空间改变OpenCV图像对比度对比敏感度函数模型空间对比敏感度估计眼球运动医学研究空间时间颜色偏心率对比敏感度函…

技术债务已接管经济

“技术债务”一词通常指软件开发过程中的捷径或次优方法。它表现为设计不良的代码、缺乏文档和过时的组件。虽然正确编写的代码和文档是永恒的,但组件和方法却不是。随着时间的推移,软件及其组件可能会成为技术债务。自 40 年前的 20 世纪 80 年代软件行…

Qt使用usbcan通信

一.usbcan环境搭建 可以参照我的这篇博客&#xff1a;USBCAN-II/II使用方法以及qt操作介绍 二.项目效果展示 三.项目代码 这部分代码仅仅展示了部分功能&#xff0c;仅供参考。 #include"ControlCAN.h" #include<QDebug> #include <windows.h> #incl…

位运算,CF 878A - Short Program

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 878A - Short Program 二、解题报告 1、思路分析 顺序处理每个操作&…

数据结构(双向链表)代码详细注释

双向链表 1》双向链表的定义 双向链表也叫双链表&#xff0c;与单向链表不同的是&#xff0c;每一个节点有三个区域组成&#xff1a;两个指针域&#xff0c;一个数据域。 前指针域&#xff1a;存储前驱节点的内存地址 后指针域&#xff1a;存储后继节点的内存地址 数据域&…

Oracle归档日志满了,导致程序打不开,如何解决。

加油&#xff0c;新时代打工人&#xff01; 归档日志错误&#xff0c;登录不上&#xff0c;只能用system 角色登录&#xff0c; 错误提示 oracle 错误257 archiver error connect internal only until freed 解决cmd进入rman RMAN&#xff08;Recovery Manager&#xff09;是一…

喜报 | 麒麟信安“信创云桌面解决方案”在浙江省委党校应用实施,荣膺国家级示范案例

近日&#xff0c;国家工信部网络安全产业发展中心公布了2023年信息技术应用创新解决方案入围获奖名单&#xff0c;麒麟信安“信创云桌面解决方案”在浙江省委党校成功应用实施&#xff0c;获评国家工信部2023年信息技术应用创新解决方案党务政务领域应用示范案例。 据悉&#…

Python、R用RFM模型、机器学习对在线教育用户行为可视化分析|附数据、代码

全文链接&#xff1a;https://tecdat.cn/?p37409 分析师&#xff1a;Chunni Wu 随着互联网的不断发展&#xff0c;各领域公司都在拓展互联网获客渠道&#xff0c;为新型互联网产品吸引新鲜活跃用户&#xff0c;刺激用户提高购买力&#xff0c;从而进一步促进企业提升综合实力和…

Linux--进程管理和性能相关工具

文章目录 进程状态进程的基本状态其他更多态运行(Running或R)可中断睡眠(Interruptible Sleep 或 S)不可中断睡眠(Uninterruptible Sleep 或 D)停止(Stopped 或 T)僵尸(Zombie 或 Z) 状态转换 进程管理相关工具进程树pstreepstree -ppstree -T 进程信息psps输出属性查看进程的父…

C语言-从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存,输人的字符串以“!”结束

题目要求&#xff1a; 从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存,输人的字符串以"!”结束 1.实现程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {FILE* fp fopen("…

新160个crackme - 038-Eternal Bliss.3

运行分析 需要输入注册码 PE分析 VB程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 使用VB Decompiler静态分析&#xff0c;找到关键函数入口点402AC4 ida跳转至402AC4&#xff0c;按F5反汇编&#xff0c;发现有407行代码&#xff0c;配合VB Decompiler得到的代码…

力扣面试经典算法150题:跳跃游戏 II

跳跃游戏 II 今天的题目是力扣面试经典150题中的数组的中等难度题&#xff1a;跳跃游戏II。 题目链接&#xff1a;https://leetcode.cn/problems/jump-game-ii/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个非负整数数组 nums&#xff0…

springboot框架中filter过滤器的urlPatterns的匹配源码

如下图所示&#xff0c;我使用WebFilter注解的方式定义了一个过滤器&#xff0c;同时定义了过滤器的过滤条件 urlPatterns为/*,可能很多人都知道filter的/*代表所有URL都匹配&#xff0c;但是源码在哪里呢 先打断点看一下调用链 然后跟着调用链慢慢点&#xff0c;看看哪里开始…

redis面试(二十)读写锁WriteLock

写锁WriteLock 和读锁一样&#xff0c;在这个地方执行自己的lua脚本&#xff0c;我们去看一下 和read没有多大的区别 KEYS[1] anyLock ARGV[1] 30000 ARGV[2] UUID_01:threadId_01:write hget anyLock mode&#xff0c;此时肯定是没有的&#xff0c;因为根本没这个锁 …

LangGPT结构化提示词编写实践 #书生大模型实战营#

1.闯关任务&#xff1a; 背景问题&#xff1a;近期相关研究发现&#xff0c;LLM在对比浮点数字时表现不佳&#xff0c;经验证&#xff0c;internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题&#xff0c;例如认为13.8<13.11。 任务要求&#xff1a;利用LangGPT优化提示…