Click here to Skip to main content
11,429,382 members (67,765 online)
Click here to Skip to main content

How to use a web cam in C# with .NET Framework 4.0 and Microsoft Expression Encoder 4

, 4 Jul 2011 CPOL
Rate this:
Please Sign up or sign in to vote.
How to use a webcam in C#.

Screenshot_small.jpg

Introduction

If you are interested in using your webcam from C# in an easy way, this little article is for you. In order to achieve our goal, we need Microsoft .NET 4.0 and Microsoft Expression Encoder 4. You can get the latter for free, using the 'Microsoft Web Platform Installer', that can be downloaded from here: http://www.microsoft.com/web/downloads/platform.aspx.

Web_Platform_Installer_small.jpg

After that, we need to create a Windows Forms application and add the following references to the project:

Assembly Microsoft.Expression.Encoder
C:\Program Files\Microsoft Expression\Encoder 4\SDK\Microsoft.Expression.Encoder.dll

Assembly Microsoft.Expression.Encoder.Utilities
C:\Program Files\Microsoft Expression\Encoder 4\SDK\Microsoft.Expression.Encoder.Utilities.dll

Assembly Microsoft.Expression.Encoder.Types
C:\Program Files\Microsoft Expression\Encoder 4\SDK\Microsoft.Expression.Encoder.Types.dll

Using the Code

Here is the code to enumerate the video and audio devices:

foreach (EncoderDevice edv in EncoderDevices.FindDevices(EncoderDeviceType.Video))
{
     lstVideoDevices.Items.Add(edv.Name);
}
foreach (EncoderDevice eda in EncoderDevices.FindDevices(EncoderDeviceType.Audio))
{
     lstAudioDevices.Items.Add(eda.Name);
}

Here is the code to preview the video and the audio:

// Starts new job for preview window
_job = new LiveJob();

// Create a new device source. We use the first audio and video devices on the system
_deviceSource = _job.AddDeviceSource(video, audio);

// Sets preview window to winform panel hosted by xaml window
_deviceSource.PreviewWindow = new PreviewWindow(new HandleRef(panel1, panel1.Handle));

// Make this source the active one
_job.ActivateSource(_deviceSource);

Here is the code to record the video and audio to a .wmv file:

// Sets up publishing format for file archival type
FileArchivePublishFormat fileOut = new FileArchivePublishFormat();

// Sets file path and name
fileOut.OutputFileName = String.Format("C:\\WebCam{0:yyyyMMdd_hhmmss}.wmv", DateTime.Now);

// Adds the format to the job. You can add additional formats
// as well such as Publishing streams or broadcasting from a port
_job.PublishFormats.Add(fileOut);

// Start encoding
_job.StartEncoding();

Streaming the webcam over the network

Here is the code to stream the video (and audio) of your webcam over the network:

// Sets up publishing format for file archival type
_job = new LiveJob();

_deviceSource = _job.AddDeviceSource(video, audio);
_job.ActivateSource(_deviceSource);         

// Finds and applys a smooth streaming preset        
_job.ApplyPreset(LivePresets.VC1256kDSL16x9);

// Creates the publishing format for the job
PullBroadcastPublishFormat format = new PullBroadcastPublishFormat();
format.BroadcastPort = 8080;
format.MaximumNumberOfConnections = 2;

// Adds the publishing format to the job
_job.PublishFormats.Add(format);

// Starts encoding
_job.StartEncoding();

To view the broadcast, you can create a WPF application and use the MediaElement. It is just one line of code! Here is the whole code of the WPF application:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Show Broadcast" Height="350" Width="525">
    <Grid>
        <MediaElement Name="VideoControl" Source="http://localhost:8080" />
    </Grid>
</Window>

Conclusion

A piece of cake, isn't it? This is the new frontier of how to manage video and audio from C#. In the early days of C#, using a webcam was not so easy. I hope this will help those who want to play a bit with a webcam. Thanks for reading my first article Smile | :)

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Massimo Conti
Software Developer
Italy Italy
No Biography provided

