Xamarin Forms 中的视频播放器在最小化和恢复时消失了

Posted

技术标签:

【中文标题】Xamarin Forms 中的视频播放器在最小化和恢复时消失了【英文标题】:Video player in Xamarin Forms is gone when minimized and resumed 【发布时间】:2020-08-26 07:19:17 【问题描述】:

我已经以 xamarin 形式实现了一个视频播放器,以作为我的登录屏幕的背景视频播放。视频在开始时成功加载并且没有声音和循环播放(如配置)。但问题是当我最小化应用程序并再次恢复,然后视频消失了,我甚至无法播放像@ 987654324@

我尝试的链接如下

    http://makanda.io/how-to-create-a-background-video-in-xamarin-forms/(我先试了这个链接) https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/video-player/(然后完全替换为这个)

两个链接都可以正常工作,但两个链接中的问题相同。

我试图解决什么问题?

    我尝试在我的OnAppearing() 方法中将视频恢复为if(videoPlayer.Status == Renderers.VideoStatus.Paused) videoPlayer.Play()。但它不起作用 我目前正在尝试从堆栈布局内的代码动态加载视频。但我不知道如何从后面的代码中设置视频源。我这样做如下

string source = "";
switch (Device.RuntimePlatform)

    case Device.ios:
        source = "Videos/walkthroughvideo9_16.mp4";
        break;
    case Device.android:
        source = "walkthroughvideo9_16.mp4";
        break;
    default:
        source = "walkthroughvideo9_16.mp4";
        break;


VideoPlayer video = new VideoPlayer()

    Source = (UriVideoSource)source
;

错误提示,无法将字符串转换为 UriVideoSource

帮助链接:

https://developer.android.com/reference/android/widget/VideoView

当应用进入后台时,视频视图似乎没有保持其状态。

【问题讨论】:

【参考方案1】:

我目前正在尝试从堆栈布局内的代码动态加载视频。但我不知道如何从后面的代码中设置视频源。我这样做如下

我注意到您的路径来自本地资源,您可以使用以下代码加载视频。如果你的路径是一个 URL,你可以使用 videoPlayer.Source = VideoSource.FromUri(source); 来加载它。

  var videoPlayer=new VideoPlayer();

            string source = "";
            switch (Device.RuntimePlatform)
            
                case Device.iOS:
                    source = "Videos/iOSApiVideo.mp4";
                    break;
                case Device.Android:
                    source = "AndroidApiVideo.mp4";
                    break;
                default:
                    source = "AndroidApiVideo.mp4";
                    break;
            
            videoPlayer.Source = VideoSource.FromResource(source);

我尝试在我的 OnAppearing() 方法中像 if(videoPlayer.Status == Renderers.VideoStatus.Paused) videoPlayer.Play() 一样恢复视频。但它不起作用

这是我运行的演示结果,当我回到我的应用程序时,它可以工作。我也实现了寻找上一个时间跨度功能。

这是我的演示。

https://drive.google.com/file/d/1kpYbMV5mA3UdbGD7r6tLv1S2ix7AwM5B/view?usp=sharing

【讨论】:

如果以上回答对您有帮助,请不要忘记采纳为回答(点击此回答左上角的“✔”),对有类似问题的人会有所帮助 嗨@Leon。我试过你的代码。但仍然是同样的问题。 @Thameem 请发布您的演示。 drive.google.com/file/d/1NUYMqG8krlAZFukfdeCw4wPxUCQmL7ZV/… 这是我的代码老兄。 当我在驱动器中运行您的项目时,它按预期工作。无法弄清楚我哪里出错了。【参考方案2】:

我使用计时器作为解决方法来恢复在应用进入睡眠模式时暂停的视频。

protected override void OnAppearing()

    base.OnAppearing();
    shouldTimerRun = true;

    Device.StartTimer(new TimeSpan(0, 0, 1), () =>
    
        Device.BeginInvokeOnMainThread(() =>
        
            if (videoPlayer.Status == VideoStatus.Paused)
            
                //videoPlayer.TimeToEnd = timeSpan;
                videoPlayer.Position = timeSpan;
                videoPlayer.Play();
            
        );
        return shouldTimerRun;
    );


protected override void OnDisappearing()

    base.OnDisappearing();
    shouldTimerRun = false;
    timeSpan = videoPlayer.Position;

【讨论】:

感谢您的分享,请采纳您的回答。它将帮助其他有类似问题的人。

以上是关于Xamarin Forms 中的视频播放器在最小化和恢复时消失了的主要内容,如果未能解决你的问题,请参考以下文章

最新 iOS 更新 (12.2) 后,本地存储中的视频未在 WebView (Xamarin.Forms) 中播放

使用Xamarin Forms播放视频

我应该在 Xamarin.Forms 中使用啥视频或媒体播放器? 3 似乎可用

如何使用 xamarin.forms 在移动设备中选择多个音频和/或视频文件?

Xamarin Forms:使用 webView 播放本地视频(测试 Android ATM)

Xamarin Forms Webview html 视频不在 iOS 设备上播放