在最新更新后,使用Xamarin for iOS播放video已损坏
在Xamarin for iOS更新到v2.0.50727之前,Xamarin for iOS中的以下代码工作正常
这是Xamarin Forms应用程序中自定义渲染器中的代码
class WatchVideoRenderer : PageRenderer { MPMoviePlayerController moviePlayer; protected override void OnElementChanged(VisualElementChangedEventArgs e) { base.OnElementChanged(e); var url = new NSUrl("http://192.168.12.4:8085/MediaUploads/1/211/520140731170618/DPM202.mp4"); moviePlayer = new MPMoviePlayerController(); moviePlayer.ContentUrl = url; moviePlayer.View.Frame = new CGRect((float)((NativeView.Bounds.Width - 600) / 2), (float)((NativeView.Bounds.Height - 450) / 2), 600, 400); MPMoviePlayerController.Notifications.ObserveLoadStateDidChange(OnLoadStateChanged); MPMoviePlayerController.Notifications.ObservePlaybackDidFinish(OnPlaybackComplete); View.AddSubview(moviePlayer.View); moviePlayer.PrepareToPlay(); moviePlayer.ShouldAutoplay = true; moviePlayer.Play(); } private void OnLoadStateChanged(object sender, NSNotificationEventArgs e) { if (moviePlayer.LoadState == MPMovieLoadState.Playable) { } } private void OnPlaybackComplete(object sender, MPMoviePlayerFinishedEventArgs e) { } }
正如我所说,这是在前天工作,之后我在Xamarin上安装了2个更新。 iOS&现在失败了。 我只看到一个黑色的canvas,video永远不会加载。 MPMoviePlayerController不会发出任何通知。 有一个这个应用程序的发布计划在下周,这最后一分钟的错误导致我头痛。 任何帮助都非常感谢。
我通过推送一个新的图像上下文解决了类似的问题。 我修改了代码以包含BeginImageContext()和EndImageContext()。
UIGraphics.BeginImageContext(new CGSize(1,1)); var url = new NSUrl("http://192.168.12.4:8085/MediaUploads/1/211/520140731170618/DPM202.mp4"); moviePlayer = new MPMoviePlayerController(); moviePlayer.ContentUrl = url; moviePlayer.View.Frame = new CGRect((float)((NativeView.Bounds.Width - 600) / 2), (float)((NativeView.Bounds.Height - 450) / 2), 600, 400); UIGraphics.EndImageContext();
尝试切换到AVPlayerViewController而不是MPMoviePlayerController。 将此代码放在OnElementChanged方法中。
我的渲染器是一个视图渲染器而不是页面渲染器,因此您可能需要稍微调整一下。
if(Control == null) { AVPlayerViewController avpvc; AVPlayer avp; var url = NSUrl.FromString("SOME URL HERE"); //or NSUrl.FromFile avp = new AVPlayer(url); avpvc = new AVPlayerViewController(); avpvc.Player = avp; avpvc.ShowsPlaybackControls = true; avp.Play(); this.SetNativeControl(avpvc.View); }
- Firebase检查空值(Swift)
- 将KVO属性的对象作为观察者移除的最佳做法
- “iCloud核心数据”vs“iCloud核心数据”
- UIMenuController方法setTargetRect:inView:不能在UITableView中工作
- 在为ARM64构build时,架构x86_64的未定义符号
- 从Apple Developer Portal删除开发人员证书
- Hackhactons中的iOS开发与未知的开发者? 如何共享Xcode和debugging工具给没有OSX设备的人?
- 我可以使用Google Analytics(分析)来整理iOS应用程式的统计资料吗?
- 如何检测设备上的iCloud帐户是否已更改?