2010-04-19 7 views
5

Ich benutze Silverlight 4, um auf die Webcam zuzugreifen. Alles funktioniert gut, wenn ich die Web-Cam bei einem Button-Click-Event starte, bekomme ich die Aufforderung zur Erlaubnis. Ich möchte, dass die Webcam startet, wenn Benutzersteuerung lädt, aber aus irgendeinem Grund, wenn ich den gleichen Code auf dem Loaded-Ereignis ausführen, bekomme ich keine Eingabeaufforderung, wenn der folgende Code ausgeführt wird: 'Silverlight 4 Web Cam Erlaubnis beim Laden von User Control

CaptureDeviceConfiguration.RequestDeviceAccess ()

Hat jemand eine Arbeit dafür?

+0

Haben Sie eine Lösung dafür gefunden? Vielleicht eine js Workaround? – morsanu

Antwort

1

Die Sicherheit beim Zugriff auf lokale Geräte ist sehr gering. Starten der Erfassung muss eine Benutzeraktion vorausgehen.

Anstatt die Aufnahme vom geladenen Ereignis zu starten, müssen Sie sie in ein Click-Ereignis verschieben.

-Code hinter:

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> 
2

fand ich für das Problem eine Abhilfe. Ich klicke automatisch auf den Button, der die Webcam beim Loaded-Event des Controls startet.

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

Das macht die Arbeit für mich, weil es mir nichts ausmacht, eine Schaltfläche auf der Benutzeroberfläche zu haben. Aber ich denke, Sie können einen Dummy erstellen und ihn ausblenden, wenn es notwendig ist.

+0

großartige Lösung. Danke – ILya