为什么AVSampleBufferDisplayLayer会因操作中断(-11847)而失败?

Gre*_*reg 5 h.264 ios video-toolbox

我正在使用AVSampleBufferDisplayLayer解码和显示从服务器流式传输的H.264视频。当我的应用进入后台并返回到前台时,解码过程就会搞砸并且AVSampleBufferDisplayLayer失败。我看到的错误是:

H.264 decoding layer has failed: Error Domain=AVFoundationErrorDomain
  Code=-11847 "Operation Interrupted" UserInfo=0x17426c500
  {NSUnderlyingError=0x17805fe90 "The operation couldn’t be completed.
    (OSStatus error -12084.)",
   NSLocalizedRecoverySuggestion=Stop other operations and try again.,
   NSLocalizedDescription=Operation Interrupted}
Run Code Online (Sandbox Code Playgroud)

还有其他人遇到这样的问题AVSampleBufferDisplayLayer吗?这是什么意思?

AVSampleBufferDisplayLayer收到错误后,我尝试销毁并创建一个新错误,但是随后我开始从H.264解码器收到其他错误:

Error Domain=AVFoundationErrorDomain Code=-11821 "Cannot Decode"
UserInfo=0x1740e9700 {AVErrorMediaSubTypeKey=(1635148593),
  NSLocalizedFailureReason=The media data could not be decoded. It may be damaged.,
  NSUnderlyingError=0x174247680 "The operation couldn’t be completed. (OSStatus error -12909.)",
  AVErrorMediaTypeKey=vide,
  AVErrorPresentationTimeStampKey=CMTime: {7/30 = 0.233},
  NSLocalizedDescription=Cannot Decode}
Run Code Online (Sandbox Code Playgroud)

AVSampleBufferDisplayLayer失败之前,我没有收到任何这些错误。

小智 0

重建一个新的 AVSampleBufferDisplayLayer 后,您应该将其与最近的最后一个 IDR 帧一起排队,除了当前帧是 IDR,这意味着,您应该在解码时将 nalus 保存在一个 GOP 中,并在下一个 IDR 到来时将其删除。