swift - AVPlayer 有选择地播放文档目录下的 MP3 音频文件

标签 swift avplayer

我正在编写一个播客应用程序,我希望用户播放他们下载的本地文件(如果存在)(而不是流式传输)。流媒体工作正常,但如果找到本地文件,则 AVPlayer 不会播放它(实际上,由于超出我的原因,大约五分之一的文件不是这样的——点击一个播客将在本地播放(我在飞机上模式来验证)。

我相信这是 this question 的 Swift 等价物,但我无法在 Swift 中实现该解决方案。

代码如下:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    var theURL = posts.objectAtIndex(indexPath.row).valueForKey("enclosure") as? String
    var theMp3Filename = theURL!.lastPathComponent

    for i in downloadedList {
        if i as! String == theMp3Filename {
            // If we've d/l'ed the mp3, insert the local path
            theURL = documentsDirectory().stringByAppendingPathComponent(theMp3Filename)
            var path: NSURL = NSURL.fileURLWithPath(theURL!)!
            player = AVPlayer(URL: path)
            player.play()

        } else {
            let podcastEpisode = AVPlayerItem(URL: NSURL(string: theURL!))
            player = AVPlayer(playerItem: podcastEpisode)
            player.play()
        }
    }
}

downloadedList 只是我用下载的文件名生成的数组。我正在进入本地条件,路径看起来是正确的,但 AVPlayer 通常无法正常工作。

任何指导将不胜感激。

最佳答案

在设置播放下载音频的路径变量后立即添加:

let asset = AVURLAsset(URL: path)
let playerItem = AVPlayerItem(asset: asset)
player = AVPlayer(playerItem: playerItem)
player.play()

关于swift - AVPlayer 有选择地播放文档目录下的 MP3 音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29993765/

相关文章:

ios - 从主包中获取本地化字符串

ios - 对所有当前播放的视频执行一个 AVPlayer 的 AVPlayerItemDidPlayToEndTime 操作

ios - 如何替换 MPMoviePlayer 通知?

iphone - 有没有办法用AVPlayer区分直播流和点播文件流?

ios - SKTexture 在 Swift/SpriteKit 中没有正确更新

ios - 使用 Swift 在 iOS 中进行低级图形处理

ios - 为什么此 Objective-C 代码无法播放 AVPlayerViewController 视频?

ios - 如何在 iOS 中的 HLS(m3u8) 播放期间找出当前 TS 段?

Swift:可扩展的静态 TableView

ios - 在 Swift 中使用泛型进行类型推断