我正在使用Xamarin,AVPlayer和AvPlayerViewController
编码视频播放器。我的代码支持AirPlay并根据文档配置AVPlayer,但效果不佳。以下情况似乎失败:
AvPlayerViewController
UI显示从Apple播放从恢复点开始播放时从头开始播放。 AvPlayerViewController
播放/暂停按钮在大多数情况下也是错误的,并且未反映正确的播放状态。 我进行搜索,所以我像这样恢复视频:等待(通过KVO)等待avplayer状态变为可以播放,然后搜索并播放视频。
请注意...当播放器不处于airplay模式时,所有这些工作正常。视频恢复正常,用户界面看起来正确。
代码如下:
avItem = new AVPlayerItem(avAsset);
avPlayer = new AVPlayer(avItem)
{
AllowsExternalPlayback = true,
UsesExternalPlaybackWhileExternalScreenIsActive = true
};
avPlayerViewController = new AVPlayerViewController()
{
View =
{
ContentMode = UIViewContentMode.ScaleAspectFill,
AutoresizingMask = UIViewAutoresizing.All,
},
UpdatesNowPlayingInfoCenter = false,
Player = avPlayer
};
initialPlaybackTime = TimeSpan.FromSeconds(bookmarkTime);
AddChildViewController(avPlayerViewController);
View.AddSubview(avPlayerViewController.View);
avPlayerViewController.DidMoveToParentViewController(this);
avItem.AddObserver(this, new NSString("status"), NSKeyValueObservingOptions.Initial, IntPtr.Zero);
public override async void ObserveValue(NSString keyPath, NSObject ofObject, NSDictionary change, IntPtr context)
{
if (Equals(ofObject, avItem) && keyPath.Equals((NSString)"status"))
{
if (!initialPlaybackTimeSet && (avPlayer.Status == AVPlayerStatus.ReadyToPlay))
{
await avPlayer.SeekAsync(CMTime.FromSeconds(initialPlaybackTime.TotalSeconds, avPlayer.CurrentItem.Asset.Duration.TimeScale));
avPlayer.Play();
initialPlaybackTimeSet = true;
}
}
}