使用 AVPLayer 实现媒体播放器以在 Swift 4 的模态视图控制器的弹出视图中播放来自远程 url 的音频
Posted
技术标签:
【中文标题】使用 AVPLayer 实现媒体播放器以在 Swift 4 的模态视图控制器的弹出视图中播放来自远程 url 的音频【英文标题】:Implementing media player using AVPLayer to play audio from remote url in popup view in modal view controller in Swift 4 【发布时间】:2018-09-05 12:41:01 【问题描述】:抱歉,我的标题太长了,因为我试图完成很多事情,试图在模态视图控制器中使用 AVPlayer 从 url 播放音频文件。我使用了 Apple 的基础示例 - AVFoundationSimplePlayer,对其进行了调整并添加了一些东西。播放器工作正常,但我几乎没有要解决的挑战,如下所述:
这里是完整的源代码Source Code of my project
1) 参考下面的截图,我希望modal vc的背景是透明的,这样我就可以看到启动这个modal view的view。
2) 在加载模态 vc 之后以及在弹出视图出现并突出显示控件之前存在延迟。不知道延迟正常吗?如果这是正常的并且我们对此无能为力,那么我想在此加载期间添加活动控制。我不确定何时停止此活动控制。
3) 在播放器加载控件之前显示错误。不确定它们是什么?
2018-09-05 13:32:56.519014+0100 AVFoundationSimplePlayer-Swift[44042:2403222] 任务 . 以错误结束 - 代码: -999 2018-09-05 13:32:57.607560+0100 AVFoundationSimplePlayer-Swift[44042:2403221] 任务 . 以错误结束 - 代码: -999
【问题讨论】:
【参考方案1】:我刚刚检查了您随附的示例代码。在将任何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 调试消息,您可以禁用它。详情请参阅this answer。
#2. 显示模式存在延迟,因为您在 viewWillAppear:
方法中拥有所有代码,只需将该代码移动到 videDidAppear:
并让视图首先出现,然后再执行任何操作.它将消除延迟。
#1. 模态vc的背景要透明。所以可以让它透明见this answer。
这个Sample Code 工作正常。
【讨论】:
感谢您查看代码。对不起,我不是专家编码器,我还在学习。我对 Apple 的示例代码本身有点不知所措,所以不确定哪段代码在哪里。如果您在修改过的文件中有它,那么您可以在此处复制并粘贴它吗?发送 实际上我已经离开了这一天并通过移动应用程序在线......但是现在'asset = AVURLAsset(url:movieURL,options:nil)'在您的项目中搜索这一行并添加代码在这里。首先尝试简单的播放器,因为您不需要那么多代码来实现此目的。您已经创建了资产.. 制作一个 playerItem 并将其传递给 AVPlayer 并播放。 是的,我试过了,没用。它没有加载。可能是我做错了什么。另一件事是您的解决方案将解决我的哪个问题? PL。参考我上面提到的3个问题。 第三个问题,也有错误和弹出延迟。并尝试将其作为单独的问题,因为它太宽泛,任何人都无法同时回答所有三个问题。 感谢您花时间和精力研究代码。我复制并粘贴了您的整个代码,但加载和播放仍然出现延迟,并且错误仍然存在。以上是关于使用 AVPLayer 实现媒体播放器以在 Swift 4 的模态视图控制器的弹出视图中播放来自远程 url 的音频的主要内容,如果未能解决你的问题,请参考以下文章
AVPlayer自定制视频播放器——耳机线控中断以及AVAudioSession的使用
如何从 mediaPickerController 获取 mediaItemCollection 以在 AVPlayer 上播放?
如何正确删除/释放 AVPlayer/AVPlayerItem?
ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调