SwiftUI-媒体播放器电台

问题描述

所以我知道代码可以工作。但是,当我将此文件导入新的SwiftUI应用时,我得到Error Domain=NSOsstatusErrorDomain Code=-50 "(null)"。来自UIKit。

我的MediaPlayer.swift类文件


import Foundation
import AVFoundation
import MediaPlayer

   import AVKit

class MusicPlayer {
static let shared = MusicPlayer()


var player: AVPlayer?
let playerViewController = AVPlayerViewController()


   
    func startBackgroundMusicTwo() {

        
        let urlString = "http://stream.radiomedia.com.au:8003/stream"
      
        guard let url = URL.init(string: urlString) else { return }

        let playerItem = AVPlayerItem.init(url: url)
        player = AVPlayer.init(playerItem: playerItem)

        do {

            try AVAudioSession.sharedInstance().setCategory(.playback,mode: .default,options: [.duckOthers,.defaultToSpeaker,.mixWithOthers,.allowAirPlay])
            print("Playback OK")
         
            try AVAudioSession.sharedInstance().setActive(true)
            print("Session is Active")
        } catch {
        
            print(error)
        }

         #if targetEnvironment(simulator)

        self.playerViewController.player = player
        self.playerViewController.player?.play()
        print("SIMULATOR")

         #else

        self.setupRemoteTransportControls()
        player?.play()

        #endif

    }


func setupRemoteTransportControls() {
   // Get the shared MPRemoteCommandCenter
    let commandCenter = MPRemoteCommandCenter.shared()

    // Add handler for Play Command
    commandCenter.playCommand.addTarget { [uNowned self] event in
        if self.player?.rate == 0.0 {
            self.player?.play()
            return .success
        }
        return .commandFailed
    }

    // Add handler for Pause Command
    commandCenter.pauseCommand.addTarget { [uNowned self] event in
        if self.player?.rate == 1.0 {
            self.player?.pause()
            return .success
        }
        return .commandFailed
    }

   // self.Nowplaying(artist: "Anna",song: "test")


}

func Nowplaying(with artwork: MPMediaItemArtwork,artist: String,song: String){

MPNowPlayingInfoCenter.default().NowPlayingInfo = [
      MPMediaItemPropertyTitle:song,MPMediaItemPropertyArtist:artist,MPMediaItemPropertyArtwork: artwork,MPNowPlayingInfoPropertyIsLiveStream: true
]


   // self.getArtBoard();
}


func setupNowPlayingInfo(with artwork: MPMediaItemArtwork) {
      MPNowPlayingInfoCenter.default().NowPlayingInfo = [
        //   MPMediaItemPropertyTitle: "Some name",//   MPMediaItemPropertyArtist: "Some name",//MPMediaItemPropertyPlaybackDuration: CMTimeGetSeconds(currentItem.duration),//MPNowPlayingInfoPropertyPlaybackRate: 1,//MPNowPlayingInfoPropertyElapsedplaybackTime: CMTimeGetSeconds(currentItem.currentTime())
       ]
   }



func getData(from url: URL,completion: @escaping (UIImage?) -> Void) {
    URLSession.shared.dataTask(with: url,completionHandler: {(data,response,error) in
        if let data = data {
            completion(UIImage(data:data))
        }
    })
        .resume()
}

func getArtBoard(artist: String,song: String,cover: String) {
    guard let url = URL(string: cover) else { return }
    getData(from: url) { [weak self] image in
        guard let self = self,let downloadedImage = image else {
                return
        }
        let artwork = MPMediaItemArtwork.init(boundsSize: downloadedImage.size,requestHandler: { _ -> UIImage in
            return downloadedImage
        })
        self.Nowplaying(with: artwork,artist: artist,song: song)
    }
}



    func stopBackgroundMusic() {
        guard let player = player else { return }
        player.pause()

}
}


我在SwiftUI视图中通过以下方式调用它:

struct MediaPlayerView: View {

    
    var body: some View {
        Button(action: {
                         
            MusicPlayer().startBackgroundMusicTwo()
                       
                      }){
                       Image(systemName: "play.fill")
                       }
    
       
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)