7 Video Conferencing Examples





The video conferencing example programs capture, compress, send, receive, and decompress video images. Figure 7-1 shows an example of a simple two- party video conferencing configuration.

    Figure 7-1 Two-Party Video Conference

The programs that make up the SunVideo video conferencing examples do the following:

To run the video conferencing examples, your workstation must have a network connection to another workstation that has the SunVideo subsystem installed. The example programs do not provide support for audio.

Note - The video decompression operations are performed in software on the receiving systems. Therefore, systems need not have a SunVideo card installed in order to use the rtvc_video_receiver program to receive transmissions.

The source code for the video conferencing examples is located in the directory:

/opt/SUNWits/Graphics-sw/xil/examples/rtvc_video_conference

Use the Makefile that is provided in the directory to compile the programs.

Capturing, Compressing, and Broadcasting Compressed Video

The broadcaster program (rtvc_video_conference) captures video frames from the SunVideo card's selected input port, compresses the frames into a CellB bytestream, and broadcasts the stream onto the local network via the selected channel. The broadcaster can simultaneously decompress the CellB bytestream and display the result in a preview window on the local workstation.

Note - The broadcaster program is designed to demonstrate the use of the CellB compression technique in a video conferencing application. You also can compress the images with JPEG, MPEG-1, or UYVY, but the example video receiver program is not designed to receive MEPG-1 frames. This limitation is not inherent in the SunVideo card or XIL, but is instead due to the way the examples are written. For the sake of simplicity, the underlying network communication mechanism chosen for these examples is a "datagram" packet, which is not guaranteed to be received. This can be a problem for an MPEG-1 video conference.

Also, the broadcaster does not send a frame if the size of the compressed frame exceeds a limit, which is based on the design of the example's video packets. Given the relatively poor compression ratio of UYVY (2 bytes/pixel), a large shrink factor must be used for the UYVY frames to meet this limit. (Alternatively, the width and height could be reduced using the -w and -h arguments.)

After compiling the program, you can display its usage information by typing the program name and an argument that the program doesn't use. For example:

% rtvc_video_conference -@

Table 7-1 describes the rtvc_video_conference command's arguments. Arguments without values are switches. For example, -p is a switch.

    Table 7-1 Arguments for the rtvc_video_conference Program

-------------------------------------------------------------------------------------
Argument Description Default -------------------------------------------------------------------------------------
                                                                       
-I <port_number'>         The number of the SunVideo card's             Composite 
                         input port to which your video                port 1
                         device is connected (0 for S-Video, 1                         
                         or 2 for composite).                                          
                                                                       
-p                       Turns off the local preview window.           Preview on
                                                                       
-C <compression_type'>    The type of compression. Valid                CellB
                         compressor names are CellB, Jpeg,                             
                         Mpeg1, or UYVY.                                               
                                                                       
-k <Mpeg_pattern'>        Compression pattern for MPEG-1                Variable bit 
                         compression. If the pattern contains          rate, I 
                         any P or B frames, constant bit rate          frames only
                         MPEG-1 will be used with bit rate                             
                         equal to 1.15 mbits/sec.                                      
                                                                       
-f <number_frames         The number of frames to capture,              18,000 frames
                         compress, and broadcast.                                      
                                                                       
-m <frames'>              Maximum number of frames to                   2
                         buffer on the SunVideo card.                                  
                         Generally, higher values increase                             
                         performance, but increase latency.                            
                                                                       
