在Xamarin UWP中创建包后,视频仅使用语音播放,我无法看到视频

在Xamarin UWP中创建包后,视频仅使用语音播放,我无法看到视频,xamarin,xamarin.forms,xamarin.uwp,Xamarin,Xamarin.forms,Xamarin.uwp,我正在使用最新版本的MediaManager插件来播放视频。当我在调试模式下运行应用程序时,一切正常,但当我为窗口创建一个包时,视频并不仅仅显示声音 我正在使用下面的软件包 Plugin.MediaManager.Forms 这是我的XAML页面 <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xa

我正在使用最新版本的MediaManager插件来播放视频。当我在调试模式下运行应用程序时,一切正常,但当我为窗口创建一个包时,视频并不仅仅显示声音

我正在使用下面的软件包

Plugin.MediaManager.Forms

这是我的XAML页面

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Digi_Sign.Views.MediaScreen"
             xmlns:forms="clr-namespace:MediaManager.Forms;assembly=MediaManager.Forms"
             BackgroundColor="Black">
    <ContentPage.Content>
        <Grid x:Name="stkLayout" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand" BackgroundColor="Black">
            <forms:VideoView VideoAspect="AspectFill"  x:Name="videoPlayer" ShowControls="False"  />
             </Grid>
    </ContentPage.Content>
</ContentPage>
CrossMediaManager.Current.Play(fileName);

在包错误日志中找不到错误,正如我提到的,在调试模式下一切正常,但在发布模式下不工作,很可能是因为您描述的行为(以及查看代码),听起来好像是因为视频没有在UI线程上运行,这会导致应用程序播放音频而不是视频。因此,将其更改为以下内容:

Device.BeginInvokeOnMainThread(() => { CrossMediaManager.Current.Play(fileName); });

基本上无法在xamrin.UWP的本机代码中初始化视频渲染器,因此我们需要在UWP平台的App.xaml.cs中手动加载渲染程序集进行初始化

下面是我的代码,我在OnLaunched()中加载程序集文件,并替换现有的Xamarin.Forms.Forms.Init()

protectedoverride void OnLaunched(启动ActivatedEventargs e)
{
Windows.UI.Xaml.Controls.Frame rootFrame=Window.Current.Content作为Windows.UI.Xaml.Controls.Frame;
if(rootFrame==null)
{
rootFrame=newwindows.UI.Xaml.Controls.Frame();
rootFrame.NavigationFailed+=OnNavigationFailed;

列表

我也尝试过,但没有成功,最后我得到了我们需要在本机平台上手动初始化viewrenderer的解决方案。哦,太好了!好了,创建另一个答案,然后将解决方案放在那里,这样我们就可以关闭它了
  protected override void OnLaunched(LaunchActivatedEventArgs e)
        {
            Windows.UI.Xaml.Controls.Frame rootFrame = Window.Current.Content as Windows.UI.Xaml.Controls.Frame;
            if (rootFrame == null)
            {

                rootFrame = new Windows.UI.Xaml.Controls.Frame();
                rootFrame.NavigationFailed += OnNavigationFailed;

                List<Assembly> assembliesToAdd = new List<Assembly>();
                assembliesToAdd.Add(typeof(VideoViewRenderer).GetTypeInfo().Assembly);
                Xamarin.Forms.Forms.Init(e, assembliesToAdd);


                // Place the frame in the current Window
                Window.Current.Content = rootFrame;
            }

            if (rootFrame.Content == null)
            {
                rootFrame.Navigate(typeof(MainPage), e.Arguments);
            }

            Window.Current.Activate();
        }