【问题标题】:Play/Pause button on the apple tv remote is not working while the video is playing with AVPlayerViewController使用 AVPlayerViewController 播放视频时,Apple tv 遥控器上的播放/暂停按钮不起作用
【发布时间】:2019-05-29 10:56:33
【问题描述】:

我正在通过 tvOS (Xamarin tvOS) 中的 AVPlayerViewController 播放视频。我正在使用 Apple tv 遥控器上的播放/暂停按钮暂停和恢复视频。我正在使用 PressesBegan 方法来获取单击播放/暂停按钮的事件。这在模拟器上运行良好,但在实际设备上运行良好。在实际设备上,我们没有收到按下播放/暂停按钮的事件。我们在 Apple TV 4K(12.11 版)和 Apple TV(11.4 版)上进行了试用。 只有当我通过 AVPlayerViewController 播放视频时才会发生这种情况,否则它可以正常工作。我尝试了 UITapGestureRecognizer、PressesEnded 方法以及 RemoteControlReceived 方法。但是,仍然没有任何帮助。任何帮助将不胜感激。

https://github.com/lewixlabs/TvOS-PlayBack-Sample-App/blob/master/TvOS%20PlayBack%20Sample%20App/ViewController.cs

【问题讨论】:

  • 当你将 TapRecognizer 添加到 ViewController 时,你可以请求接收UIPressTypePlayPause 作为允许的类型。
  • 是的,我使用了 NSNumber.FromLong((nint)Convert.ToInt32( UIPressType.PlayPause)) 命令来接收请求,但是没有成功。

标签: xamarin avplayer tvos apple-tv avplayerviewcontroller


【解决方案1】:

您的应用在播放视频时不会收到暂停(或播放/暂停)按钮事件。这是预期的 - 并记录在案的 - 行为。系统将操作重定向到“正在播放”应用的处理程序(在本例中为 AVPlayerViewController)。

你没有说为什么你试图拦截播放/暂停...

  • 如果您尝试禁用暂停,您应该采取不同的方法;例如,您可以在 AVPlayerViewController 的根视图上禁用用户交互(这不仅会禁用播放/暂停,而且会禁用几乎所有控件)。您还可以禁用播放控件。请记住,用户有多种暂停方式,包括单击触摸表面、使用不同类型的遥控器或告诉 Siri“暂停”,这两种方式都不会导致常规暂停按钮事件。

    李>
  • 如果您尝试确定视频何时暂停,您可以键值观察播放器的“速率”属性(速率也可能由于其他原因更改为零,例如因为播放到达结束)。

【讨论】:

  • 感谢您的深入回答和建议。我们可以用其他方法暂停/播放视频,但我尝试在电视遥控器本身上按播放/暂停时播放/暂停视频。但另一个问题是它是如何在模拟器上正常工作的?我在模拟器上正确获取事件。如果您对此有任何解决方案,请帮助我,以便我可以从远程本身实现暂停/播放视频。
  • 如果我们谈论其他 Apple tv 应用程序,如 Netflix、Amazon Prime 和 HotStare,它们使用相同的 AVPlayerController,并且能够使用遥控器的播放/暂停按钮播放和暂停视频。所以我认为必须有一个解决方案。请帮帮我。
  • AVPlayerViewController 代表客户端处理播放/暂停按钮。这些应用程序都没有做任何特殊的处理暂停。如果您认为发现了错误,您可能需要提交雷达 (bugreport.apple.com)。首先重现错误,然后按照download.developer.apple.com/iOS/tvOS_Logs/… 中的说明捕获雷达的系统诊断(这有助于 Apple 工程师在无法轻松重现您的问题时追踪问题)。
  • ...例如,如果您在 AVPlayerViewController 的根视图上设置了“userInteractionDisabled”属性,或者您正在播放可搜索范围可忽略不计的实时流。但是,我假设所有其他用户界面操作都可以正常工作(例如,点击以显示传输栏,单击 Siri Remote 触摸表面以切换播放)。特别是,单击 Siri Remote 的触摸表面是否会切换播放?如果没有,可能是您禁用了控件/用户交互,或者 AVPlayerViewController 的视图没有焦点。
  • 您在此处包含的示例代码看起来不错(并且视频不是实时流),因此如果您的应用中存在错误,则不是在这个文件中。警告:我没有设置构建/运行 xamarin 项目,所以我只是在关注源代码。最后,关于模拟器的区别:模拟器尽最大努力模仿设备行为,但在极少数情况下它并不完全匹配;这种差异是模拟器中的错误(当模拟器和设备之间的行为存在差异时,它是模拟器中的错误)。
【解决方案2】:

向 ViewController 添加一个 UITapGestureRecognizer 并允许 UIPressType.PlayPause 按下类型。

var tap = new UITapGestureRecognizer(() =>
{
    Console.WriteLine("Remote PlayPause button pressed");
})
{
    AllowedPressTypes = new NSNumber[] { new NSNumber((long)UIPressType.PlayPause) }
};
this.View.AddGestureRecognizer(tap);

【讨论】:

  • 感谢您的建议,但我尝试了此解决方案,但无法正常工作。只有当我使用 AVPlayerViewController 时才会发生这种情况。如果我使用 UIViewController 那么它工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 2015-09-03
  • 2020-08-31
相关资源
最近更新 更多