2017-09-11 4 views
1

음악 앱을 만들려고했습니다. 내 음악보기 컨트롤러에있을 때 음악이 재생되고 있습니다. 음악 배경 모드도 설정했습니다. 음악이 백그라운드 모드에서 재생되지만 다른보기 컨트롤러로 이동할 때. 음악이 다시 시작됩니다. 문제가 무엇입니까? 여기 다른 뷰 컨트롤러로 이동 한 후 음악 다시 시작

내가이 내 플레이어가

func play(){ 
    let musicUrl = totalAlbumList[myIndex].audiofile 
      if let mm = musicUrl { 
       var url: URL! 
       url = URL(string: mm) 
       playerItem = AVPlayerItem(url: url) 
       player = AVPlayer(playerItem: playerItem) 
       player?.volume = 1.0 
       player?.rate = 1.0 
       player?.play() 

} 

답변

0

은 그냥 AVPlayer를 당신이 모든 음악을 재생하려면 싱글 톤 클래스의 선수와 관련된 모든 코드를 삽입 재생됩니다

//this is global variable 

    var player : AVPlayer? 
    var playerItem:AVPlayerItem? 

override func viewDidLoad() { 
      super.viewDidLoad() 
      musicplayer() 
      play() 
    } 



func musicplayer(){ 

     do { 
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
      try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker) 
      print("AVAudioSession Category Playback OK") 
      do { 
       try AVAudioSession.sharedInstance().setActive(true) 

       print("AVAudioSession is Active") 

      } catch let error as NSError { 
       print(error.localizedDescription) 
      } 
     } catch let error as NSError { 
      print(error.localizedDescription) 
     } 


    } 

시도 할 것입니다 수업.

배경 모드는 응용 프로그램이 백그라운드 모드이고 UIViewController가 실행 중일 때만 도움이됩니다. 아래 클래스를 사용하여 음악을 재생합니다.

// 
// MusicPlayer.swift 
// MusicPlayer 
// 
// Created by Lakhwinder Singh on 11/09/17. 
// Copyright © 2017 lakh. All rights reserved. 
// 

import UIKit 
import AVFoundation 

class MusicPlayer: NSObject { 

    //Constant varialbe of class 
    static let player = MusicPlayer() 

    //this is global variable 
    var player : AVPlayer? 
    var playerItem:AVPlayerItem? 

    func initPlayer(){ 
     do { 
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
      try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker) 
      print("AVAudioSession Category Playback OK") 
      do { 
       try AVAudioSession.sharedInstance().setActive(true) 

       print("AVAudioSession is Active") 

      } catch let error as NSError { 
       print(error.localizedDescription) 
      } 
     } catch let error as NSError { 
      print(error.localizedDescription) 
     } 
    } 

    func playMusic(_ musicUrl: String?) { 
     if let mm = musicUrl { 
      var url: URL! 
      url = URL(string: mm) 
      playerItem = AVPlayerItem(url: url) 
      player = AVPlayer(playerItem: playerItem) 
      player?.volume = 1.0 
      player?.rate = 1.0 
      player?.play() 
     } 
    } 

} 

플레이어를 초기화하려면 아래 코드를 AppDelegate로 불러주십시오.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     // Override point for customization after application launch. 
     MusicPlayer.player.initPlayer() 
     return true 
    } 

그리고이 코드를 학급에서 사용하십시오. timeIntarval, 큐 :

MusicPlayer.player.playMusic(totalAlbumList[myIndex].audiofile) 
+0

가 어떻게 ** addPeriodicTimeObserver (forInterval 추가 할 수 있습니다 DispatchQueue.main를 사용하여 {(progressTime) **이 –

+0

하나, 당신은 시간을 얻을 수 MusicPlayer 클래스에 프로토콜을 추가하거나 수 메인 클래스에서 완료 블록에 액세스 할 수있는 변수를 추가 할 수 있습니다. –

+0

@ SporshiyaIslam, 그러면 도움이됩니다. 투표 할 수 있습니다 :) –