我正在研究HEVC并且对视频压缩非常陌生。我想做的第一件事是看到丢包对解码视频的影响。我想修改解码器,以便我可以在hevc比特流上引入数据包丢失。我将使用NS2生成的错误模式。我应该关注解码器的哪个部分?如何将错误模式插入到hevc比特流中?哪些特定变量决定了帧和切片编号?我使用HM 16.6。感谢
答案 0 :(得分:2)
我曾经开发过一个Python工具,可以攻击比特流并翻转位。我所做的是线性地读取编码器生成的比特流文件,并随机化比特翻转过程。因为我知道NAL单元的结构,从标准规格,我可以知道我的损坏位是什么。开始操作的最佳部分是NAL单元头。视频,序列,切片标头。您可以根据打包过程参数确定它们的位置。已经很久了,所以我忘记了细节。标头不会告诉比特流的所有内容,特别是帧数,切片编号。它可能是基于虱子或基于图块的,或者我忘了还有什么。但是你可以从标题中看出来。现在解码器将在解码时知道帧,切片编号并遵循编码器的指导。所以你需要知道的是标题。检查最新的工作草案并研究标题信息。
答案 1 :(得分:0)
我发布这个作为答案而不是评论,因为我没有评论的声誉。 在HEVC中,切片是帧内的一组连续CTU(编码树单元)。此外,HEVC引入了切片分裂成所谓的切片段,主要用于低延迟设备。当切片被分成多个切片片段时,仅第一切片片段携带解码整个切片所需的头信息。剩余的从属切片段指的是解码期间的初始切片段。每个切片片段(或者如果不使用片段则切片)映射到称为“NAL(网络抽象层)单元”的单个数据单元。 NAL单元是物理信道中的视频分组有效载荷,因此传输期间的分组丢失对应于NAL单元丢失并因此对应于片丢失。 如果您研究HEVC标准,您将遇到另一种称为访问单元的数据单元。访问单元是NAL单元的集合(因此是切片的集合)。在传输期间,分隔符被放置在NAL单元之间以及访问单元之间,以便分别识别每种类型。在HEVC编码流中,访问单元定界符定义为x00 00 00 01,而NAL单元定界符定义为x00 00 01.因此,基本上如果要在给定帧中引入数据包丢失,首先需要识别正确的通过计算比特流中的访问单元分隔符来构造帧。稍后删除所需的NAL单位分隔符之间的所有位。