Silverlight’in ilk üç versiyonunda müthis yenilikler geldi ve kullanim orani her versiyon ile birlikte katlanarak artti. Hala eksik olan birseyler vardi, bunlarin basinda WebCam ve Mikrofon erisimi geliyordu. Silverlight 4 Beta ile birlikte müjdeli haber geldi ve artik silverlight ile WebCam ve Mikrofon erisimi mümkün! Hemde kullanimi son derece basit. Uygulamaya geçmeden önce Silverlight 4 Beta için gerekli olan araçlari indirip kuralim.
- Visual Studio 2010 Beta 2 yada Visual Web Developer Express 2010 Beta 2
- Silverlight 4 Beta Tools for Visual Studio 2010
- Windows Runtime yada Mac Runtime
- Microsoft Expression Blend for .NET 4 Preview
Araçlari kurduktan sonra örnegimiz için Visual Studio 2010 ile yeni bir Silverlight projesi baslatalim. Formumuza Webcam’den gelen görüntüyü göstermek için Rectangle nesnesi, Ses ve kamera aygitlarini listelemek için iki adet combobox nesnesi, camerayi baslatmak-durdurmak ve cameradaki görüntünün resmini almak için bir adet button ve image nesnesi ekleyelim. XAML kodumuz asagidaki gibi oldu.
[XAML]
<UserControl xmlns=" http://schemas.microsoft.com/winfx/2006/xaml/presentation"mlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Class="WebCamMicrofon.MainPage" Height="340" Width="550">
<Grid x:Name="LayoutRoot" Background="White">
<Rectangle Fill="White" Width="400" Height="300"Stroke="Black" Margin="10,20,130,20" x:Name="player"/>
<ComboBox HorizontalAlignment="Right" VerticalAlignment="Top" Width="120" Margin="0,20,8,0" x:Name="cmbAudioSources"/>
<ComboBox HorizontalAlignment="Right" Margin="0,54,8,0" VerticalAlignment="Top" Width="120" x:Name="cmbVideoSources"/>
<Button Content="Fotograf Çek" Width="104" Margin="422,0,24,175" x:Name="btnTake" Height="22" erticalAlignment="Bottom" />
<Button Content="Durdur" HorizontalAlignment="Right" VerticalAlignment="Top" Width="104" x:Name="btnStop" Margin="0,115,24,0"/>
<Button Content="Oynat" HorizontalAlignment="Right" VerticalAlignment="Top" Width="104" x:Name="btnStart" Margin="0,89,24,0"/>
<Image Height="90" HorizontalAlignment="Left" Margin="422,193,0,0" Stretch="Fill" x:Name="image" VerticalAlignment="Top" Width="120" />
</Grid>
</UserControl>
CaptureSource nesnesi, sistemdeki görüntü ve sesin istemcinin browserinda yayinlanmasini saglar. (Hatta yayin sirasinda bir karenin yakalanmasini sagliyor J).
CaptureSource nesnesinin Start metodunu kullanarak görüntünün capture edilmesini sagliyoruz. Stop medodu ise capture isleminin durdurulmasini sagliyor. State isimli enum ile CaptureSource nesnesinin capture durumunu kontrol edebiliriz. AudioCaptureDevice özelligi sistemde yer alan iliskili bir ses aygitini, VideoCaptureDevice özelligi de sistemde yer alan iliskili bir görüntü aygitini temsil eder.
CaptureDeviceConfiguration nesnesi, sistemde yer alan ses ve görüntü aygitlarina erismemizi saglar. Ayrica kullanicinin bu aygitlara erisime izin verip vermedigini kontrol eden üyeleri vardir.
[C#] public partial class MainPage : UserControl
{
public CaptureSource CaptureSource { get; set; }
public MainPage()
{
InitializeComponent();
// Kontrolllerin eventlerini olusturalim
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
this.btnStart.Click += new RoutedEventHandler(btnStart_Click);
this.btnStop.Click += new RoutedEventHandler(btnStop_Click);
this.btnTake.Click += new RoutedEventHandler(btnTake_Click);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
// Ilk yükleme de sistem de yer alan aygitlari ilgili kontrollere yüklüyoruz.
AygitlariYukle();
}
private void AygitlariYukle()
{
// CaptureSource Nesnesinin örnegini alalim.
CaptureSource = new CaptureSource();
// Ses aygitlarini combobox'a yükleyelim. GetAvailableAudioCaptureDevices() Metodu sisteme yer alan ses aygitlarini getiriyor.
cmbAudioSources.ItemsSource = CaptureDeviceConfiguration.GetAvailableAudioCaptureDevices();
cmbAudioSources.DisplayMemberPath = "FriendlyName";
// Kamera aygitlarini combobox'a yükleyelim. GetAvailableVideoCaptureDevices() Metodu sisteme yer alan kamera aygitlarini getiriyor.
cmbVideoSources.ItemsSource = CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices();
cmbVideoSources.DisplayMemberPath = "FriendlyName";
}
void btnStart_Click(object sender, RoutedEventArgs e)
{
// CaptureSource nesnesi baslatilmadiysa...
if (CaptureSource.State != CaptureState.Started)
{
// Seçtigimiz ses aygitini CaptureSource nesnesinin AudioCaptureDevice özelligine baglayalim.
CaptureSource.AudioCaptureDevice = (AudioCaptureDevice)cmbAudioSources.SelectedItem;
// Seçtigimiz kamera aygitini CaptureSource nesnesinin VideoCaptureDevice özelligine baglayalim.
CaptureSource.VideoCaptureDevice = (VideoCaptureDevice)cmbVideoSources.SelectedItem;
// VideoBrush nesnesi olusutralim ve SetSource metoduna CaptureSource'u parametre olarak geçelim.
VideoBrush vb = new VideoBrush();
vb.SetSource(CaptureSource);
// Player isimli kontrol de kameradan gelen görüntüyü gösterelim...
player.Fill = vb;
// Istemci aygitlara erisimi izni verdiyse capture islemini baslatalim.
if (CaptureDeviceConfiguration.AllowedDeviceAccess || CaptureDeviceConfiguration.RequestDeviceAccess())
{
CaptureSource.Start();
}
}
}
void btnStop_Click(object sender, RoutedEventArgs e)
{
// Kamera görüntüsünü capture ediliyorsa.
if (CaptureSource.State != CaptureState.Stopped)
{
// Capture islemini durduralim.
CaptureSource.Stop();
}
}
void btnTake_Click(object sender, RoutedEventArgs e)
{
// Kamera görüntüsü capture ediliyorsa.
if (CaptureSource.State== CaptureState.Started)
{
CaptureSource.AsyncCaptureImage((rsm) =>
{
image.Source = rsm; // Yakalanan kamera görüntüsünü Image nesnesine baglayalim
});
}
}
}
Uygulamamizi çalistirdigimizda asagidaki gibi bir uyari çikacaktir. (Kamera ve Ses aygitiniza erisime izin vermemizi istiyor) Evet diyerek devem edelim.
Sistemimizde yer alan ses ve kamera aygitini seçerek kameradan görüntü almaya baslayalim.
Oynat dedigimizde:)

Birde resim yakalayalim :)

Bu makalenin de sonuna geldik baska bir makale de görüsmek üzere. Silverlight ile kalin ;)
Örnek uygulama için tiklayiniz
Sem GÖKSU
www.semgoksu.com | www.yazilimgunlugu.com
sem.goksu@yazilimgunlugu.com
Kaynaklar
Silverlight 4 Beta SDK