2010-04-19 12 views
5

J'utilise Silverlight 4 pour accéder à la webcam. Tout fonctionne bien quand je démarre la web cam sur un événement de clic de bouton, je reçois l'invite pour la permission. Je souhaite que la web cam démarre lorsque le contrôle utilisateur est chargé, mais pour une raison quelconque lorsque j'exécute le même code sur l'événement Loaded, je ne reçois pas d'invite lors de l'exécution du code suivant: 'Silverlight 4 autorisation de la webcam sur le chargement du contrôle utilisateur

CaptureDeviceConfiguration.RequestDeviceAccess (

Est-ce que quelqu'un a un travail pour cela?

+0

Avez-vous trouvé une solution pour cela? Peut-être une solution de contournement js? – morsanu

Répondre

1

La sécurité d'accès aux périphériques locaux est très limitée. A partir de la capture doit être précédé d'une action de l'utilisateur. Au lieu de démarrer la capture à partir de l'événement chargé, vous devrez le déplacer vers un événement Click.

code

derrière:

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

J'ai trouvé une solution au problème. Je clique automatiquement sur le bouton qui lance la diffusion en continu de la webcam sur l'événement Loaded du contrôle.

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

Cela fait le travail pour moi parce que cela ne me dérange pas d'avoir un bouton sur l'interface utilisateur. Mais je suppose que vous pouvez créer un mannequin et le cacher si c'est nécessaire.

+0

excellente solution. Je vous remercie – ILya