c# - 检测 AVPlayerItem 状态变化

标签 c# ios swift xamarin xamarin.ios

这是我的 (Xamarin C#) 代码:(player 是一个 AVPlayer。)

var v = NSNotificationCenter.DefaultCenter.AddObserver(new NSString("Status"), ReadyNow, player.CurrentItem);

它从不调用 ReadyNow(NSNotification obj),即使播放器播放正常也是如此。

如何修复它以调用该方法? (我不知道错误是在 Xamarin/C# 部分还是在我正在使用的对象等中。如果用 Swift 编写,这将是相同的错误。)

最佳答案

您可以获取玩家的当前元素并将观察者添加到其中。

属性:

private AVPlayerItem CurrentItem => Player.CurrentItem;

观察者:

CurrentItem.AddObserver(this, new NSString("status"), 
    NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Initial,
    StatusObservationContext.Handle);

如果需要,也可以附上loadedTimeRanges :

CurrentItem.AddObserver(this, new NSString("loadedTimeRanges"), 
    NSKeyValueObservingOptions.Initial | NSKeyValueObservingOptions.New,
    LoadedTimeRangesObservationContext.Handle);

注意:始终确保在附加之前分离观察者的状态:

CurrentItem.RemoveObserver(this, new NSString("status"));

编辑:StatusObservationContext 只是一个属性,指向 status 字符串。

public static readonly NSString StatusObservationContext = new NSString("Status");

有用的资源 您可以在 Martinj 的优秀包 - XamarinMediaManager 中找到您的 AVPlayer 实现可能需要的一切。

来源:

  1. Play Audio and Video with the MediaManager Plugin for Xamarin
  2. Plugin.MediaManager NuGet
  3. GitHub

关于c# - 检测 AVPlayerItem 状态变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57810910/

相关文章:

ios - 我的应用程序因非公开 API 而被拒绝

ios - TableView array segue 不会传递数据

c# - 本地化后重置控制位置

c# - 如何使用 DDay.iCal 设置时区

objective-c - 在 for in 循环中使用变量,不被编译器读取...这是为什么?

ios - 在后台运行应用程序并播放一些音频和加速度计

ios - TableView Cell 内的多个 View

c# - 搜索 "all references"(Visual Studio)

C# 在父构造函数中访问调用者

ios - 如何将选定的图像从 UIImagePickerController 传递到第二个 View Controller ?