视频编码帧内刷新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

相关文章

VSCode中C/C++编码乱码问题的两种解决方法

《VSCode中C/C++编码乱码问题的两种解决方法》在中国地区,Windows系统中的cmd和PowerShell默认编码是GBK,但VSCode默认使用UTF-8编码,这种编码不一致会导致在VSC... 目录问题方法一:通过 Code Runner 插件调整编码配置步骤方法二:在 PowerShell

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

流媒体平台/视频监控/安防视频汇聚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