SwiftUIでコントロールセンターに再生中の動画のタイトルを表示する方法がわからない。AppleのForumで質問中だが回答を得られていない。
これだとだめ。
import SwiftUI
import AVKit
import MediaPlayer
struct ContentView: View {
var body: some View {
let playerClass = PlayerClass()
VideoPlayer(player: playerClass.aVPlayer)
.onAppear {
playerClass.aVPlayer.play()
}
}
}
class PlayerClass {
var aVPlayer: AVPlayer
init() {
let fileUrl = Bundle.main.url(forResource: "sample",
withExtension: "mp4")!
aVPlayer = AVPlayer(url: fileUrl)
setNowPlayingInfo()
setMPRemoteCommandCenter()
}
func setNowPlayingInfo() {
var nowPlayingInfo = [String : Any]()
nowPlayingInfo[MPMediaItemPropertyTitle] = "my title"
nowPlayingInfo[MPMediaItemPropertyAlbumTitle] = "my album"
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
}
func setMPRemoteCommandCenter() {
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.playCommand.addTarget { [unowned self] event in
print("play")
return .success
}
commandCenter.pauseCommand.addTarget { [unowned self] event in
print("pause")
return .success
}
}
}
無理やりやろうとしたときのメモ。なんとなく表示されるようになったが、これでは全然求めるものではないのでだめ。
import SwiftUI
import AVKit
import MediaPlayer
struct ContentView: View {
var body: some View {
let プレイヤークラス = playerClass()
VideoPlayer(player: プレイヤークラス.プレイヤー)
.onAppear {
プレイヤークラス.プレイヤー.play()
}
}
}
class playerClass {
var プレイヤー: AVPlayer
init() {
let ファイルURL = Bundle.main.url(forResource: "sample",
withExtension: "mp4")!
プレイヤー = AVPlayer(url: ファイルURL)
setNowPlayingInfo()
setMPRemoteCommandCenter()
}
func setNowPlayingInfo() {
var nowPlayingInfo = [String : Any]()
nowPlayingInfo[MPMediaItemPropertyTitle] = "タイトル"
nowPlayingInfo[MPMediaItemPropertyAlbumTitle] = "アルバム"
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
}
func resetNowPlayingInfo() { // ? 1
Thread.sleep(forTimeInterval: 0.001)
setNowPlayingInfo()
DispatchQueue.main.async {
self.setNowPlayingInfo()
}
}
func setMPRemoteCommandCenter() {
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.playCommand.addTarget { [unowned self] event in
print("play")
プレイヤー.play()
resetNowPlayingInfo() // ? 1
return .success
}
commandCenter.pauseCommand.addTarget { [unowned self] event in
print("pause")
プレイヤー.pause()
resetNowPlayingInfo() // ? 1
return .success
}
}
}
できるようになった。別記事にまとめた。
コメント