Click here to Skip to main content
15,867,453 members
Articles / Programming Languages / C#

Examples to create your Conferencing System in .NET, C# VOIP & Video Conferencing Systems using H.323 and TAPI 3

Rate me:
Please Sign up or sign in to vote.
4.85/5 (108 votes)
31 Jan 2007CPOL3 min read 894.3K   86.6K   431   97
Four examples to create your Conferencing System in .NET using H.323 and TAPI 3

Image 1

Introduction

I noticed that there are many members who want to know how to create an Audio/Video Conferencing System using .NET. We know that there isn't any managed class that supports audio or video streaming in .NET, so I decided to write some applications that can help in writing your conferencing application. From time to time, you will find new examples and tutorials on VoIP, Video Conferencing and Network Programming on my site and also in our Forums that specialize in Network Programming and VoIP.

Introduction to H.323

H.323 is an umbrella recommendation from the ITU-T, that defines the protocols to provide audio-visual communication sessions on any packet network. It is currently implemented by various Internet real-time applications such as NetMeeting and Ekiga (the latter uses the OpenH323 implementation). It is a part of the H.32x series of protocols which also addresses communications over ISDN, PSTN or SS7. H.323 is commonly used in VoIP, Internet Telephony, or IP Telephony and IP-based videoconferencing. For more information about H.323, see Internet Telephony with H.323 on MSDN.

Introduction to TAPI 3 Telephony

TAPI version 3 is a COM-based API that merges classic and IP telephony. Possible applications range from simple voice calls over the Public Switched Telephone Network (PSTN) to multicast multimedia IP conferencing with quality of service (QOS).

There are four major components to TAPI 3:

  1. COM API
  2. TAPI Server
  3. Telephony Service Providers (TSPs)
  4. Media Stream Providers (MSPs)

The API is implemented as a suite of Component Object Model (COM) objects. Moving TAPI to the object-oriented COM model allows developers to write TAPI-enabled applications in many languages, such as .NET, Java, or C++. Use of COM enables component upgrades of TAPI features.

The COM-based telephony API, TAPI 3.x, is available starting with Microsoft Windows X. TAPI 3.x provides greatly enhanced development tools for the modern world of communication programming, where a "call" may be a video stream on an IP-based network, and there is no phone set involved in the session.

Sample image

Generally speaking, application writers will find that TAPI 3.x provides better support to implement flexible communications controls. For more information, see Telephony Integration and Conferencing on MSDN.

Introduction to RTP

RTP - Real Time Transport Protocol is an Internet protocol for transmitting real-time data such as audio and video. RTP itself does not guarantee real-time delivery of data, but it does provide mechanisms for sending and receiving applications to support streaming data. Typically, RTP runs on top of the UDP protocol, although the specification is general enough to support other transport protocols that know how Windows supports Real Time Communication. See this RTCP API article.

RTP Header

RTP Header

Where:

  • V indicates the version of RTP used
  • P indicates the padding, a byte not used in the bottom packet to reach the parity packet dimension
  • X is the presence of the header extension
  • CC field is the number of CSRC identifiers following the fixed header. CSRC field are used, for example, in conference case
  • M is a marker bit
  • PT is the payload type

My Projects

Example 1: Voice Conferencing Using OPEN H.323 Library

In this example, I used the Openh323 ocx to create H.323 Voice Chat - it's very easy to use.

H323

Example 2: Voice Conferencing Using TAPI3.DLL

In this example, I used TAPI3 to create audio conferencing, For more information, see Rendezvous Code Examples on MSDN.

TAPI 3 Voice Conference

Example 3 and 4: Peer-to-Peer Video Voice Chat

In this example, I used the Wave Library to capture and send voice through the network and I used the Stream classes to transfer captured video images from a camera.

Peer-Peer Conerence System

In this other example, I used the avicap32.dll API to capture the camera image. You can also use this example to capture from any other capturing device such as a TV Tuner and then you can send it through the network.

Sample image

Conclusion

In this article, I have just posted some examples that will help you to start creating your conferencing system. I will explain the technical code description in other articles.

License

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


Written By
Systems Engineer SocketCoder.Com
Jordan Jordan
Fadi Abdelqader
WebSite: http://www.SocketCoder.com
Facebook Group: http://www.facebook.com/groups/socketcoder/
Facebook Page: http://www.facebook.com/socketcoders/

