【问题标题】:Problems to show live cameras with WPFMediaKit [duplicate]使用 WPFMediaKit 显示实时摄像机的问题 [重复]
【发布时间】:2014-02-26 10:38:11
【问题描述】:

我有一个列表视图,它显示了系统使用 WPFMediaKit 识别的所有相机的小预览。

这是我的代码:

Window4.xaml

<Window x:Class="SampleApplication.Window4"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:WPFMediaKit="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit"
    Title="Window4" Height="300" Width="300">
<Window.Resources>
    <Style x:Key="CamerasLVStyle" TargetType="{x:Type ListView}" BasedOn="{StaticResource {x:Type ListBox}}">
        <Setter Property="BorderBrush" Value="Black"/>
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border 
                        x:Name="bd" >
                        <ScrollViewer>
                            <WrapPanel
                                ItemWidth="75"
                                ItemHeight="65"
                                IsItemsHost="True"
                                Width="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType={x:Type ScrollContentPresenter}}}"/>
                        </ScrollViewer>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="CamerasLVItem" TargetType='{x:Type ListViewItem}' BasedOn='{StaticResource {x:Type ListBoxItem}}'>
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Setter Property="VerticalContentAlignment" Value="Stretch"/>
        <Setter Property="Margin" Value="0,0,0,0"/>
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <Border 
                        Background="#FF1E2225">
                        <WPFMediaKit:VideoCaptureElement x:Name="videoCapElement"
                                                         LoadedBehavior="Play"
                                                         VideoCaptureDevice="{Binding}"/>
                    </Border>
                </DataTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="ToolTip">
            <Setter.Value>
                <StackPanel>
                    <TextBlock Text="{Binding Name}"/>
                </StackPanel>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <ListView x:Name="CamerasList"
            Grid.Column="1"
            Background="{x:Null}"
            SelectionMode="Single"
            ItemsSource="{Binding Cameras}"
            Style="{StaticResource CamerasLVStyle}"
            ItemContainerStyle="{StaticResource CamerasLVItem}"/>
</Grid>

Window4.xam.cs

public partial class Window4 : Window
{
    private List<DsDevice> _cameras;
    public List<DsDevice> Cameras
    {
        get { return _cameras; }
        set { _cameras = value; }
    }

    public Window4()
    {
        InitializeComponent();

        Cameras = MultimediaUtil.VideoInputDevices.ToList();
        this.DataContext = this;
    }
}

在某些电脑上工作正常并显示所有摄像头,但在其他一些电脑上则没有。

例如,我有一个带有集成网络摄像头和 Microsoft LifeCam Cinema 的 Windows 8.1 笔记本。

有时会显示第一个,有时会显示第二个,但绝不会同时显示两者(两个黑色方块都会出现,但只显示一个流)。

有什么建议吗? 谢谢。

【问题讨论】:

    标签: c# wpf video wpf-mediakit


    【解决方案1】:

    有时会显示第一个,有时会显示第二个,但绝不会同时显示两者

    2 个以上 USB 摄像头不能一起工作(但它们可能单独工作仍然正常)的典型原因是 USB 带宽不足以让它们同时运行。有一个带宽限制,相当低:同步管道(通常用于视频)的最大吞吐量为 24MB/s。

    如果两个摄像头连接到两个不同的根集线器,它就可以工作。

    关于这个问题的更多信息:

    【讨论】:

      【解决方案2】:

      嗯,我发现了问题。

      经过多次尝试,与代码斗争,问题出在硬件上。

      如果我将 Microsoft LifeCam Cinema 连接到笔记本电脑的 USB 端口,而不是将其连接到通过 USB 连接到笔记本电脑的辅助显示器的 USB 端口,则两个摄像头会同时显示在应用程序中。

      我不知道为什么,但是...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-21
        相关资源
        最近更新 更多