2010-04-19 16 views
5

Estoy usando Silverlight 4 para acceder a la cámara web. Todo funciona bien cuando inicio la cámara web en un evento de clic de botón, obtengo la solicitud de permiso. Me gustaría que la cámara web se inicie cuando se carga User Control, pero por alguna razón cuando ejecuto el mismo código en el evento Loaded, no aparece un mensaje cuando ejecuto el siguiente código: 'Permiso de la cámara web de Silverlight 4 en la carga del control de usuario

CaptureDeviceConfiguration.RequestDeviceAccess ()

¿Alguien tiene un trabajo alrededor para esto?

+0

¿Has encontrado alguna solución para esto? Tal vez una solución js? – morsanu

Respuesta

1

La seguridad en el acceso a los dispositivos locales es muy estrecha. Comenzando la captura debe ir precedido por una acción del usuario.

En lugar de iniciar la captura desde el evento cargado, tendrá que moverlo a un evento Click.

Código atrás:

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

he encontrado una solución al problema. Estoy haciendo clic automáticamente en el botón que inicia la transmisión de la cámara web en el evento cargado del control.

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

Esto hace el trabajo por mí porque no me importa tener un botón en la IU. Pero supongo que puedes crear una falsa y esconderla si es necesario.

+0

gran solución. gracias – ILya

Cuestiones relacionadas