Разрешение веб-камеры Silverlight 4 при загрузке пользовательского элемента управления - PullRequest
5 голосов
/ 19 апреля 2010

Я использую Silverlight 4 для доступа к веб-камере. Все работает нормально, когда я запускаю веб-камеру на событие нажатия кнопки, я получаю приглашение для разрешения. Я хотел бы, чтобы веб-камера запускалась при загрузке пользовательского элемента управления, но по какой-то причине, когда я запускаю тот же код в событии Loaded, я не получаю приглашение при выполнении следующего кода: '

CaptureDeviceConfiguration.RequestDeviceAccess ()

У кого-нибудь есть обходной путь?

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Я нашел решение этой проблемы. Я автоматически нажимаю кнопку, которая запускает потоковую передачу веб-камеры при событии Loaded элемента управления.

ButtonAutomationPeer peer = new ButtonAutomationPeer(btnStartWebcam);
IInvokeProvider invokeProv = 
    peer.GetPattern(PatternInterface.Invoke) 
    as IInvokeProvider;
invokeProv.Invoke();

Это делает работу для меня, потому что я не против иметь кнопку на пользовательском интерфейсе. Но я думаю, что вы можете создать фиктивный и скрыть его, если это необходимо.

1 голос
/ 19 апреля 2010

Безопасность доступа к локальным устройствам очень жесткая. Для начала захвата должно предшествовать действие пользователя .

Вместо того, чтобы начинать захват из загруженного события, вам придется переместить его в событие Click.

Код позади:

public void StartCam()
{
  VideoCaptureDevice dev = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice();
  if(CaptureDeviceConfiguration.RequestDeviceAccess() &&
     CaptureDeviceConfiguration.AllowedDeviceAccess)
  {
    CaptureSource capture = new CaptureSource();
    capture.VideoCaptureDevice = dev;

    VideoBrush videoBrush = new VideoBrush();
    videoBrush.SetSource(capture);

    capture.Start();

    WebCamRectangle.Fill = videoBrush;
  }
}

private void button1_Click(object sender, RoutedEventArgs e)
{
  StartCam();
}

Xaml:

<Grid x:Name="LayoutRoot" Background="White">
    <Grid.RowDefinitions>
        <RowDefinition Height="49*" />
        <RowDefinition Height="251*" />
    </Grid.RowDefinitions>
    <Rectangle Name="WebCamRectangle" 
               Stroke="Black" StrokeThickness="1" Grid.Row="1" />
    <Button Content="Start" Height="25" HorizontalAlignment="Left" 
            Margin="12,12,0,0" Name="button1" VerticalAlignment="Top"
            Width="135" Click="button1_Click" />
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...