Xamarin IOS CrossMediaManager背景视频播放

Xamarin IOS CrossMediaManager背景视频播放,ios,swift,xamarin,xamarin.ios,plugin.media.crossmedia,Ios,Swift,Xamarin,Xamarin.ios,Plugin.media.crossmedia,我使用的是来自的视频视图,它工作得非常好。我希望音频继续播放时,应用程序进入后台或屏幕被锁定,这可以实现使用此链接中给出的方法 所以我按照它来做,你可以看到我的代码。我目前正在获取PlayerViewController和AVPlayer,并在给定的类中连接和断开它们 public class LockedScreenManager { public AVQueuePlayer CurrentAVPlayer { get; set; } public AVPlayerVie

我使用的是来自的视频视图,它工作得非常好。我希望音频继续播放时,应用程序进入后台或屏幕被锁定,这可以实现使用此链接中给出的方法

所以我按照它来做,你可以看到我的代码。我目前正在获取PlayerViewController和AVPlayer,并在给定的类中连接和断开它们

public class LockedScreenManager 
{

    public AVQueuePlayer CurrentAVPlayer { get;  set; }
    public AVPlayerViewController CurrentAVPlayerController { get;  set; }

    public LockedScreenManager()
    {

        UIApplication.SharedApplication.BeginReceivingRemoteControlEvents();
       
        CrossMediaManager.Current.PositionChanged += PositionChanged;


        var audioSession = AVAudioSession.SharedInstance();
        audioSession.SetCategory(AVAudioSessionCategory.Playback);


    }

    public void Connect()
    {
        CurrentAVPlayerController.Player = CurrentAVPlayer;
    }
    public void DisConnect()
    {
        CurrentAVPlayer = null;
    }



    private void PositionChanged(object sender, MediaManager.Playback.PositionChangedEventArgs e)
    {
        
       
        var apple = CrossMediaManager.Apple;
        var _IosMediaPlayer = apple.AppleMediaPlayer as MediaManager.Platforms.Ios.Player.IosMediaPlayer;
        CurrentAVPlayer = _IosMediaPlayer.Player;
        CurrentAVPlayerController = _IosMediaPlayer.PlayerView.PlayerViewController;

        var mediaItem = CrossMediaManager.Current.Queue.Current;



        if (mediaItem == null)
        {
            MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = null;
            return;
        }

        var nowPlayingInfo = new MPNowPlayingInfo
        {
            Title = mediaItem.Title,
            AlbumTitle = mediaItem.Album,
            AlbumTrackNumber = mediaItem.TrackNumber,
            AlbumTrackCount = mediaItem.NumTracks,
            Artist = mediaItem.DisplaySubtitle,
            Composer = mediaItem.Composer,
            DiscNumber = mediaItem.DiscNumber,
            Genre = mediaItem.Genre,
            ElapsedPlaybackTime = CrossMediaManager.Current.Position.TotalSeconds,
            PlaybackDuration = CrossMediaManager.Current.Duration.TotalSeconds,
            PlaybackQueueIndex = CrossMediaManager.Current.Queue.CurrentIndex,
            PlaybackQueueCount = CrossMediaManager.Current.Queue.Count,
            IsLiveStream = mediaItem.IsLive
        };

       


        


        MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = nowPlayingInfo;


    }
}
在我的AppDelege类中,我创建了这个类的一个实例,并按照代码中给出的方式使用它

[Register("AppDelegate")]
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
    //
    // This method is invoked when the application has loaded and is ready to run. In this 
    // method you should instantiate the window, load the UI into it and then make the window
    // visible.
    //
    // You have 17 seconds to return from this method, or iOS will terminate your application.
    


   LockedScreenManager lockedScreenManager;
    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init();
        lockedScreenManager=  new LockedScreenManager();
        LoadApplication(new App());
        return base.FinishedLaunching(app, options);
    }
    
     

    
    public override void WillEnterForeground(UIApplication uiApplication)
    {
        lockedScreenManager.Connect();
        base.WillEnterForeground(uiApplication);
    }
    public override void DidEnterBackground(UIApplication uiApplication)
    {
        lockedScreenManager.DisConnect();
        base.DidEnterBackground(uiApplication);
    }
}
我已经在info.plist中完成了所有的背景播放设置,但仍然不起作用。当应用程序在后台消失时,它停止。请帮忙解决这个问题


感谢在
断开连接
方法中输入后台时,使用解除分配
CurrentAVPlayer
看起来像是代码中的错误,应该是:

public void DisConnect()
{
CurrentAVPlayerController.Player=null;
}

谢谢你,这很有帮助