【问题标题】:Display /dev/videoX feed in a GUI on Linux-ARM64在 Linux-ARM64 上的 GUI 中显示 /dev/videoX 提要
【发布时间】:2021-04-12 13:11:48
【问题描述】:

我有一台在 64 位 ARM 处理器上运行 Ubuntu 18.04LTS 的设备。我想开发一个 GUI,让我可以访问潜在的多个附加设备(/dev/video0、/dev/video1)的摄像头馈送。理想情况下,这可以通过 .NET 堆栈实现(我正在研究的是 .NET Core 和 AvaloniaUI)。我知道使用 P/Invoke,但对使用它只有粗略的了解。我也知道libv4l2 库,但是我不确定从那里去哪里。

如果我不得不将此表述为一个更直接的问题:如何在使用 NET Core(最好使用 AvaloniaUI)构建的 GUI 应用程序中的 Ubuntu-ARM64 设备上显示 /dev/videoX 提要?

【问题讨论】:

    标签: ubuntu .net-core arm video-capture avaloniaui


    【解决方案1】:
    1. 安装https://www.nuget.org/packages/LibVLCSharp.Avalonia/
    2. MainWindow.asaml
    <Window 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:vlc="clr-namespace:LibVLCSharp.Avalonia;assembly=LibVLCSharp.Avalonia"
            mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
            x:Class="AvaloniaCam.MainWindow"
            Title="AvaloniaCam">
            <vlc:VideoView x:Name="VideoView"/>
    </Window>
    
    1. MainWindow.asaml.cs:
        public class MainWindow : Window
        {
            public MainWindow()
            {
                AvaloniaXamlLoader.Load(this);
                if(Design.IsDesignMode)
                    return;
                var videoView = this.Get<VideoView>("VideoView");
                var libVlc = new LibVLC();
                videoView.MediaPlayer = new MediaPlayer(libVlc);
                videoView.MediaPlayer.Play(new Media(libVlc, "v4l2://", FromType.FromLocation));
            }
        }
    

    请注意,您可能需要为 libvlcsharp 的 P/Invoke 层安装 libvlc-dev 软件包才能工作。

    【讨论】:

    • 它现在按预期工作,再次感谢@kekekeks!我删除了 XAML Style 行并将逻辑移至 ViewModel 而不是 CB。最后一个问题,如果你有机会看到这个:如何指定从哪个提要中提取视频?我在此设备上设置了多个摄像头。是否会像将“mrl 路径”更改为 "v4l2://dev/video3" 并创建多个 VideoView、LibVLC 和 Media 对象这样简单?
    • 可以,可以在url中指定设备节点,可以使用多个播放器对象。另见wiki.videolan.org/Documentation:Modules/v4l2
    • 打算将此标记为答案,因为您回答了我所要求的问题,但是未来的读者应该谨慎并检查 github.com/AvaloniaUI/Avalonia/issues/5796code.videolan.org/videolan/LibVLCSharp/-/issues/458 以查看该错误是否与多个VideoView 控件在花时间尝试实现它之前已修复。对于单摄像头系统,我相信这种实现方式可能适合您。
    • 这可能是 LibVLCSharp 集成库中的一个问题,因为我在玩 mplayer 时没有遇到任何大小问题:github.com/AvaloniaUI/Avalonia/blob/… 您可以使用 mplayer -vo x11 tv:// -tv driver=v4l2:device=/dev/video0 -zoom -wid &lt;handle&gt; 获取视频提要
    • Mkay,用 mplayer 转载。似乎是一个 Avalonia 错误
    猜你喜欢
    • 2014-07-19
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    相关资源
    最近更新 更多