Как отключить автоматические обновления в MpNowPlayingInfocenter от AvPlayerIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как отключить автоматические обновления в MpNowPlayingInfocenter от AvPlayer

Сообщение Anonymous »

Я строю приложение Swiftui, основной задачей, воспроизведение Audio. Я управляю всеми нынешними метаданными и командными центрами вручную через общие экземпляры: < /p>

Код: Выделить всё

MPRemoteCommandCenter.shared()
MPNowPlayingInfoCenter.default().nowPlayingInfo
В определенных частях приложения мне также необходимо отображать видео, но как только я прикрепляю другого AvPlayer, он автоматически выдвигает свои собственные метаданные в центр управления и перезаписывает информацию о моей аудио. /> В моем приложении я начинаю с настройки общего аудиосессии < /p>

Код: Выделить всё

        do {
try AVAudioSession.sharedInstance().setCategory(.playback,
mode: .default,
options: [
.allowAirPlay,
.allowBluetoothA2DP
])
try AVAudioSession.sharedInstance().setActive(true)
} catch {
NSLog("%@", "**** Failed to set up AVAudioSession \(error.localizedDescription)")
}
, а затем установите команды mpremotecommandcenter и mpnowplayingInfocenter nowplayingInfo , как упомянуто выше. Но когда я добавляю другие AvPlayers для отображения некоторых видео (и сохранить основной AvPlayer для звука), они выдвигают нежелательные обновления в MpNowPlayingInfocenter: < /p>

Код: Выделить всё

struct VideoCardView: View {
@State private var player: AVPlayer

let videoName: String

init(player: AVPlayer = AVPlayer(), videoName: String) {
self.player = player
self.videoName = videoName
guard let path = Bundle.main.path(forResource: videoName, ofType: nil) else { return }
let url = URL(fileURLWithPath: path)
let item = AVPlayerItem(url: url)
self.player.replaceCurrentItem(with: item)
}

var body: some View {
VideoPlayer(player: player)
.aspectRatio(contentMode: .fill)
.onAppear {
player.isMuted = true
player.allowsExternalPlayback = false
player.actionAtItemEnd = .none
player.play()

MPNowPlayingInfoCenter.default().nowPlayingInfo = nil
MPNowPlayingInfoCenter.default().playbackState = .stopped

NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime,
object: player.currentItem,
queue: .main) { notification in
guard let finishedItem = notification.object as? AVPlayerItem,
finishedItem === player.currentItem else { return }
player.seek(to: .zero)
player.play()
}
}
.onDisappear {
player.pause()
}
}
}
< /code>
Вот почему я попытался добавить: < /p>
MPNowPlayingInfoCenter.default().nowPlayingInfo = nil
MPNowPlayingInfoCenter.default().playbackState = .stopped // or .interrupted, .unknown
Но это не сработало.
Я также попытался сделать обертку вокруг AvPlayerviewectOntroller , чтобы установить обновления.

Код: Выделить всё

struct CustomAVPlayerView: UIViewControllerRepresentable {
let player: AVPlayer

func makeUIViewController(context: Context) -> AVPlayerViewController {
let vc = AVPlayerViewController()
vc.player = player
vc.updatesNowPlayingInfoCenter = false
vc.showsPlaybackControls = false
return vc
}

func updateUIViewController(_ controller: AVPlayerViewController, context: Context) {
controller.player = player
}
}
Следовательно, любая помощь в том, как встроить видео в Swiftui, не было бы очень оценено.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... m-avplayer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»