首页 > 解决方案 > RxSwift 和 AVKit 的问题

问题描述

我正在构建我希望成为一个简单的 macOS 应用程序,它将从弹出按钮中选择本地存储的视频。

该应用程序是两个窗口 1) AVPlayerView 和 2) 一个简单的控制面板,允许用户在另一个窗口上选择和播放标记的视频。

所有这些在 XCode 中都非常有效。选择保存的 URL 后,将其制成 AVAsset,然后将其制成 AVPlayerItem。我已经成功尝试过的下一个过程(在 Xcode 中)有两种方法:创建 1) PublishSubect 或 2) PublishSubject。在 AVPlayerview 窗口的视图控制器中,我订阅了控制面板的发布主题并使用 AVPlayerItem 更新 AVplayerView 的播放器

 destinationVC.videoSubject.subscribe(
                onNext: { [weak self] item in
                   self?.player.replaceCurrentItem(with: item)
                }
            ).disposed(by: bag)

或者我以类似的方式注入播放器。当我在 XCode 中运行应用程序时,这些选项中的任何一个都可以完美运行。我遇到的问题是当我将其存档以在我的计算机上运行应用程序时,当我选择要播放的视频时,应用程序崩溃。

我将此任务隔离到后台线程,希望能更好地发现错误,但生成的崩溃报告对我来说没有多大意义:

Thread 2 Crashed:: Dispatch queue: Background
0   [myinfo].STSVideoPlayer 0x000000010e655476 closure #1 in closure #1 in VideoViewController.prepare(for:sender:) + 134 (VideoViewController.swift:40)
1   [myinfo].STSVideoPlayer 0x000000010e655499 thunk for @escaping @callee_guaranteed () -> () + 25
2   libdispatch.dylib               0x00007fff6e6d56c4 _dispatch_call_block_and_release + 12
3   libdispatch.dylib               0x00007fff6e6d6658 _dispatch_client_callout + 8
4   libdispatch.dylib               0x00007fff6e6dbc44 _dispatch_lane_serial_drain + 597
5   libdispatch.dylib               0x00007fff6e6dc5d6 _dispatch_lane_invoke + 363
6   libdispatch.dylib               0x00007fff6e6e5c09 _dispatch_workloop_worker_thread + 596
7   libsystem_pthread.dylib         0x00007fff6e930a3d _pthread_wqthread + 290
8   libsystem_pthread.dylib         0x00007fff6e92fb77 start_wqthread + 15

显然,我在这里。您可能拥有的任何见解将不胜感激!

标签: swiftmacosvideorx-swiftavkit

解决方案


我找到了一份更详细的崩溃报告,结果证明我是在强制解开一些 nil。我不确定这在 XCode 中是如何实现的,但现在一切都在顺利进行。


推荐阅读