在 Xamarin UWP 中创建包后,视频只能用语音播放,我看不到视频

Posted

技术标签:

【中文标题】在 Xamarin UWP 中创建包后,视频只能用语音播放,我看不到视频【英文标题】:After Creating Package in Xamarin UWP, Video is Playing Only With Voice, I am Not able to see Video 【发布时间】:2019-11-11 17:44:42 【问题描述】:

我正在使用最新版本的 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>

CS 页面

CrossMediaManager.Current.Play(fileName);

在包错误日志中没有发现错误,正如我提到的,在调试模式下一切正常,但在发布模式下不工作

【问题讨论】:

【参考方案1】:

xamrin.UWP的原生代码基本上没有办法为视频初始化渲染器,所以我们需要在UWP平台的App.xaml.cs中手动加载渲染程序集进行初始化

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

的代码
  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();
        

更多细节,这里是链接。您可以在哪里找到更多解释。

https://forums.xamarin.com/discussion/119451/crossmedia-works-in-debug-but-not-in-release-for-uwp-error-msg-about-onecore

【讨论】:

【参考方案2】:

很可能从您描述的行为(并查看您的代码)来看,这听起来像是因为视频没有在 UI 线程上运行,这导致应用程序播放音频而不是视频。所以改成下面这样:

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

【讨论】:

我也试过了,但没有成功,最后我得到了我们需要在原生平台上手动初始化viewrenderer的解决方案。 forums.xamarin.com/discussion/119451/… 哦,太好了!好的,只需创建另一个答案并将解决方案放在那里,这样我们就可以关闭它了

以上是关于在 Xamarin UWP 中创建包后,视频只能用语音播放,我看不到视频的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UWP 上使用 Xamarin.Forms 在平板电脑之间通过 WiFiDirect 发送视频

Xamarin Forms 便携式项目:UWP 错误 -2147467259

Xamarin UWP:视频播放器组件似乎不适用于打开 .NET Native 工具链的编译

Xamarin.UWP 自定义 ViewCell 存在绑定问题

Xamarin.Forms 手势密码实现

在测试中创建和导入辅助函数,而不使用 py.test 在测试目录中创建包