SwiftUI | コントロールセンターに再生中の動画のタイトルを表示する方法(作成中)

音声・動画

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
        }
    }
    
}

できるようになった。別記事にまとめた。

コメント

タイトルとURLをコピーしました