使用 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 工作正常。
抱歉,我的标题太长了,因为我试图完成很多事情,试图在模态视图控制器中使用 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 工作正常。