Проблемы с показом живых камер с WPFMediaKit

У меня есть просмотр списка, который показывает небольшие предварительные просмотры всех камер, распознаваемых системой с использованием 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;
    }
}

У некоторых шт работает нормально и показывает все камеры, а у некоторых других нет.

Например, у меня есть ноутбук с Windows 8.1 со встроенной веб-камерой и кинотеатр Microsoft LifeCam.

Иногда он показывает первое, иногда - второе, но никогда оба одновременно (появляются оба черных квадрата, но отображается только один поток).

Любой совет? Благодарю.

2 ответа

Решение

Иногда он показывает первое, иногда показывает второе, но никогда оба одновременно

Типичная причина, по которой 2+ USB-камеры не работают вместе (хотя они могут работать отдельно), заключается в том, что пропускная способность USB недостаточна для их одновременной работы. Существует ограничение полосы пропускания, которое является довольно низким: максимальная пропускная способность изохронного канала (который обычно используется для видео) составляет 24 МБ / с.

Если две камеры подключены к двум разным корневым концентраторам, это работает.

Подробнее по этому вопросу:

Ну, я нашел проблему.

После многих попыток, борющихся с кодом, проблема была аппаратной.

Если я подключу Microsoft LifeCam Cinema к USB-порту ноутбука, а не подключу его к USB-порту дополнительного монитора, подключенного через USB к ноутбуку, обе камеры будут отображаться в приложении одновременно.

Я не знаю почему, но...

Другие вопросы по тегам