Comments and Discussions

 
GeneralMy vote of 4 Pin
Member 94807894-Oct-12 17:30
memberMember 94807894-Oct-12 17:30 
QuestionUnable to create Device Pin
harmurk20-Sep-12 4:15
memberharmurk20-Sep-12 4:15 
QuestionHow to implement in existing project Pin
Member 943991418-Sep-12 13:43
memberMember 943991418-Sep-12 13:43 
QuestionLive video display in c# .net Pin
Member 900485711-Jul-12 19:36
memberMember 900485711-Jul-12 19:36 
Questionincrustation Pin
gefkuz23-Jun-12 3:11
membergefkuz23-Jun-12 3:11 
Questionurgent please i need simple security camera application in c# or vb.net Pin
kaydyonis21-Jun-12 9:39
memberkaydyonis21-Jun-12 9:39 
Questionexcellent! Pin
Shejn21-Jun-12 5:34
memberShejn21-Jun-12 5:34 
QuestionLiveJob [modified] Pin
weed2k14-Jun-12 5:06
memberweed2k14-Jun-12 5:06 
Questionbroadcast in internet Pin
Member 802424911-Jun-12 2:16
memberMember 802424911-Jun-12 2:16 
QuestionVideo is delay (lagging) after 1 minute running. Pin
rockblin7-Jun-12 17:17
memberrockblin7-Jun-12 17:17 
QuestionRe: Video is delay (lagging) after 1 minute running. Pin
rockblin7-Jun-12 18:23
memberrockblin7-Jun-12 18:23 
QuestionResolution Pin
murillobraga7-Jun-12 10:50
membermurillobraga7-Jun-12 10:50 
Questionsee streamed video in web site Pin
Member 80242495-Jun-12 4:47
memberMember 80242495-Jun-12 4:47 
QuestionGreat Project Pin
665909018-May-12 11:52
member665909018-May-12 11:52 
Thanks for your reply,and sorry my english

