gpt4 book ai didi

ios11 - MPMusicPlayerController 在 systemMusicPlayer 时响应慢,在应用时响应快

转载 作者:行者123 更新时间:2023-12-04 12:51:30 29 4
gpt4 key购买 nike

我有一个使用 MPMusicPlayerController 的音乐应用程序。

我最初是使用 iOS 9 下的 systemMusicPlayer 选项编写的。
我在某些情况下无法正确关闭播放器时遇到了一些麻烦,所以我切换到了 appplicationMusicPlayer
(见 Quitting app causes error "Message from debugger: Terminated due to signal 9")

但是,作为一个应用玩家,控制中心处理、蓝牙数据显示等很多好处都得不到。

所以,我切换回 systemMusicPlayer。
我也改为 Xcode 9.2 和 iOS 10.3 的编译目标。

现在,当我运行我的应用程序时,它可能需要几秒钟才能响应播放/暂停或下一个/上一个等控件。我的整个 UI 都 react 迟钝。

我尝试切换回 applicationMusicPlayer,重新编译,果然 - UI 处于正常速度。

所以现在我的处境很糟糕 - 使用 systemMusicPlayer,该应用程序几乎无法使用,但使用 applicationMusicPlayer 我失去了大量功能。

这似乎与我 iPhone 上的 iOS 11.2.2 直接相关,或者与针对 iOS 10.3+ 的目标有关

有没有人有关于正在发生的事情以及如何解决它的任何信息

编辑:
我创建了一个非常基本的播放器,它似乎在任何一种模式下都能正常工作,所以现在我很困惑 - 我将测试其他 MP 命令以查看
问题是,但即使我的用户界面也会变慢,我不确定。

编辑2:
我相信我发现罪魁祸首是 NotificationCenter,并且还从 MPMusicPlayerController 获取状态。我已经更新了下面显示问题的示例代码。运行后,单击“下一步”按钮有时会很慢,但单击“上一步”可能会导致最多两秒钟的延迟!!

如果您想创建一个简单的播放器,这里是基本代码。
确保在 Storyboard中添加三个按钮并相应地连接它们。

//
// ViewController.swift
// junkplayer
//

import UIKit
import MediaPlayer

let notificationCenter = NotificationCenter.default

let myMP:MPMusicPlayerController = MPMusicPlayerController.systemMusicPlayer
//let myMP:MPMusicPlayerController = MPMusicPlayerController.applicationMusicPlayer()

class ViewController: UIViewController {
@IBOutlet weak var xxx: UIButton!
@IBOutlet weak var nextbut: UIButton!
@IBOutlet weak var prevbut: UIButton!
var qrySongs = MPMediaQuery()

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
myMP.repeatMode = MPMusicRepeatMode.none
myMP.shuffleMode = MPMusicShuffleMode.off
myMP.prepareToPlay()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

stopMPNotifications()
startMPNotifications()
}

@IBAction func nextbut(_ sender: Any) {
myMP.skipToNextItem()
}
@IBAction func prevbut(_ sender: Any) {
myMP.skipToPreviousItem()
}
@IBAction func playbut(_ sender: UIButton) {
qrySongs = MPMediaQuery.songs()
myMP.setQueue(with: qrySongs)

myMP.play()
}
func startMPNotifications(){
notificationCenter.addObserver(self, selector: #selector(showNowPlaying), name: .MPMusicPlayerControllerNowPlayingItemDidChange, object: myMP)
notificationCenter.addObserver(self, selector: #selector(handlePlayState), name: .MPMusicPlayerControllerPlaybackStateDidChange, object: myMP)
myMP.beginGeneratingPlaybackNotifications()
}
func stopMPNotifications(){
notificationCenter.removeObserver(self, name: .MPMusicPlayerControllerPlaybackStateDidChange, object: myMP)
notificationCenter.removeObserver(self, name: .MPMusicPlayerControllerNowPlayingItemDidChange, object: myMP)
myMP.endGeneratingPlaybackNotifications()
}
@objc func handlePlayState(){
if myMP.playbackState == .playing {
print("handlePlayState playback state = playing")
}else{
print("handlePlayState playback state NOT playing")
}
print("handlePlayState going to shownowplaying")
showNowPlaying()
}
@objc func showNowPlaying(){
if myMP.nowPlayingItem != nil {
print("shownowplaying nowplaying not null")
}
}
}

最佳答案

一旦您开始播放,该应用程序似乎会锁定,但是如果您向上滑动以显示控制中心然后将其关闭,该应用程序会立即开始正常运行。

关于ios11 - MPMusicPlayerController 在 systemMusicPlayer 时响应慢,在应用时响应快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48310399/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com