Click here to Skip to main content
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#.



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:


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))
foreach (EncoderDevice eda in EncoderDevices.FindDevices(EncoderDeviceType.Audio))

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

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

// Start encoding

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);

// Finds and applys a smooth streaming preset        

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

// Adds the publishing format to the job

// Starts encoding

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"
        Title="Show Broadcast" Height="350" Width="525">
        <MediaElement Name="VideoControl" Source="http://localhost:8080" />


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 | :)


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


About the Author

Massimo Conti
Software Developer
Italy Italy
No Biography provided

Comments and Discussions

QuestionScreen Capture Pinmemberfazilamehtab13-Oct-14 22:24 
QuestionPlease Help me PinmemberMember 110602839-Sep-14 6:22 
QuestionHey there. PinmemberMember 104321188-Jun-14 4:21 
Questionstart stop recording button only makes one file which is latest recorded PinmemberMember 801762717-Apr-14 20:55 
Questionstart encoding Pinmemberbadi2386-Apr-14 21:57 
AnswerRe: start encoding PinmemberHugoAmi23-Sep-14 16:02 
Generalwebcam capture Pinmemberrakdosss2-Apr-14 5:52 
QuestionStrong Delay Pinmembererebos00717-Feb-14 12:42 
AnswerRe: Strong Delay Pinmemberselfwalker23-Jun-14 23:33 
QuestionCould not load file or assembly 'Microsoft.Expression.Encoder, Version=, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. An attempt was made to load a program with an incorrect format. PinmemberIan Vic Damacio8-Feb-14 22:11 
SuggestionRe: Could not load file or assembly 'Microsoft.Expression.Encoder, Version=, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. An attempt was made to load a program with an incorrect format. PinprofessionalDiego G. Fritz31-Jul-14 7:41 
QuestionAccess is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) PinmemberIan Vic Damacio24-Jan-14 22:00 
QuestionOne very bad assumption regarding newer versions of Windows (8.0 and above...) in this sample program... PinmemberDestiny7774-Nov-13 11:32 
Questionencoder need to be installed on every System? Pinmemberfine_dost13-Jul-13 12:39 
AnswerRe: encoder need to be installed on every System? PinmemberDestiny77722-Nov-13 15:35 
GeneralMy vote of 5 PinmemberKing Coffee9-Jul-13 13:51 
QuestionModify or add blank frames? Pinmembertuliosouza4-Jun-13 10:05 
AnswerRe: Modify or add blank frames? PinmemberDestiny77722-Nov-13 15:41 
QuestionHelp me. please! Pinmembernguyễn ngọc vỹ27-May-13 18:27 
AnswerRe: Help me. please! PinmemberDestiny77722-Nov-13 15:44 
GeneralMy vote of 4 Pinmembernaseer baloch1-May-13 22:13 
QuestionNice Demo, but where is the audio when preview ? PinmemberJohnson.Gao.12623-Apr-13 1:20 
Questionviewing stream on a remote computer PinmemberMember 95262384-Apr-13 4:42 
AnswerRe: viewing stream on a remote computer PinmemberMember 1008220412-Jun-13 10:05 
QuestionWebcam is showing black image in preview PinmemberMember 79864943-Apr-13 23:51 

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 | Mobile
Web02 | 2.8.141015.1 | Last Updated 4 Jul 2011
Article Copyright 2011 by Massimo Conti
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid