【问题标题】:How to get more info from AVFoundationError如何从 AVFoundationError 获取更多信息
【发布时间】:2020-01-09 22:50:49
【问题描述】:

我正在尝试调试我的“videoGenerator”类;这是一个获取视频 URL 和音频 URL 并将它们与 AVFoundation 合并在一起的类。尝试将一些视频与音乐结合时,我的 exportSession 出现以下错误:

Error Domain=AVFoundationErrorDomain Code=-11838 "Operation Stopped" UserInfo={NSLocalizedFailureReason=The operation is not supported for this media., NSLocalizedDescription=Operation Stopped, NSUnderlyingError=0x600003f089f0 {Error Domain=NSOSStatusErrorDomain Code=-16976 "(null)"}}

我需要知道的远不止这些,我看到错误中有一个内存地址:

NSUnderlyingError=0x600003f089f0

我想知道这是否可能包含有关媒体类型到底有什么问题的更多信息。

我的问题是,除了使用 $arg1 或者这是我唯一的选择之外,我如何在 Xcode 控制台中从这个内存地址获取人类可读的内容?

【问题讨论】:

  • "这真的不是很有用" 你的问题也不是很直观。您希望有人分析您的错误消息,甚至不知道是什么导致了该错误?什么是“视频生成器”?
  • 更新问题更清晰
  • 非常明确的错误:“此媒体不支持该操作。”这是 AVErrorOperationNotSupportedForAsset。我会查看您尝试执行的操作,以及您尝试执行的特定资产类型(包括格式),您的答案可能就在那里。如果没有您正在做什么的详细信息,我们不太可能在这里为您提供帮助。

标签: swift avfoundation avassetexportsession nserror


【解决方案1】:

这个问题对我来说更多的是关于如何调试它,而不是关于阻止导出的实际问题。能够在AVAssetExportSession 上找到方法determineCompatibleFileTypes。此方法报告输入文件可以导出到的格式。结果导出会话无法将 .mp3 文件导出为 .mp4 或 .m4v 格式,导出前的简单检查可以解决此问题:

           exportSession.determineCompatibleFileTypes { (fileTypes) in
                if fileTypes.contains(.m4v) {
                    exportSession.outputFileType = .m4v
                } else {
                    exportSession.outputFileType = .mov
                }
            }

我们对传入的媒体类型有某种严格的控制,因此这种简单程度对我们来说很有效,但是,这可以很容易地扩展以适应更复杂的种类。

Rob Napier's 评论真的很到位,因为答案最终不在此错误的NSUnderlyingError=0x600003f089f0 部分,而是在描述中。我的问题更多的是我没有阅读错误并最初理解它指向一个事实,即我在会话中要求的媒体不支持我提供会话的媒体。

希望这能帮助像我一样快速接触 AV api 的其他人,这花了我几天的时间来追查 :)

感谢任何查看或发表评论的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-29
    • 2011-01-05
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多