AvPlayer和AirPlay不能很好地工作

时间:2018-08-02 11:56:11

标签: ios xamarin avplayer apple-tv

我正在使用Xamarin,AVPlayer和AvPlayerViewController编码视频播放器。我的代码支持AirPlay并根据文档配置AVPlayer,但效果不佳。以下情况似乎失败:

  1. 播放视频,然后将其发送到Apple TV。
  2. 退出Apple TV上的播放
  3. 尝试从当前位置恢复播放。这导致直接在Apple TV上开始播放,但是我从上一个播放位置继续进行的搜索失败。发生的情况是,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;
        }
    }
}

0 个答案:

没有答案