ios - MPNowPlayingInfoCenter प्लेबैक को रोकते समय ठीक से प्रतिक्रिया नहीं कर रहा है




avplayer airplay (2)

मैं MPNowPlayingInfoCenter प्राप्त करने की कोशिश कर रहा हूं जब प्लेबैक को रोकना ठीक से काम करता है। (मेरे पास एक स्ट्रीमिंग म्यूजिक ऐप है जो प्लेबैक के लिए AVPlayer का उपयोग करता है, और मैं अपने Apple TV पर Airplay पर वापस खेल रहा हूं।) Apple TV UI में सब कुछ लेकिन पॉज़िंग सही ढंग से परिलक्षित होता है। मैं इसे इस तरह से शुरू कर रहा हूं:

MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
NSDictionary *songInfo = @{
    MPMediaItemPropertyTitle: title,
    MPMediaItemPropertyArtist: artist
};
center.nowPlayingInfo = songInfo;

जब से मैं स्ट्रीमिंग कर रहा हूं, मेरे पास प्लेबैक शुरू करने की अवधि की जानकारी नहीं है। जब मुझे स्ट्रीम से "रेडी" सिग्नल मिलता है, तो मैं अपने Apple TV पर सही ढंग से दिखाई देने वाली अवधि को अपडेट करता हूं:

MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
NSMutableDictionary *playingInfo = [NSMutableDictionary dictionaryWithDictionary:center.nowPlayingInfo];
[playingInfo setObject:[NSNumber numberWithFloat:length] forKey:MPMediaItemPropertyPlaybackDuration];
center.nowPlayingInfo = playingInfo;

जब उपयोगकर्ता ट्रैक चाहता है तो मैं भी इस तकनीक की तलाश कर सकता हूं:

[playingInfo setObject:[NSNumber numberWithFloat:length * targetProgress] forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime];

एक बात जो मैं समझ नहीं पा रहा हूं, वह है कि कैसे अपने एप्पल टीवी पर प्लेहेड को रोकना है। जब उपयोगकर्ता मेरे UI में विराम देता है, तो मैं कुछ करने की कोशिश कर रहा हूं:

MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
NSMutableDictionary *playingInfo = [NSMutableDictionary dictionaryWithDictionary:center.nowPlayingInfo];        
[playingInfo setObject:[NSNumber numberWithFloat:0.0f] forKey:MPNowPlayingInfoPropertyPlaybackRate];            
center.nowPlayingInfo = playingInfo;

रोकने के बजाय, यह प्लेहेड को वापस शून्य पर ले जाता है और इसे आगे बढ़ाता है।

मैं अपने Apple TV UI में सही तरीके से विराम देने के लिए playhead कैसे प्राप्त करूं?


मेरे पास समाधान है! केवल MPMediaItemPropertyPlaybackDuration सेट करें

1 - जब आप ट्रैक शुरू करते हैं, तो संपत्ति को ट्रैक की कुल अवधि के साथ सेट करें:

MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
NSDictionary *songInfo = @{
    MPMediaItemPropertyTitle: title,
    MPMediaItemPropertyArtist: artist
    MPMediaItemPropertyPlaybackDuration : [NSNumber numberWithFloat:length]
};
center.nowPlayingInfo = songInfo;

2 - जब आप ट्रैक को रोकते हैं ... कुछ नहीं करते।

3 - जब आप ट्रैक खेलते हैं, तो प्रॉपर्टी को वर्तमान क्रैकटाइम के साथ सेट करें:

MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
NSMutableDictionary *playingInfo = [NSMutableDictionary dictionaryWithDictionary:center.nowPlayingInfo];        
[playingInfo setObject:[NSNumber numberWithFloat:player.currentTrackTime] forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime];            
center.nowPlayingInfo = playingInfo;

यहाँ आप क्या खोज रहे हैं, यह बहुत अच्छा काम कर रहा है इसे अपनी कक्षा में जोड़ें:

- (void)remoteControlReceivedWithEvent: (UIEvent *) receivedEvent {

    if (receivedEvent.type == UIEventTypeRemoteControl) {

        switch (receivedEvent.subtype) {

            case UIEventSubtypeRemoteControlTogglePlayPause:[self playPause:nil];

                break;

            default: break;
        }
    }
}

आप इस तरह से अन्य CASE कोड जोड़ने के साथ आगे या पिछड़े के लिए कार्य जोड़ सकते हैं:

case UIEventSubtypeRemoteControlBeginSeekingBackward:[self yourBackward:nil];
                break;

और कॉल पॉज़ करने के लिए आपको इस तरह की कार्रवाई करने की आवश्यकता है:

- (IBAction)playPause:(id)sender {

    if (yourPlayer.rate == 1.0){

        [yourPlayer pause];
    } else if (yourPlayer.rate == 0.0) {

        [yourPlayer play];
    }
}

महत्वपूर्ण: आपके द्वारा जोड़े जाने वाले किसी भी मामले में IBAction की आवश्यकता है

आशा है कि यह आपकी मदद करेगा