0

我已经在我的Xamarin.Forms项目中正确实现了LibVlcSharp 。

using (var _libVLC = new LibVLC())
            {
                var media = new Media(_libVLC, _link, FromType.FromLocation);
                myvideo.MediaPlayer = new MediaPlayer(media)
                {
                    Fullscreen = true
                };
                myvideo.MediaPlayer.Play();
            };

在我的视频播放器中,我从谷歌驱动器流式传输视频,但有时可能会发生媒体出错并显示此错误:

在此处输入图像描述

流媒体工作,错误可能有很多原因,但这不是我感兴趣的。我想了解如何拦截此错误自定义此错误标签,但我在文档或在线未找到任何内容。

我还想知道是否可以更改按钮的样式,我发现这个属性myvideo.PlaybackControls还有许多其他属性,但我不知道它是否正确以及如何应用它。

谢谢

4

3 回答 3

0

您可以隐藏所有项目并添加控件。

<vlc:MediaPlayerElement x:Name="VideoView"
                            AbsoluteLayout.LayoutFlags="All"
                            EnableRendererDiscovery="False"
                            AbsoluteLayout.LayoutBounds="0,0,1,1">

        <vlc:MediaPlayerElement.PlaybackControls>
            <vlc:PlaybackControls IsVisible="true"
                                  IsAspectRatioButtonVisible="True"
                                  ShowAndHideAutomatically="True"
                                  IsRewindButtonVisible="True"
                                  IsCastButtonVisible="True"
                                  IsLockButtonVisible="True"
                                  IsSeekBarVisible="True"
                                  IsSeekButtonVisible="True"
                                  IsSeekEnabled="True"
                                  IsTracksButtonVisible="True">

                <vlc:PlaybackControls.RemainingTimeLabelStyle>
                    <Style TargetType="Label">
                        <Setter  Property="IsVisible"
                                 Value="false" />
                    </Style>
                </vlc:PlaybackControls.RemainingTimeLabelStyle>

                <vlc:PlaybackControls.MessageStyle>
                    <Style TargetType="Label">
                        <Setter  Property="IsVisible"
                                 Value="false" />
                        <Setter  Property="TextColor" Value="Transparent"/>
                      
                        
                        <Setter Property="Text"
                                Value="0" />
                    </Style>
                </vlc:PlaybackControls.MessageStyle>


                <vlc:PlaybackControls.ElapsedTimeLabelStyle>
                    <Style TargetType="Label">
                        <Setter  Property="IsVisible"
                                 Value="false" />
                    </Style>
                </vlc:PlaybackControls.ElapsedTimeLabelStyle>
            </vlc:PlaybackControls>
        </vlc:MediaPlayerElement.PlaybackControls>
    </vlc:MediaPlayerElement>
于 2022-02-15T08:02:35.787 回答
0

看一下

 <Label Text="{TemplateBinding ErrorMessage}" Style="{TemplateBinding MessageStyle}"
                       IsVisible="{TemplateBinding ErrorMessage, Converter={StaticResource ObjectToBoolConverter}}" />

来自https://code.videolan.org/videolan/LibVLCSharp/-/blob/3.x/LibVLCSharp.Forms/Shared/Themes/Generic.xaml。这是您要修改的 LibVLCSharp 提供的基本样式。

您可以按照本指南https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/styles/xaml/inheritance覆盖样式

在 XAML 中,这可能是

<Style x:Key="labelStyle" TargetType="Label" BasedOn="{StaticResource MessageStyle}">
   <Setter Property="TextColor" Value="Teal" />
</Style>

我创建了一张票以添加有关此https://code.videolan.org/videolan/LibVLCSharp/-/issues/309的更多文档

于 2020-04-01T18:01:55.803 回答
0

没有ShowError method其他细节

private void ShowError()
{
    var errorTextBlock = ErrorTextBlock;
    if (errorTextBlock != null)
    {
        errorTextBlock.Text = string.Format(ResourceLoader.GetString("Error"), Manager.Get<StateManager>().MediaResourceLocator);
        VisualStateManager.GoToState(this, ErrorState, true);
    }
}

您可以通过订阅LibVLC.Log事件获得更多日志

我没有运行代码,但我相信您可以通过ErrorOccured 以下事件拦截错误

var stateManager = Manager.Get<StateManager>();
stateManager.ErrorOccured += (sender, e) => ShowError();

这应该会给你造成问题的原因,如果不是,你应该在libvlcsharp github上提出问题

看起来他们已经创建了PlayBackControls绑定到 LibVLCSharp.Uno 库 PlayBackControls 元素的 PlayBackControls 的属性,并且通过此 XAML应用了图标

<ContentPresenter Grid.Row="1" Content="{TemplateBinding PlaybackControls}" />

您应该能够通过绑定来更改它,只要它与PlayBackControls.Android.iOS匹配

于 2020-04-01T13:51:25.643 回答