首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测AVPlayerItem状态变化

检测AVPlayerItem状态变化
EN

Stack Overflow用户
提问于 2019-09-05 18:06:56
回答 2查看 416关注 0票数 1

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

代码语言:javascript
复制
var v = NSNotificationCenter.DefaultCenter.AddObserver(new NSString("Status"), ReadyNow, player.CurrentItem);

它从来不叫ReadyNow(NSNotification obj),即使球员打得很好。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-20 19:41:07

您可以获得玩家的当前项目并将观察者添加到其中。

财产:

代码语言:javascript
复制
private AVPlayerItem CurrentItem => Player.CurrentItem;

观察员:

代码语言:javascript
复制
CurrentItem.AddObserver(this, new NSString("status"), 
    NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Initial,
    StatusObservationContext.Handle);

如果需要,还可以附加loadedTimeRanges

代码语言:javascript
复制
CurrentItem.AddObserver(this, new NSString("loadedTimeRanges"), 
    NSKeyValueObservingOptions.Initial | NSKeyValueObservingOptions.New,
    LoadedTimeRangesObservationContext.Handle);

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

代码语言:javascript
复制
CurrentItem.RemoveObserver(this, new NSString("status"));

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

代码语言:javascript
复制
public static readonly NSString StatusObservationContext = new NSString("Status");

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

资料来源:

  1. 用MediaManager插件播放音频和视频
  2. Plugin.MediaManager NuGet
  3. GitHub
票数 1
EN

Stack Overflow用户

发布于 2019-09-05 20:44:42

您正在尝试观察当前保存在AVPlayerItem属性中的单个CurrentItem实例,即使它当前为null。

您可以在AVPlayer实例上观察,并使用希望在其上观察更改的NSObjectkeyPath

示例:

代码语言:javascript
复制
obs = player.AddObserver("currentItem", NSKeyValueObservingOptions.New, (NSObservedChange obj) =>
{
    Console.WriteLine($"{obj.NewValue}");
});

注:请持有参考文献。返回到返回的IDisposable,否则您的观察者可能会超出作用域并被选中,否则会泄漏mem。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57810910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档