Проблемы с показом живых камер с 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 к ноутбуку, обе камеры будут отображаться в приложении одновременно.
Я не знаю почему, но...