Last Published Book:
-Professional Network, Distributed Systems & TCP/IP Programming In .NET Framework 1.1 & 2.0 (2006 Release)

Last Published eBook:
- The SocketCoder e-Reference For Network, Distributed Systems And TCP/IP Programming In .NET, Arabic (SocketCoder.Com 2010)

Last Projects:
- Silverlight Based Projects For Web Video Conferencing (WCS,WMS,WCS Plus..)
-(SocketCoder) RTP Multicasting VOIP Library
-(SocketCoder) Remote Controlling Systems

Last SocketCoder RSS: http://www.socketcoder.com/feed/

http://www.socketcoder.com

Comments and Discussions

 
GeneralMy vote of 5 Pin
Rahul Ramesh Patil31-Mar-11 18:27
Rahul Ramesh Patil31-Mar-11 18:27 
QuestionHow to use? Pin
Member 44231544-Jan-11 18:56
Member 44231544-Jan-11 18:56 
NewsA New Client/Server Windows Based Voice Chat Sample Pin
Fadi Abdelqader21-Nov-10 2:10
Fadi Abdelqader21-Nov-10 2:10 
GeneralRe: A New Client/Server Windows Based Voice Chat Sample Pin
MikcaCP17-Aug-15 19:01
MikcaCP17-Aug-15 19:01 
NewsPlease Use this Sample for P2P Video Chat instead of the P2P sample in this article Pin
Fadi Abdelqader14-Nov-10 10:07
Fadi Abdelqader14-Nov-10 10:07 
QuestionLicensing topic: Sample for P2P Video Chat instead of the P2P sample in this article Pin
Guido Langer5-Jan-11 0:14
Guido Langer5-Jan-11 0:14 
GeneralMy vote of 1 Pin
doctorwho60126-Aug-10 10:27
doctorwho60126-Aug-10 10:27 
GeneralRe: My vote of 1 Pin
Fadi Abdelqader14-Nov-10 10:08
Fadi Abdelqader14-Nov-10 10:08 
Questionvoice conference b/w more then 2 users Pin
88Rocker9-Jul-10 3:17
88Rocker9-Jul-10 3:17 
GeneralMy vote of 5 Pin
sulemankhan9-Jul-10 1:33
sulemankhan9-Jul-10 1:33 
Questionproblem with peer to peer full Duplex application Pin
sagar.kandikatla17-May-10 23:54
sagar.kandikatla17-May-10 23:54 
GeneralMCU programming Pin
shabonaa19-Sep-09 10:10
shabonaa19-Sep-09 10:10 
GeneralError on H323 Pin
Thayhor21-May-09 20:01
Thayhor21-May-09 20:01 
GeneralRe: Error on H323 Pin
Francisco Moreno Sanz28-Jul-10 5:29
Francisco Moreno Sanz28-Jul-10 5:29 
GeneralRe: Error on H323 Pin
porcelli23-Sep-11 21:33
porcelli23-Sep-11 21:33 
GeneralDoes Not working Pin
biplab11-May-09 2:12
biplab11-May-09 2:12 
GeneralRe: Does Not working Pin
abhilash.P.24-Feb-11 20:46
abhilash.P.24-Feb-11 20:46 
GeneralSalam 3lykom Pin
maltub4-Mar-09 1:16
maltub4-Mar-09 1:16 
GeneralAudio Delay Pin
ketansnadar20-Jan-09 22:01
ketansnadar20-Jan-09 22:01 
Generalvoice/video conferencing Pin
fred4life3-Dec-08 4:39
fred4life3-Dec-08 4:39 
GeneralRe: voice/video conferencing Pin
arvindjaat25-Feb-12 0:42
arvindjaat25-Feb-12 0:42 
GeneralGetting Runtime Error Pin
raajaak3-Nov-08 1:07
raajaak3-Nov-08 1:07 
GeneralRTP DirectShow Filter Pin
Ahmed Charfeddine21-Aug-08 3:02
Ahmed Charfeddine21-Aug-08 3:02 
GeneralMulti user video conferensing Pin
Ahmed Charfeddine15-Aug-08 4:04
Ahmed Charfeddine15-Aug-08 4:04 
GeneralPInovke DLL error! Pin
Member 210738620-Jun-08 6:46
Member 210738620-Jun-08 6:46 

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

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