首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPRemoteCommandCenter的问题

MPRemoteCommandCenter的问题
EN

Stack Overflow用户
提问于 2017-05-28 17:51:06
回答 1查看 725关注 0票数 1

我对MPRemoteCommandCenter有两个问题:

1)当我更改歌曲时,遥控器删除先前的歌曲图像,制作默认歌曲图像,制作下一首歌曲图像。我不想看到默认的图像。我花了几个时间想出解决办法。

( 2)当AVPlayer是实时流声音时,遥控器就会变成不活动的圆圈箭头(成圆周箭头为15,这意味着什么?)

下面是我播放声音的代码:

代码语言:javascript
复制
public func playAVSound(trackName : String) -> String {
    let path = _findPath(trackName: trackName);
    if (path == "") {
        return "getting url"
    }
    if (self.AVPlayerVC.player == nil) {
        print("Init remote control events...")
        UIApplication.shared.beginReceivingRemoteControlEvents()
        let commandCenter = MPRemoteCommandCenter.shared()
        commandCenter.nextTrackCommand.isEnabled = true
        commandCenter.nextTrackCommand.addTarget(self, action:#selector(self.next))
        commandCenter.previousTrackCommand.isEnabled = true
        commandCenter.previousTrackCommand.addTarget(self, action:#selector(self.previous))
    }
    if (self.AVPlayerVC.player != nil && self.play_info.trackName == trackName) {
        if (self.play_info.paused!) {
            self.AVPlayerVC.player?.play()
            self.updatePlayInfo(number: Global.PlayList.find_by_trackName(trackName: trackName), trackName: trackName, path: path, paused: false)
            return "continue"
        } else {
            self.AVPlayerVC.player?.pause()
            self.play_info.paused = true
            return "pause"
        }
    }
    let nsurl = NSURL(string: path)
    if let url = nsurl {
        print("Play AV from : \(url)")
        let item = AVPlayerItem(url: url as URL)
        if (self.AVPlayerVC.player?.currentItem == nil) {
            self.AvPlayer = AVPlayer(playerItem: item)
            self.AVPlayerVC.player = self.AvPlayer
            self.AVPlayerVC.player?.automaticallyWaitsToMinimizeStalling = false
        } else {
            self.AvPlayer?.replaceCurrentItem(with: item)
        }
        NotificationCenter.default.addObserver(self, selector: #selector(self.playerDidFinishPlaying), name: .AVPlayerItemDidPlayToEndTime, object: item)
        self.AVPlayerVC.player?.play()
        self.updatePlayInfo(number: Global.PlayList.find_by_trackName(trackName: trackName), trackName: trackName, path: path, paused: false)
        return "playing"
    } else {
        print ("Incorrect nsurl")
    }
    return "error"
}

private func _findPath (trackName: String) -> String {
    let n = Global.PlayList.find_by_trackName(trackName: trackName)
    var path = ""
    if (n >= 0) {
        let p_item = Global.PlayList.PlaylistItems[n];
        if (!p_item.fromData!) {
            if (p_item.playing_url == nil) {
                NetLib.makeTrackUrl(trackName: trackName, closure: self.playAVSound)
            } else {
                path = p_item.playing_url!
            }
        } else {
            path = NetLib.makePath(filename: p_item.filename!)
        }
    } else {
        print("Error find_path: \(trackName) was not found in playlist")
    }
    return path
}

这是代码,它改变了歌曲

代码语言:javascript
复制
    @objc private func previous() -> MPRemoteCommandHandlerStatus{
    var n = self.play_info.number! - 1;
    if (self.play_info.number == 0) {
        n = Global.PlayList.size() - 1;
    }
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "load"), object: nil)
    _ = self.playAVSound(trackName: Global.PlayList.PlaylistItems[n].trackName!)
    print("Previous song \(Global.PlayList.PlaylistItems[n].trackName!)")
    return .success
}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-28 20:05:20

我解决了控制的问题,同时音频流。我播放的音频不是从主线程,所以远程控制工作不正确的线程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44230306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档