DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Curious about the future of data-driven systems? Join our Data Engineering roundtable and learn how to build scalable data platforms.

Data Engineering: The industry has come a long way from organizing unstructured data to adopting today's modern data pipelines. See how.

Threat Detection: Learn core practices for managing security risks and vulnerabilities in your organization — don't regret those threats!

Managing API integrations: Assess your use case and needs — plus learn patterns for the design, build, and maintenance of your integrations.

Trending

  • Three Habits of Highly Effective Observability Teams
  • AI-Driven Intent-Based Networking: The Future of Network Management Using AI
  • Using Lombok Library With JDK 23
  • Why React Router 7 Is a Game-Changer for React Developers

Sound Over IP With Jmf RTP

By 
Snippets Manager user avatar
Snippets Manager
·
Dec. 08, 06 · Code Snippet
Likes (0)
Comment
Save
Tweet
Share
2.9K Views

Join the DZone community and get the full member experience.

Join For Free
This code will allow you to send  and recive sound over IP network using RTP protocol. It's just changed classes that I found on java.sun.com page.



// this class send sound
import java.io.IOException;
import java.util.Vector;

import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.DataSink;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.NoProcessorException;
import javax.media.NotRealizedError;
import javax.media.Player;
import javax.media.Processor;
import javax.media.control.FormatControl;
import javax.media.control.TrackControl;
import javax.media.format.AudioFormat;
import javax.media.protocol.ContentDescriptor;
import javax.media.protocol.DataSource;

public class SimpleVoiceTransmiter {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
//		 First find a capture device that will capture linear audio
        // data at 8bit 8Khz 
        AudioFormat format= new AudioFormat(AudioFormat.LINEAR, 
                                            8000, 
                                            8, 
                                            1); 

        Vector devices= CaptureDeviceManager.getDeviceList( format);

        CaptureDeviceInfo di= null;

        if (devices.size() > 0) {
             di = (CaptureDeviceInfo) devices.elementAt( 0);
        }
        else {
            // exit if we could not find the relevant capturedevice. 
            System.exit(-1); 
        }
       
        // Create a processor for this capturedevice & exit if we 
        // cannot create it 
        Processor processor = null;
        try { 
        	processor = Manager.createProcessor(di.getLocator());
        } catch (IOException e) { 
            System.exit(-1); 
        } catch (NoProcessorException e) { 
            System.exit(-1); 
        } 

       // configure the processor  
       processor.configure(); 
       
       while (processor.getState() != Processor.Configured){
    	   try {
    		   Thread.sleep(100);
    	   } catch (InterruptedException e) {
    		   // TODO Auto-generated catch block
    		   e.printStackTrace();
    	   }
       }
       
       processor.setContentDescriptor( 
           new ContentDescriptor( ContentDescriptor.RAW));
        
       TrackControl track[] = processor.getTrackControls(); 
       
       boolean encodingOk = false;
       
       // Go through the tracks and try to program one of them to
       // output gsm data. 
       
        for (int i = 0; i < track.length; i++) { 
            if (!encodingOk && track[i] instanceof FormatControl) {  
                if (((FormatControl)track[i]).
                    setFormat( new AudioFormat(AudioFormat.GSM_RTP, 
                                               8000, 
                                               8, 
                                               1)) == null) {

                   track[i].setEnabled(false); 
                }
                else {
                    encodingOk = true; 
                }
            } else { 
                // we could not set this track to gsm, so disable it 
                track[i].setEnabled(false); 
            } 
        }
        
        // At this point, we have determined where we can send out 
        // gsm data or not. 
        // realize the processor 
        if (encodingOk) { 
            processor.realize(); 
            while (processor.getState() != Processor.Realized){
         	   try {
         		   Thread.sleep(100);
         	   } catch (InterruptedException e) {
         		   // TODO Auto-generated catch block
         		   e.printStackTrace();
         	   }
            }
            // get the output datasource of the processor and exit 
            // if we fail 
            DataSource ds = null;
            
            try { 
                ds = processor.getDataOutput(); 
            } catch (NotRealizedError e) { 
                System.exit(-1);
            }

            // hand this datasource to manager for creating an RTP 
            // datasink our RTP datasink will multicast the audio 
            try {
                String url= "rtp://224.0.0.1:22224/audio/16";
                
                MediaLocator m = new MediaLocator(url); 
                
                DataSink d = Manager.createDataSink(ds, m);
                d.open();
                d.start();
                processor.start();
            } catch (Exception e) {
                System.exit(-1);
            }     
        }    


		 
	}

}

// second class here
// this class recieve sound

import java.io.IOException;
import java.net.MalformedURLException;

import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;

public class SimpleVoiceReciver{

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String url= "rtp://224.0.0.1:22224/audio/16";
		 
        MediaLocator mrl= new MediaLocator(url);
        
        if (mrl == null) {
            System.err.println("Can't build MRL for RTP");
            System.exit(-1);
        }
        
        // Create a player for this rtp session
        Player player = null;
        try {
            player = Manager.createPlayer(mrl);
        } catch (NoPlayerException e) {
            System.err.println("Error:" + e);
            System.exit(-1);
        } catch (MalformedURLException e) {
            System.err.println("Error:" + e);
            System.exit(-1);
        } catch (IOException e) {
            System.err.println("Error:" + e);
            System.exit(-1);
        }
        
        if (player != null) {
        	System.out.println("Player created.");
            player.realize();
//          wait for realizing
            while (player.getState() != Player.Realized){
            	try {
					Thread.sleep(10);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
            }
            player.start();
        } else {
        	System.err.println("Player doesn't created.");
        	System.exit(-1);
        }
	}

}

Real-time Transport Protocol

Opinions expressed by DZone contributors are their own.

Partner Resources


Comments

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends: