방금 AVAudioPlayer
에서 AVPlayer
으로 전환했으며 이전 기능을 수행하고 적절한 조정을 수행하고 있습니다. AVPlayer
은 URL을 사용하여 원격 오디오 파일을 재생하는 데 사용됩니다. 재생할 파일을 선택하고 모든 작업을 일시 중지하면 완벽하게 작동합니다. 그러나 일시 중지 된 파일 재생을 다시 시작하려면 재생 기능이 호출 된 것을 볼 수 있지만 재생되지 않습니다. 플레이어가 재생을 마쳤을 때 관찰자를 설정하여 재생/일시 중지 버튼을 전환 할 수 있으며 내가 알아챈 점은 일시 정지 한 후에 관찰자가 호출된다는 것입니다. 플레이어가 게임을 제대로 끝내지 않았으므로 이런 일이 발생하지 않아야합니다. 어쨌든, 나는 중단 점을 설정하고 모든 것이 올바르게 호출되고있다. 잠시 후 AVPlayer
이 재생을 재개하지 않는 이유는 무엇입니까? 단지 viewDidLoad()
또는 viewWillAppear()
추가 관찰자에 옵저버를 추가AVPlayer가 일시 중지 된 후 재생을 재개하지 않습니다.
var playerItem: AVPlayerItem?
var newPlayer: AVPlayer?
var trackIDplaying: Int?
func playPausePressed(_ sender:UIButton)
{
if let selectedTrackID = trackIDplaying
{
do
{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
if selectedTrackID == track.trackId
{
//if playing, then pause. If not playing, then play
if (self.newPlayer!.rate != 0)
{
self.newPlayer!.pause()
self.isPaused = true
}
else
{
if self.newPlayer!.currentItem != nil
{
self.newPlayer!.play()
print(self.newPlayer!.currentItem)
}
}
}
else
{
//If song is playing, switch to new song
let trackURL = URL(string: track.preSignedURL!)
trackIDplaying = track.trackId
self.playerItem = AVPlayerItem(url: trackURL!)
NotificationCenter.default.addObserver(self, selector: #selector((HomeController.playerDidFinishPlaying)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.playerItem)
self.newPlayer = AVPlayer(playerItem: self.playerItem!)
self.newPlayer!.play()
}
}
catch let error1 as NSError
{
error = error1
self.newPlayer = nil
}
}
else
{
do
{
//play selected song if no other songs are playing
let trackURL = URL(string: track.preSignedURL!)
print(trackURL!)
self.playerItem = AVPlayerItem(url: trackURL!)
NotificationCenter.default.addObserver(self, selector: #selector((HomeController.playerDidFinishPlaying)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.playerItem)
self.newPlayer = AVPlayer(playerItem: self.playerItem!)
self.newPlayer!.play()
self.trackIDplaying = track.trackId
}
}
if let err = error
{
print("audio player error \(err.localizedDescription)", terminator: "")
}
}
func playerDidFinishPlaying(note: NSNotification) {
guard let indexPath = self.playingAudioIndexPath, let cell = self.audioTable.cellForRow(at: indexPath) as? AudioCell else {
return;
}
cell.playButton.isSelected = false
self.playingAudioIndexPath = nil
}
재생을 클릭 할 때 관찰자를 선언하면 일시 중지/재생을 전환 할 때 자동으로 관찰자 방법으로 점프하는 이유는 무엇입니까? – Brosef
그것이 작동했거나 여전히 문제가 있습니까 ?? – JAck
원래 일하는 방식이 왜 작동하지 않는지 궁금해했습니다. – Brosef