-P <number_msecond'>      The number of milliseconds to delay           0
                         after sending a video packet (may                             
                         help reduce the number of missed                              
                         packets if the network is busy or the                         
                         receiver is running on a heavily                              
                         loaded system.                                                
                                                                       
-s <shrink_factor'>       Shrinks the captured image by the             2
                         integer value of <shrink_factor>                                
                         (1, 2, 3, 4, 5, ... ). A shrink factor of 0                   
                         turns off shrinking, which is                                 
                         equivalent to a shrink factor of 1.                           
                                                                                       
                         For NTSC, the default shrink factor of                        
                         2 delivers SIF images of 320x240 pixel                        
                         images. A shrink factor of 4 delivers                         
                         smaller Quarter SIF (QSIF) images of                          
                         160x120 pixels.                                               
                                                                                       
                         See the section "About the Shrink                             
                         Factor Argument" on page 65 for                               
                         more information about the shrink                             
                         factor.                                                       
                                                                       
-c <broadcast_channel'>   The number of the broadcast channel           0
                         (0-9). The program uses a socket to                           
                         connect to a broadcast channel.                               
                         Different instances of the video                              
                         conferencing program must broadcast                           
                         on unique channels to avoid                                   
                         collisions. Change this value to select                       
                         an open channel.                                              
                                                                       
-H <dest_host'>           The destination hostname for the              Send the 
                         broadcast. The value can be the name          broadcast to 
                         of a single machine or the Class C            the local 
                         Internet address of a subnet. In that         subnet
                         case, the last digit of the Internet                          
                         address is a "0."                                             
                                                                       
-F <dest_host_file'>      Name of a file that lists one or more         None
                         destination hostnames (up to a                                
                         maximum of 32). The file can contain                          
                         the names of single machines or the                           
                         Class C Internet addresses of subnets.                        
                         Entries in the file must be on single                         
                         lines.                                                        
                                                                       
-w <width'>               Specifies (in pixels) the width of a          640 NTSC
                         rectangle that enables you to select          
                         part of a device image. The rectangle         768 PAL
                         is centered on the image. The                                 
                         maximum width is 640 pixels for                               
                         NTSC and 768 pixels for PAL.                                  
                                                                       
-h <height'>              Specifies (in pixels) the height of a         480 NTSC
                         rectangle that enables you to select          576 PAL
                         part of a device image. The rectangle                         
                         is centered on the image. The                                 
                         maximum height is 480 pixels for                              
                         NTSC and 576 pixels for PAL.                                  
                                                                       
-x <xpos'>                Specifies the x-axis location of the          Random
                         display window relative to the upper                          
                         left-hand corner of the screen.                               
                                                                       
-y <ypos'>                Specifies the y-axis location of the          Random
                         display window relative to the upper                          
                         left-hand corner of the screen.                               
                                                                       
-i <skip_frames'>         Number of frames to skip between              0
                         capture.                                                      
                                                                       
-t                       Disable transmission.                         Transmit
                                                                       
-d <filename'>            Save compressed video to a file.              Does not 
                                                                       save to file
                                                                       
-v                       Turn on verbose mode. When verbose            Verbose 
                         mode is on, error messages about the          mode off
                         status of the video conferencing                              
                         network connections are displayed at                          
                         the local workstation.                                        
                                                                       
-b                       Include extra information in each             Do not 
                         video packet that allows the receiver         include this 
                         to display a partial frame in the case        information 
                         of missed packets (CellB only).               in the video 
                                                                       packets
                                                                       
-D <devname'>             Name of the SunVideo video device.            /dev/rtvc0
                         See the section "A Comment About                              
                         Moving SunVideo Cards Among                                   
                         Slots" on page 19 for more                                    
                         information about SunVideo device                             
                         names.                                                        
                                                                       
-E                       Exit on first XIL error.                      Keep 
                                                                       running and 
                                                                       try to recover

-------------------------------------------------------------------------------------

Video Conferencing Examples

To broadcast to all SPARCstations on a local subnet using the default parameters (18,000 frames = 10 minutes, CellB compression, broadcast on channel 0) from a SPARCstation with a SunVideo subsystem:

% rtvc_video_conference

To receive the transmission, other systems on the local subnet (which need not have SunVideo subsystems) must issue the command:

% rtvc_video_receiver

To video conference for 45 minutes (45*60*30 = 81,000 frames) between two SPARCstations (in this example, "salsa" and "nachos"), both with SunVideo subsystems. The systems send and receive over different channels.

On the "salsa" system:

salsa% rtvc_video_conference -c 7 -H nachos -f 81000 &
salsa% rtvc_video_receiver -c 8 &

On the "nachos" system:

nachos% rtvc_video_conference -c 8 -H salsa -f 81000 &
nachos% rtvc_video_receiver -c 7 &

Using rtvc_video_conference as a Previewer or Movie Maker

You can use the -t command line argument to disable transmission. This enables you to use the example program as an image previewer while you are setting up a video conference. Or, you can use the program to display live video from a camera or to play video from a VCR or laser disk. You can also save compressed video to a file (with the -d argument) so that you can play it later.

About the Shrink Factor Argument

For rtvc_video_conference, if the shrink_factor is 0 or 1, you must specify width and height arguments that are smaller than the default, which is 640 x 480 for NTSC and 768 x 576 for PAL. Otherwise, rtvc_video_conference will issue the following error message:

Warning: Max number of packets can be exceeded
given this size frame. No packets will be trans-
mitted on any frame in which the maximum number
of packets is exceeded
You can increase -s or reduce -w or -h.

This restriction is due to the design of the video packets used in the example rtvc_video_conference program and is not a limitation of CellB or the SunVideo subsystem.

Receiving, Decompressing, and Displaying Video

The rtvc_video_receiver program receives a CellB bytestream broadcast by the rtvc_video_conference program anywhere on the broadcaster's local network and on the selected channel. The receiver decompresses the frames and displays them in a window.

You also can receive compressed JPEG and UYVY frames. However, the example video conferencing programs are optimized for CellB (as discussed in the note on page 61).

The initial size of the display window is 320x240. The size automatically adjusts to that of the broadcaster.

After compiling the program, you can display its usage information by typing the program name and an argument that the program doesn't use. For example:

% rtvc_video_receiver -@

Table 7-2 describes the rtvc_video_receiver command's arguments. Arguments without values are switches. For example, -v is a switch.

    Table 7-2 Arguments for the rtvc_video_receiver Program

--------------------------------------------------------------------------------
Argument Description Default --------------------------------------------------------------------------------
                                                                  
-f <number_frames        The number of frames to receive.          18,000 frames
                                                                  
-C <compression_type'>   The type of compression. Valid            CellB
                        compression names are CellB, Jpeg, or                     
                        UYVY.                                                     
                                                                  
-c <receive_channel'>    The number of the channel on which        0
                        to receive a broadcast (0-9). This must                   
                        be the same value that the sender set                     
                        in their rtvc_video_conference                            
                        program's -c                                              
                        <broadcast_channel> argument.                               
                                                                  
-x <xpos'>               Specifies the x-axis location of the      Random
                        display window relative to the upper                      
                        left-hand corner of the screen.                           
                                                                  
-y <ypos'>               Specifies the y-axis location of the      Random
                        display window relative to the upper                      
                        left-hand corner of the screen.                           
                                                                  
-v                      Turn on verbose mode. When verbose        Verbose 
                        mode is on, error messages about the      mode off
                        status of the video conferencing                          
                        network connections are displayed at                      
                        the local workstation.                                    
                                                                  
-b                      When one or more video packets from       Discard the 
                        a frame are missed, fill in the missing   entire frame 
                        parts of the bytestream with CellB skip   if any packet 
                        codes to display the previous frame in    is missed
                        place of the missed packets. (For this                    
                        to work, you must also use the -b                         
                        argument of the broadcaster program                       
                        (rtvc_video_conference).                                  
                                                                  
-E                      Exit on first XIL error.                  Keep 
                                                                  running and 
                                                                  try to recover

--------------------------------------------------------------------------------

About the Example Video Conferencing Programs

There are nine source modules in the video conferencing suite. Figure 7-2 shows how the modules are connected.

    Figure 7-2 Example Video Conferencing Programs

As shown in Figure 7-2 the modules are divided into three functional groups: display, rtvc_video_conference, and rtvc_video_receiver. Both the rtvc_video_conference and rtvc_video receiver modules use the display modules. Each group has a main module as follows:

--------------------------------------
Group Main Module --------------------------------------
                       
display                window.c
                       
rtvc_video_confernece  xilbroadcast.c
                       
rtvc_video_receiver    xilvc.c

--------------------------------------

Table 7-3 defines each module and the relationship among them.

    Table 7-3 Video Conferencing Suite Modules

---------------------------------------------------------------------------------
Module Definition ---------------------------------------------------------------------------------
                
window.c        Handles the displaying of images for the 
                rtvc_video_conference and rtvc_video_receiver 
                programs. This module uses the functions defined in cmap.c 
                and dither.c.
                
cmap.c          Initializes the X colormap with a 3-banded lookup table.
                
dither.c        Initializes the variables for a YUV to RGB dither.
                
xilbroadcast.c  Reads an image from the SunVideo card, transmits compressed 
                video over the local network, and optionally displays the image 
                in an X window. This function uses the functions defined in 
                transmit.c, tparams.c, and window.c.	
                
transmit.c      Initializes and opens the socket through which the compressed 
                video will be sent to a network.
                
tparams.c       Defines the arguments for the rtvc_video_conference 
                program.
                
xilvc.c         Receives compressed video over the local network and displays 
                the decompressed images in an X window. This module uses 
                the functions defined in receive.c, rparams.c, and window.c.
                
receive.c       Initializes and opens the socket through which the compressed 
                video will be received from a network.
                
rparams.c       Defines the arguments for the rtvc_video_receiver 
                program.

---------------------------------------------------------------------------------

The optional cellb_util.c module (for CellB only) provides support for the -b option, which allows the receiver to include extra information in each video packet to display a partial frame in the case of missed packets.