我是AvaloniaUI 0.10.5的新手。目前,我正在VideoView控件(LibVLCSharp.Avalonia 3.5.0)上使用macOS上的应用程序。代码是Donadren示例2:(https://github.com/donandren/vlcsharpavalonia/tree/master/samples/LibVLCSharp.Avalonia.Sample)的副本。
视频播放器在窗口控件中工作良好,但是当我将代码复制到UserControl (为了在我的应用程序中的另一个地方重用播放器)时,我听到的是视频的声音,而不是图像。在控制台中,我有以下错误:
[h264 @ 0x7ff85e8d3600] get_buffer () failed
[h264 @ 0x7ff85e8d3600] thread_get_buffer () failed
[h264 @ 0x7ff85e8d3600] decode_slice_header error
[h264 @ 0x7ff85e8d3600] no frame!我试着在网上到处搜索,但什么也找不到。
你能帮帮我吗,谢谢,对不起我的英语不好。
<UserControl xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:viewModels="clr-namespace:Avalonia.NETCoreMVVMApp3.ViewModels"
             xmlns:avalonia="clr-namespace:LibVLCSharp.Avalonia;assembly=LibVLCSharp.Avalonia"
             mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
             x:Class="Avalonia.NETCoreMVVMApp3.Views.VlcControl">
    <Design.DataContext>
        <viewModels:VlcControlViewModel/>
    </Design.DataContext>
    <Grid RowDefinitions="*, Auto">
      <avalonia:VideoView x:Name="VideoView" Grid.Row="0" MediaPlayer="{Binding MediaPlayer}">
      </avalonia:VideoView>
      <Grid Grid.Row="1" RowDefinitions="Auto,Auto,Auto">
        <Grid Grid.Row="0" ColumnDefinitions="Auto,*,Auto">
          <TextBlock Text="File (url):" Grid.Column="0" VerticalAlignment="Center" />
          <AutoCompleteBox Name="mediaUrl" Text="{Binding MediaUrl, Mode=TwoWay}" Items="{Binding Played}" FilterMode="Contains" Grid.Column="1" IsDropDownOpen="False" />
          <Button Content="Open File" Command="{Binding OpenCommand}" Grid.Column="2" />
        </Grid>
        <Grid Grid.Row="1" ColumnDefinitions="Auto,*,Auto">
          <TextBlock Text="{Binding CurrentTime}" Grid.Column="0" />
          <TextBlock Text="{Binding Duration}" Grid.Column="2" />
          <Slider Minimum="0" Maximum="100" Value="{Binding Position}" Grid.Column="1" />
        </Grid>
        <Grid Grid.Row="2" ColumnDefinitions="Auto, *,Auto">
          <StackPanel Orientation="Horizontal" Grid.Column="0" Spacing="5">
            <Button Content="Play" Command="{Binding PlayCommand}" />
            <Button Content="Stop" Command="{Binding StopCommand}" />
            <Button Content="Pause" Command="{Binding PauseCommand}" />
            <Button Content="-1s" Command="{Binding BackwardCommand}" />
            <Button Content="+1s" Command="{Binding ForwardCommand}" />
            <Button Content="Next Frame" Command="{Binding NextFrameCommand}" />
          </StackPanel>
          <Grid ColumnDefinitions="Auto,*" Grid.Column="1">
            <TextBlock Text="{Binding State, StringFormat='State:\{0\}'}" Grid.Column="0" VerticalAlignment="Center" />
            <ScrollViewer Grid.Column="1" MaxHeight="40" HorizontalScrollBarVisibility="Disabled">
              <TextBlock Margin="5,0,0,0" Text="{Binding Information}" TextWrapping="Wrap" VerticalAlignment="Center" />
            </ScrollViewer>
          </Grid>
          <StackPanel Orientation="Horizontal" Grid.Column="2" Spacing="2">
            <StackPanel Orientation="Horizontal">
              <TextBlock Text="Rendering:" VerticalAlignment="Center" />
              <ComboBox SelectedIndex="{Binding #VideoView.VlcRenderingOptions}">
                <ComboBoxItem Content="{x:Static avalonia:LibVLCAvaloniaRenderingOptions.VlcNative}" />
                <ComboBoxItem Content="{x:Static avalonia:LibVLCAvaloniaRenderingOptions.Avalonia}" />
                <ComboBoxItem Content="{x:Static avalonia:LibVLCAvaloniaRenderingOptions.AvaloniaCustomDrawingOperation}" />
              </ComboBox>
            </StackPanel>
            <CheckBox Content="Stats" IsChecked="{Binding #VideoView.DisplayRenderStats}" />
            <CheckBox Content="Volume:" IsChecked="{Binding !IsMuted, Mode=TwoWay}" />
            <Slider IsEnabled="{Binding !IsMuted}" Minimum="0" Maximum="100" Width="200" Value="{Binding Volume}" VerticalAlignment="Center">
              <Slider.Styles>
                <Style Selector="Slider:disabled">
                  <Setter Property="Opacity" Value="0.5" />
                </Style>
              </Slider.Styles>
            </Slider>
          </StackPanel>
        </Grid>
      </Grid>
  </Grid>
</UserControl>发布于 2022-03-31 16:44:11
众所周知,Avalonia的问题在于不能在Avalonia UserControl中使用UserControl(仅在窗口中),以及不能在VLC MediaPlayer的顶层使用控件。
幸运的是,我成功地建立了一个相当优雅的方法(可能是许多可能的方法之一,但到目前为止还没有)来解决所有这些问题,。
因此,在Github上,我创建了两个存储库来共享,展示了如何使用
可以自由地探索和理解代码并构建/运行它。比2019年更需要。
标准VideoView.cs代码(来自LibVLCSharp.Avalonia标准项目)已经被修改以达到列出的结果,修改后的(非常小的) LibVLCSharp.Avalonia项目也包含在这两个repos中。
为了使Avalonia UserControl能够放置在VLC MediaPlayer之上,我向VideoView添加了一个新的Content属性,它将创建和处理自己的新顶部窗口,并将内容添加到此窗口。
可以将内容创建为新的UserControl (例如,一组MediaPlayer控件),并将此UserControl添加到VideoView内容中,如下所示:
<vlcsharp:VideoView
   HorizontalAlignment="Stretch"
   VerticalAlignment="Stretch"
   x:Name="VideoViewer">
   <!-- Content -->
   <Panel
    VerticalAlignment="Bottom"
    Opacity="0.8"
    Background="Gray">
    <controls:PlayerControls/>
   </Panel>
</vlcsharp:VideoView>为了显示我所达到的结果,在这两个存储库中,我创建了一个带有两个按钮的用户控件: Play和Stop。控制位置在底部,按钮使用PointerEnter/PointerLeave事件显示,因此按钮将显示/隐藏移动鼠标在正确的位置。我使用了一个简单的非动画不透明度,设置为0.8 (输入)和0(离开)。
您可以添加某种动画和/或扩展功能。我懒得在repos中这样做,因为它们只是POCs (概念的证明)。
Note:所有的测试都在Windows10、Kubuntu18.04、MacOS 10.13、Raspberry Pi3 Model B DietPi(MATE)上进行,代码来源没有任何变化。
编辑:在Kubuntu 18.04上成功测试

在MacOS 10.13 (高塞拉利昂)上成功测试

编辑:在覆盆子DietPi (MATE或Xfce)上成功测试
以前关于Raspbian拉伸的测试不起作用(透明度和不透明度不起作用,回放充满了旋转和像素化)
有了DietPi和MATE (或Xfce),覆盖控制(按钮)的透明度和不透明度就完全得到了认可。回放是平稳的,没有抽搐,中断或其他什么。
作为根用户,我安装了libx11-dev, libvlc-dev and vlc,复制了发布的示例(dotnet publish -c release -f net5.0 -r linux-arm构建在Windows 10中),chmod 777 the whole folder content并运行示例。,它必须以root或sudo的形式运行。


编辑2022年4月27日
新发行版 of Avalonia LibVLCSharp,允许在Avalonia应用程序中显示与LibVLCSharp一起播放的视频场景的多个可拖动控件。
对任何感兴趣的人来说。好好享受吧。
所有链接更新(最新的lib和样例版本)
非官方Avalonia LibVLCSharp链接
VLC视频播放器在Avalonia窗口/用户控件内嵌入单个静态可定制控件(e.g.player按钮) LibVLCSharp.Avalonia.Unofficial
VLC视频播放器在Avalonia窗口/用户控件中嵌入多个可拖动的可自定义控件(e.g.player按钮、图像、.) LibVLCSharp.Avalonia.Unofficial.UCanvas
LibVLCSharp.Avalonia.Unofficial样品 LibVLCSharp.Avalonia.Unofficial.Samples
LibVLCSharp.Avalonia.Unofficial.UCanvas样品 LibVLCSharp.Avalonia.Unofficial.UCanvas.Samples
YAMP 2-使用LibVLCSharp.Avalonia.Unofficial库 Github来源 观看YAMP2的动作的开源视频播放器示例
https://stackoverflow.com/questions/68292849
复制相似问题