问题描述
所以我知道代码可以工作。但是,当我将此文件导入新的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 (将#修改为@)