AVPlayer избирателно възпроизвежда MP3 аудио файл в директорията с документи

Пиша приложение за подкаст и искам потребителят да възпроизведе локалния файл, който е изтеглил, ако съществува (вместо да го предава поточно). Стриймингът работи добре, но ако локалният файл бъде намерен, той не се възпроизвежда от AVPlayer (това всъщност не е вярно за един от около 5 файла по причини извън мен - докосването на един подкаст ще се възпроизведе локално (в самолет съм режим за проверка).

Вярвам, че това е еквивалентът на 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 обикновено не работи.

Всякакви насоки ще бъдат оценени.


person allocate    schedule 01.05.2015    source източник
comment
Можете да използвате AVAudioPlayer()   -  person cmashinho    schedule 01.05.2015
comment
Започнах да използвам AVPlayer, защото AVAudioPlayer не играеше добре с поточно съдържание. И не искам да използвам и двете.   -  person allocate    schedule 01.05.2015
comment
Имате проблем в линията на пътя. Използвайте NSURL(fileURLWithPath: "path"), наистина работи.   -  person cmashinho    schedule 01.05.2015
comment
Промених го на var path = NSURL(fileURLWithPath: theURL!)! и пак не става. Всъщност дори единият файл, който се възпроизвеждаше преди, спря да работи по този начин. Все пак потвърдих, че path съществува.   -  person allocate    schedule 01.05.2015
comment
@JoshuaAuriemma Успяхте ли да намерите решение за това? Аз съм изправен пред същия проблем.   -  person Penkey Suresh    schedule 26.05.2015
comment
@redo1135 за съжаление не. Бях принуден да работя едновременно с AVAudioPlayer и AVPlayer в зависимост от сценария. Не беше огромна, огромна болка, но определено не беше идеална.   -  person allocate    schedule 26.05.2015
comment
Благодаря ти @JoshuaAuriemma   -  person Penkey Suresh    schedule 28.05.2015


Отговори (1)


Добавете това веднага след като зададете променливата на пътя за възпроизвеждане на изтеглено аудио:

let asset = AVURLAsset(URL: path)
let playerItem = AVPlayerItem(asset: asset)
player = AVPlayer(playerItem: playerItem)
player.play()
person Jfusion    schedule 01.12.2015