我已经编写了一个Xamarin.Forms iOS应用Page
,用户AVPlayer
可以通过自定义页面渲染器播放视频。
视频播放完毕后,或当用户使用“AVPlayerViewController
创建的控件”进行视频播放时,应将其发送到应用中的下一个ContentPage
。
我可以追踪视频“自然而然”的情况。通过观察AVPlayerItem.DidPlayToEndTimeNotification
上的AVPlayerItem _playerItem
来完成,如下所示:
videoEndNotificationToken = NSNotificationCenter.DefaultCenter.AddObserver(
AVPlayerItem.DidPlayToEndTimeNotification,
VideoDidFinishPlaying,
_playerItem);
然后我在VideoDidFinishPlaying
中的导航堆栈上推送一个新页面,然后用户继续。
但是,如果用户使用默认控制栏擦洗到视频的末尾,则此功能无效。
我如何检测视频是否通过用户擦除到最后完成?
答案 0 :(得分:3)
使用AVPlayerViewController
并允许用户手动搜索结尾不会触发DidPlayToEndTimeNotification
,因为媒体资产实际上并未实际播放到最后#39;通常情况下。
以下是我在类似案例中所做的事情:
TimeJumpedNotification
:didPlayToEndTimeNotification = NSNotificationCenter.DefaultCenter.AddObserver(
AVPlayerItem.DidPlayToEndTimeNotification,
videoFinished,
_playerItem);
timeJumpedNotification = NSNotificationCenter.DefaultCenter.AddObserver(
AVPlayerItem.TimeJumpedNotification,
videoFinished,
_playerItem);
public void videoFinished(NSNotification notify){
if (notify.Name == AVPlayerItem.TimeJumpedNotification) {
Console.WriteLine ("{0} : {1}", _playerItem.Duration, _player.CurrentTime);
if (Math.Abs(_playerItem.Duration.Seconds - _player.CurrentTime.Seconds) < 0.001) {
Console.WriteLine ("Seek to end by user");
}
} else if (notify.Name == AVPlayerItem.DidPlayToEndTimeNotification) {
Console.WriteLine ("Normal finish");
} else {
// PlaybackStalledNotification, ItemFailedToPlayToEndTimeErrorKey, etc...
Console.WriteLine (notify.Name);
}
}