如何解决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 举报,一经查实,本站将立刻删除。