专栏首页大话swift视频解析中的基础常识(一)名词解释

视频解析中的基础常识(一)名词解释

视频是由一帧一帧的静态图片连续播放形成的,因此一帧就是视频中一个静态的画面

关键帧

关键帧也被称之为I帧,是帧编码中最重要的帧。视频编码是按照进行的,每一组称为GOP(group of picture)。GOP之间是有关联系的,编码的关系只在一个GOP之间处理,关键帧是一幅完整的画面,GOP之间的帧都是不完整的,需要关键帧、前面帧、后面帧等一起运算得到。__关键帧的间隔条件会影响到GOP的长度,继而影响到读取GOP的速度,如果关键帧间隔设置过大,在必须用到关键帧的场景就可能需要B/P帧来代替,这样会降低画面质量。

B帧

前后参考帧也称为B帧,参考前面 后面两帧的变化合成当前帧数据

P帧

向前参考帧也称为P帧

帧关联 I B P

I帧是帧内压缩,因此自身是完整的可以直接解析出数据,因此I帧的单位时间数量和自身的数据量决定了视频数据解析出的画质。

而P B帧是帧间压缩,是根据算法等相互参考生成的。以I帧为基础,预测P帧,再一 I P帧为基础预测B帧,最后将I帧数据和预测的差值存储和传输。

通常来货I帧压缩率在 7 P帧为20 B帧可达到50,因此fps一定下I帧是决定画质的关键点

帧率

一秒内传输图片的帧数,通常就是我们说的fps 。fps数值越大则代表传输数据越多画面越细腻流畅。当然FPS越高对显卡性能要求越高

数据传输计算(示例)

图片分辨 1024_768 页面为 24fps 那么1s数据传输是 1024_768*24像素数据

针对 H.264

在直播中我们通常采用H.264,想要进行直播数据编码因此一些理论知识也是必不可少的

NALU

全程为 New他work abstract layer unit(网络抽象层单元),包含一个字节的头信息和一系列来自VCL称为原始字节序列的字节流(RBSP),H264在网络上传输的是NALU,NALU的结构:NAL头+RBSP

SPS

H264中第一个NALU是SPS(薛烈璀璨好数据集 Sequence Parameter Set)

SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。所谓的编码视频序列即原始视频的一帧一帧的像素数据经过编码之后的结构组成的序列。

PPS

H.264码流第二个 NALU是 PPS(图像参数集Picture Parameter Set)

通常情况下,PPS类似于SPS,在H.264的裸码流中单独保存在一个NAL Unit中,只是PPS NAL Unit的nal_unit_type值为8;而在封装格式中,PPS通常与SPS一起,保存在视频文件的文件头中。

IDR (特殊的I帧)

H.264码流第三个 NALU 是 IDR(即时解码器刷新)

I 帧与IDR的区别

I和IDR帧都是使用帧内预测的。它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I帧区别开,所以才把第一个首个I帧叫IDR,这样就方便控制编码和解码流程。IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列开始编码。而I帧不具有随机访问的能力,这个功能是由IDR承担,IDR会导致DPB(参考帧列表——这是关键所在)清空,而I不会。IDR图像一定是I图像,但I图像不一定是IDR图像。一个序列中可以有很多的I图像,I图像之后的图象可以引用I图像之间的图像做运动参考。对于IDR帧来说,在IDR帧之后的所有帧都不能引用任何IDR帧之前的帧的内容,与此相反,对于普通的I-帧来说,位于其之后的B-和P-帧可以引用位于普通I-帧之前的I-帧。从随机存取的视频流中,播放器永远可以从一个IDR帧播放,因为在它之后没有任何帧引用之前的帧。但是,不能在一个没有IDR帧的视频中从任意点开始播放,因为后面的帧总是会引用前面的帧。

说白了就是:

IDR作为起始帧,拿到IDR可以纠正错误,可以从新纠正参数刷新从来。并未我不参考以往,所有均从我开始

本文分享自微信公众号 - 大话swift(gh_ca2266b7cab0),作者:YuLongLi

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • golang之 context

    context这个已成为每个框架的标配啦,今天我们看看context常用的几种函数……

    大话swift
  • gin框架之集成验证码(captcha)

    在开发的过程中,我们有些接口为了防止被恶意调用,我们会采用加验证码的方式,例如:发送短信的接口,为了防止短信接口被频繁调用造成损失;注册的接口,为了防止恶意注册...

    大话swift
  • iPadOS上启动黑屏翻车问题分析(一)

    iOS的每次大版本更新都会是iOSer的苦难之旅,这次的iPadOS估计肯定也不例外当然了这次估计是针对iPadOS的苦难而已吧。在iOS13以下的iOS中iP...

    大话swift
  • 如何更改Json.NET的序列化规则

    我想要使序列化出来的JSON都是小写,可以通过建立 LowercaseContractResolver:DefaultContractResolver

    javascript.shop
  • 爬取抖音的回复信息

    由于我姐开了一个抖音,然后说信息太多回复不过来。写一个小爬虫查看一下有多少购买的需求。

    zx钟
  • Fuchsia 的开发语言政策与解读

    我在之前发布过的 《Fuchsia 是什么?Fuchsia OS 的未来如何?》 中介绍过 Fuchsia 的大体情况,也收到了大家对于 Fuchsia OS ...

    恋猫
  • Hexo问题解决——持续更新

    什么都弄好了,然后去访问的时候发现我的所有的文章都指向一个链接/post/default,然后我立即想起来了上次我更改了post的permalink,现在看来应...

    wsuo
  • docker exec执行多个命令详解 原

    docker exec命令能够在运行着的容器中执行命令。docker exec命令的使用格式:

    拓荒者
  • 初创团队-App如何在夹缝中生存

    2015迎来三足鼎立,国内三大Android渠道迎来又一个春天,游戏应用在大数据的压力下分类前十位稳坐榜单,新入市小白开发者该如何选择开发类型?游戏还是应用?用...

    大葡萄
  • Verizon 发布《 2018 年数据泄露调查报告》:勒索软件已成为最流行的恶意软件

    据外媒报道,美国电信巨头 Verizon 于本周二在其 2018 年数据泄露调查报告 (DBIR)中称,勒索软件攻击事件数量在过去一年中翻了一倍,成为最流行的恶...

    周俊辉

扫码关注云+社区

领取腾讯云代金券