视频编码帧内刷新Intra refresh

2024-04-26 03:58

本文主要是介绍视频编码帧内刷新Intra refresh,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

视频编码帧内刷新Intra refresh

为了防止视频传输错误导致的视频无法解码问题,传统的视频码流通常是IPPPIPPP码流结构,即每个GOP的第一帧为全Intra predicted(I 帧),这样即使该GOP中某一帧丢失,最坏的情况下也只影响一个GOP内的帧,等到下一个GOP视频即可恢复正常,但是这种GOP结构码率不够平稳,在I帧的时候导致码率突然变高,非常不利于网络传输。帧内刷新技术可以使码率平稳,降低码流传输时延,并且仍然可以在传输出错的情况下快速恢复。

帧内刷新原理

帧内刷新的结构为IPPPPPP…,除了第一帧为I帧,后面全部是P帧,选择一组帧作为刷新周期,这组帧里面的所有P帧中都有一条,强制其在编码的时候使用帧内预测。其他部分使用率失真优化进行预测模式选择即可。
在这里插入图片描述
如图所示,假设刷新周期为4,第一帧的第一个竖条强制使用帧内预测,第二帧的第二条强制使用帧内预测,直到第四帧的第四条,此时完成一轮刷新。当然这些帧都是P帧。

帧内刷新的优点

1、码率稳定。所有的P帧由于都有一条区域使用帧内预测模式,其他区域运行率失真优化选择最优模式,因此每个P帧的大小波动不会太大。
2、降低时延。时延降低主要体现在没有I帧上,I帧通常较大,在网络传输的时候需要将一帧分成很多个包来传输,而在解码端必须等所有的包都到达后才能开始解码,所以I帧是造成视频码流传输时延大的主要原因,也就是说瓶颈在I帧这里。在帧内刷新技术上,虽然P帧比传统GOP结构的P帧要大一些,但总体趋于平稳,并且比I帧要小很多,因此可以快速传完一帧并解码。根本上来讲其实就是类似传输一个大文件耗时较长,而小文件较快。
3、关于错误恢复,这一点想了很久才明白。我们先考虑一种恢复较快的情况,即运动向量是0的情况,每一帧中的区块都是参考其前一帧的相应位置的块。假设第一帧丢失,那么第二帧只有第二条区域可以正常解码,第三帧的第二条参考第二帧的第二条,那么第三帧的第二条和第三条可以正常解码,同理,第四帧的二、三、四条可以正常解码,到第五帧时,整个帧都可以正常解码,至此视频恢复正常播放,只需要一个刷新周期就恢复了。再来考虑极端情况,还是从第二帧开始,第二帧只有第二条正常解码,加入第三帧的除第三条外的其他区域都是参考的第二帧的非第二条区域,那么第三帧就只有第三条可以正常解码,同理第四帧只有第四条正常,这样是永远也无法恢复的。但是现实是不可能这样的,总有参考到前一帧的帧内刷新条上的块,这样正常的块就会越来越多,从而慢慢恢复正常。

结束!

这篇关于视频编码帧内刷新Intra refresh的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936654

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

form表单提交编码的问题

浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded; charset=UTF-8        那么我们如果需要修改编码,不使用默认的,那么可以如下这样操作修改编码,来满足需求: hmtl代码:   <meta http-equiv="Conte

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

基于树梅派的视频监控机器人Verybot

最近这段时间做了一个基于树梅派 ( raspberry pi ) 的视频监控机器人平台 Verybot ,现在打算把这个机器人的一些图片、视频、设计思路进行公开,并且希望跟大家一起研究相关的各种问题,下面是两张机器人的照片:         图片1:                   图片2                    这个平台的基本组成是:

PC与android平板通过浏览器监控Verybot的视频

下面这个视频是PC与android平板通过浏览器监控Verybot的视频:           http://v.youku.com/v_show/id_XNjYzNzYyMTIw.html