i start my university project "live stream over LAN" and your project help me ,can you help me on this project,or sned me tips for this project
QuestionCapturing Encode result to save in DataBase Pin
bkrussell18-May-12 4:21
memberbkrussell18-May-12 4:21 
GeneralRecord Button thrown Expection Pin
665909011-May-12 4:22
member665909011-May-12 4:22 
GeneralRe: Record Button thrown Expection Pin
Massimo Conti11-May-12 10:00
memberMassimo Conti11-May-12 10:00 
QuestionVideo Delay and Lag Pin
Member 80802984-May-12 15:37
memberMember 80802984-May-12 15:37 
GeneralMy vote of 5 Pin
Mohammad Sepahvand30-Apr-12 2:34
memberMohammad Sepahvand30-Apr-12 2:34 
GeneralRe: My vote of 5 Pin
Mohammad Sepahvand4-May-12 23:46
memberMohammad Sepahvand4-May-12 23:46 
GeneralMy vote of 5 Pin
andyclass5027-Apr-12 13:13
memberandyclass5027-Apr-12 13:13 
QuestionExcellent! but had to change location where files saved to Pin
farvenkloodgen18-Apr-12 22:43
memberfarvenkloodgen18-Apr-12 22:43 
BugCall to PickBestVideoFormat is wrong Pin
Chad Z. Hower aka Kudzu28-Mar-12 5:22
memberChad Z. Hower aka Kudzu28-Mar-12 5:22 
GeneralRe: Call to PickBestVideoFormat is wrong Pin
Massimo Conti28-Mar-12 12:22
memberMassimo Conti28-Mar-12 12:22 
GeneralRe: Call to PickBestVideoFormat is wrong Pin
Chad Z. Hower aka Kudzu28-Mar-12 12:25
memberChad Z. Hower aka Kudzu28-Mar-12 12:25 
GeneralRe: Call to PickBestVideoFormat is wrong Pin
Chad Z. Hower aka Kudzu28-Mar-12 16:50
memberChad Z. Hower aka Kudzu28-Mar-12 16:50 
GeneralRe: Call to PickBestVideoFormat is wrong Pin
Massimo Conti30-Mar-12 10:19
memberMassimo Conti30-Mar-12 10:19 
QuestionHow to get a Handle to underlying stream of the MediaElement? Pin
Member 871481722-Mar-12 10:54
memberMember 871481722-Mar-12 10:54 
Questionmy vote of 5 Pin
.NetStars21-Mar-12 2:28
member.NetStars21-Mar-12 2:28 
QuestionCapture image from streaming Pin
Eldoran4-Mar-12 7:51
memberEldoran4-Mar-12 7:51 
AnswerRe: Capture image from streaming Pin
Massimo Conti4-Mar-12 11:54
memberMassimo Conti4-Mar-12 11:54 
GeneralRe: Capture image from streaming Pin
Ivo Štimac16-Mar-12 4:54
memberIvo Štimac16-Mar-12 4:54 
GeneralRe: Capture image from streaming Pin
Chad Z. Hower aka Kudzu28-Mar-12 4:17
memberChad Z. Hower aka Kudzu28-Mar-12 4:17 
GeneralRe: Capture image from streaming Pin
Massimo Conti28-Mar-12 11:36
memberMassimo Conti28-Mar-12 11:36 
GeneralRe: Capture image from streaming Pin
Chad Z. Hower aka Kudzu28-Mar-12 12:02
memberChad Z. Hower aka Kudzu28-Mar-12 12:02 
GeneralMy vote of 5 Pin
Eldoran1-Mar-12 2:30
memberEldoran1-Mar-12 2:30 
GeneralMy vote of 5 Pin
Abinash Bishoyi28-Feb-12 23:35
memberAbinash Bishoyi28-Feb-12 23:35 
GeneralMy vote of 5 Pin
Eldoran27-Feb-12 10:42
memberEldoran27-Feb-12 10:42 
QuestionStrange problem Pin
cxycxy16-Jan-12 19:26
membercxycxy16-Jan-12 19:26 
GeneralMy vote of 5 Pin
DaveX8614-Jan-12 4:16
memberDaveX8614-Jan-12 4:16 
GeneralMy vote of 5 Pin
wsc091812-Jan-12 4:06
memberwsc091812-Jan-12 4:06 
QuestionHow can I mirror a video stream using EE SDK? Pin
A_CAN8-Jan-12 23:29
memberA_CAN8-Jan-12 23:29 
GeneralMy vote of 5 Pin
lakehousetech8-Jan-12 9:51
memberlakehousetech8-Jan-12 9:51 
GeneralWorks Great.. Excellent Piece of Code! Thank you! Pin
Yonatan77712-Dec-11 19:48
memberYonatan77712-Dec-11 19:48 
Question[My vote of 2] Crashes with my Logitech HD Webcam C310 Pin
Yonatan77712-Dec-11 7:44
memberYonatan77712-Dec-11 7:44 
AnswerRe: [My vote of 2] Crashes with my Logitech HD Webcam C310 [modified] Pin
Massimo Conti12-Dec-11 11:49
memberMassimo Conti12-Dec-11 11:49 
QuestionChange .wmv to .avi Pin
Rdechaux12-Nov-11 4:09
memberRdechaux12-Nov-11 4:09 
QuestionSo How to recieve that stream not only in localhost ? like 192.168.X.X ? :/ [modified] Pin
warefcool2-Nov-11 15:38
memberwarefcool2-Nov-11 15:38 
Questioncould you please convert this wonderful code in VB.NET Pin
swaby23-Oct-11 17:05
memberswaby23-Oct-11 17:05 
AnswerRe: could you please convert this wonderful code in VB.NET Pin
Massimo Conti25-Oct-11 10:39
memberMassimo Conti25-Oct-11 10:39 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150428.2 | Last Updated 4 Jul 2011
Article Copyright 2011 by Massimo Conti
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid