使用 AVPLayer 实现媒体播放器以在 Swift 中的模态视图控制器的弹出视图中播放来自远程 url 的音频 4

Implementing media player using AVPLayer to play audio from remote url in popup view in modal view controller in Swift 4

抱歉,我的标题太长了,因为我试图完成很多事情,试图在模态视图控制器中使用 AVPlayer 从 url 播放音频文件。我使用了 Apple 的基础示例 - AVFoundationSimplePlayer,对其进行了调整并添加了一些内容。 Player 工作正常,但我有几个挑战要解决,如下所述:

这里是完整的源代码Source Code of my project

1) 参考下面的截图,我希望模态 vc 的背景是透明的,这样我就可以看到启动这个模态视图的视图。

2) 在加载模态 vc 之后和突出显示控件的弹出视图出现之前存在延迟。不知道延迟是正常的吗?如果这是正常的,我们对此无能为力,那么我想在此加载期间添加 activity 控件。我不确定何时停止此 activity 控件。

3) 播放器加载控件之前显示错误。不确定它们是什么?

2018-09-05 13:32:56.519014+0100 AVFoundationSimplePlayer-Swift[44042:2403222] Task .<2> finished with error - code: -999 2018-09-05 13:32:57.607560+0100 AVFoundationSimplePlayer-Swift[44042:2403221] Task .<3> finished with error - code: -999

我刚刚查看了您随附的示例代码。在将任何 AVPlayerItem 分配给 player 之前,您正在使用 play 函数。您正在异步加载 asset,并且在下载 asset player 之前无法播放。那么你应该怎么做

asset = AVURLAsset(url: movieURL, options: nil)

/// Just after making an asset and remove the code written in asset's setter
let item = AVPlayerItem(asset: asset!)
player = AVPlayer(playerItem: item)

/// This extra line is to playing the live url. It will play what it downloads in chunks.
if #available(iOS 10.0, *) {
    player.automaticallyWaitsToMinimizeStalling = false
} else {
    // Fallback on earlier versions
}

/// Now your player is ready to play
player.play()

编辑 1
如果您仍在为上面的代码而苦苦挣扎,那么我已经对 PlayerViewController.m 文件进行了更改以解决您的问题。这是该文件的 gist link。搜索 /// TheTiger Change 以查找我所做的更改。现在我可以播放具有适当时间和滑块值的音频文件。

编辑 2
我以为你能看出区别,但没问题,我会更详细地解释。

#3. 关于您的错误消息,这只是一条 Xcode 调试消息,您可以将其禁用。有关详细信息,请参阅

#2. 显示模态有延迟,因为您的 viewWillAppear: 方法中有所有代码,只需将代码移至 videDidAppear:并在执行任何操作之前先让视图出现。它将消除延迟。

#1. 模态 vc 的背景是透明的。所以可以让它透明见this answer.

这个 Sample Code 工作正常。