Xamarin IOS CrossMediaManager背景视频播放
我使用的是来自的视频视图,它工作得非常好。我希望音频继续播放时,应用程序进入后台或屏幕被锁定,这可以实现使用此链接中给出的方法 所以我按照它来做,你可以看到我的代码。我目前正在获取PlayerViewController和AVPlayer,并在给定的类中连接和断开它们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
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;
}
谢谢你,这很有帮助