iOS - 如果分辨率超过 1080p,则无法解码 HEVC (H.265) 流

问题描述 投票:0回答:1

我正在使用 Apple 的 VideoToolbox API 来解码 HEVC 流。我正在使用

AVSampleBufferDisplayLayer
层来渲染解码帧。

如果源分辨率为 1080p (1920 X 1080) 或更低,我就能够成功解码帧。

如果分辨率高于 1080p,我会看到黑屏并出现以下错误消息

AVSampleBufferDisplayLayerFailedToDecodeNotification

可选(错误域=AVFoundationErrorDomain代码=-11821“无法解码”UserInfo={AVErrorMediaSubTypeKey=( 1752589105 ), NSLocalizedDescription=无法解码,NSLocalizedFailureReason=媒体数据无法解码。它可能已损坏。, AVErrorMediaTypeKey=vide, AVErrorPresentationTimeStampKey=CMTime: {INVALID}, NSUnderlyingError=0x2830c3390 {Error Domain=NSOSStatusErrorDomain Code=-12909 "(null)"}})

-11821 =

AVErrorDecodeFailed
-12909 =
kVTVideoDecoderBadDataErr

我是否遗漏了任何更高分辨率的内容?我是否需要设置正确的 HEVC 级别、配置文件或层?我不知道该怎么办。

我很感激你们的意见。谢谢!

ios decoder hevc h.265 video-toolbox
1个回答
0
投票

HEVC 引入了切片的概念,其中图像被分成多个切片。很多相机只在高分辨率图像上使用切片,例如海康威视相机将图像分成3个切片,安科相机将高分辨率图像分成4个切片。集合中的最后一个切片在 RTP 标头中设置了标记位,切片标头中还有一个“第一个切片”位 要解码,您需要将这些切片传递到苹果 videotoolbox 解码器中,您必须将所有切片(每个切片都有自己的 4 字节长度字段)放入 1 个 CMBlockbuffer,然后将其传递到 VTDecompressionSessionDecodeFrameWithOutputHandler()

© www.soinside.com 2019 - 2024. All rights reserved.