【问题标题】:AVPlayer can't load .mov file saved after re-running app via xcodeAVPlayer 无法加载通过 xcode 重新运行应用程序后保存的 .mov 文件
【发布时间】:2017-06-08 11:07:26
【问题描述】:

我有这个应用程序,主要目的是使用 AVFoundation 录制视频,然后保存输出文件委托。

首先,任何正常运行的应用程序都可以正确记录和保存视频,然后我可以将生成的输出文件 URL 加载到我在下一个视图控制器上的 Avplayer 中。

如果不重新运行 Xcode,AVPlayer 会正常播放。我的意思是重新运行是再次点击 Command+R 或单击 xcode 上的播放按钮以重新运行。

当我再次运行应用程序时,我仍然可以看到文件并通过打印列出它们,但是当我尝试访问录制的文件时,应用程序将不再播放视频。看起来视频没有正确加载或任何东西,即使它已经在早些时候工作了。发生这种情况后,我仍然可以继续录制新文件并播放新录制的文件,但不能播放旧文件。

应用程序重建之前的旧文件在 AVPlayer 上看起来像这样

AVPlayer 也会成功地在我的观察者上返回 .readyToPlay 状态。

我很困惑我应该如何继续修复这个问题。

if let videoPreviewController = storyBoard.instantiateViewController(withIdentifier: "VideoPreviewController") as? VideoPreviewController {


                    let url = NSURL(fileURLWithPath: "file:///var/mobile/Containers/Data/Application/61E182ED-D490-4C7D-BAB7-C90D095C7E43/Documents/Thursday,%208%20June%202017%20at%201:47:51%20PM%20Philippine%20Standard%20Time.mov")
                    videoPreviewController.player = AVPlayer()
                    let playerItem = AVPlayerItem.init(url: url as URL)
                    videoPreviewController.player?.replaceCurrentItem(with: playerItem)

                    videoPreviewController.report = relationship
                    videoPreviewController.appointment = self.appointment
                    navigation.pushViewController(videoPreviewController, animated: true)
                }

【问题讨论】:

  • 请向我们展示您用于加载电影网址的代码。
  • @Mozahler 我编辑了帖子以使用用于加载 url 的代码。
  • 好的。那是完美的。不幸的是,重新运行应用程序时路径会发生变化,因此您必须在检索文件之前请求路径。请参阅下面的答案。

标签: swift avfoundation avplayer avplayerviewcontroller avplayeritem


【解决方案1】:

你的问题是这一行:

  let url = NSURL(fileURLWithPath: "file:///var/mobile/Containers/Data/Application/61E182ED-D490-4C7D-BAB7-C90D095C7E43/Documents/Thursday,%208%20June%202017%20at%201:47:51%20PM%20Philippine%20Standard%20Time.mov")

每次重新启动应用时,该路径都会改变 - 您无法对其进行硬编码。您必须向操作系统询问您的文档文件夹的路径并将您的文件名附加到它。

let userDocumentsURL =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]

let fileName = "Thursday,%208%20June%202017%20at%201:47:51%20PM%20Philippine%20Standard%20Time.mov"

let movieURL = userDocumentsURL.appendingPathComponent(fileName)

顺便说一句,这可能是您最初保存文件的方式...获取路径,附加您的文件名并保存。

【讨论】:

  • 实际上我将文件的完整路径保存在数据库中,我只是修改了顶部的代码以缩短和说明重点。我不知道路径的变化,但我会根据这个想法修改我的代码。我会告诉你的。
  • 好的。您不需要将整个路径保存到数据库。您可以保存下面的部分 ..../Documents/ 因为 Documents 上面的某些文件夹会随着时间而改变。
  • 这真的很有帮助,我现在能够让它工作,因为我只是在文件之后保存路径。在你告诉我之前不知道路径会改变。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多