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

相关文章

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

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. 注意事项