123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- /* This file is based on
- * http://www.anyexample.com/programming/java/java_play_wav_sound_file.xml
- * Please see the site for license information.
- */
- package model;
-
- import java.io.File;
- import java.io.IOException;
- import javax.sound.sampled.AudioFormat;
- import javax.sound.sampled.AudioInputStream;
- import javax.sound.sampled.AudioSystem;
- import javax.sound.sampled.DataLine;
- import javax.sound.sampled.FloatControl;
- import javax.sound.sampled.LineUnavailableException;
- import javax.sound.sampled.SourceDataLine;
- import javax.sound.sampled.UnsupportedAudioFileException;
- import java.lang.String;
- import static java.lang.Thread.sleep;
- import java.net.DatagramSocket;
- import java.util.Enumeration;
- import java.net.InetAddress;
- import java.net.InetSocketAddress;
- import java.net.SocketException;
- import java.net.UnknownHostException;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import jlibrtp.*;
-
- /**
- * @author Arne Kepp
- */
- public class SoundSenderDemo implements RTPAppIntf {
- SIPmodel model;
- public RTPSession rtpSession = null;
- static int pktCount = 0;
- static int dataCount = 0;
- private String filename;
- private final int EXTERNAL_BUFFER_SIZE = 1024;
- SourceDataLine auline;
- private Position curPosition;
- boolean local;
-
- enum Position {
- LEFT, RIGHT, NORMAL
- };
-
- public SoundSenderDemo() {}
-
- public SoundSenderDemo(boolean isLocal) throws UnknownHostException, InterruptedException {
- this.model = model;
-
- DatagramSocket rtpSocket = null;
- DatagramSocket rtcpSocket = null;
- //rtpSocket.close();
- //rtcpSocket.close();
- // try {
- // rtpSocket = new DatagramSocket(model.getProxyRTPPort());
- // } catch (SocketException ex) {
- // Logger.getLogger(SoundSenderDemo.class.getName()).log(Level.SEVERE, null, ex);
- // System.out.println("RTPSession failed to obtain port");
- // }
- // try {
- // rtcpSocket = new DatagramSocket(model.getProxyRTPPort()+1);
- // } catch (SocketException ex) {
- // Logger.getLogger(SoundSenderDemo.class.getName()).log(Level.SEVERE, null, ex);
- // System.out.println("RTCPSession failed to obtain port");
- // }
-
-
- InetAddress myIP = InetAddress.getByName("192.168.100.247");
-
- try {
- rtpSocket = new DatagramSocket(5004, myIP);
- rtcpSocket = new DatagramSocket(5005, myIP);
- } catch (SocketException e) {
- System.out.println(e);
- System.out.println("RTPSession failed to obtain port");
- rtpSocket.close();
- rtcpSocket.close();
- }
-
- /*
- try {
- rtpSocket = new DatagramSocket(null);
- InetSocketAddress myInetSocketAddress = new InetSocketAddress(5004);
- rtpSocket.bind(myInetSocketAddress);
- sleep(2000);
- } catch (SocketException e) {
- System.out.println("RTPSession failed to obtain port");
- rtpSocket.close();
- rtcpSocket.close();
- }
- */
-
- rtpSession = new RTPSession(rtpSocket, rtcpSocket);
- rtpSession.RTPSessionRegister(this, null, null);
- System.out.println("CNAME: " + rtpSession.CNAME());
- this.local = isLocal;
- }
-
- /**
- * @param args
- */
- public void SendDemo(String[] args) throws UnknownHostException, InterruptedException {
- args = new String[4];
- args[1] = "192.168.100.11";
- args[0] = "C:\\Users\\Tim\\Desktop\\VoIP PA\\project\\VoIPProjekt\\src\\SoundDateien\\RingingPhone.wav";
- args[2] = "5004";
- args[3] = "5005";
- for (int i = 0; i < args.length; i++) {
- System.out.println("args[" + i + "]" + args[i]);
- }
-
- // if (args.length == 0) {
- // args = new String[4];
- // args[1] = "192.168.100.249";
- // args[0] = "C:\\Users\\Tim\\Desktop\\VoIP PA\\project\\VoIPProjekt\\src\\SoundDateien\\RingingPhone.wav";
- // args[2] = "5004";
- // args[3] = "5005";
- // }
- SoundSenderDemo aDemo;
- aDemo = new SoundSenderDemo(true);
- Participant p = new Participant("192.168.100.11", Integer.parseInt(args[2]), Integer.parseInt(args[2]) + 1);
- aDemo.rtpSession.addParticipant(p);
- aDemo.filename = args[0];
- aDemo.run();
- System.out.println("pktCount: " + pktCount);
- }
-
- public void receiveData(DataFrame dummy1, Participant dummy2) {
- // We don't expect any data.
- }
-
- public void userEvent(int type, Participant[] participant) {
- //Do nothing
- }
-
- public int frameSize(int payloadType) {
- return 1;
- }
-
- public void run() {
- if (RTPSession.rtpDebugLevel > 1) {
- System.out.println("-> Run()");
- }
- File soundFile = new File(filename);
- if (!soundFile.exists()) {
- System.err.println("Wave file not found: " + filename);
- return;
- }
-
- AudioInputStream audioInputStream = null;
- try {
- audioInputStream = AudioSystem.getAudioInputStream(soundFile);
- } catch (UnsupportedAudioFileException e1) {
- e1.printStackTrace();
- return;
- } catch (IOException e1) {
- e1.printStackTrace();
- return;
- }
-
- //AudioFormat format = audioInputStream.getFormat();
- AudioFormat.Encoding encoding = new AudioFormat.Encoding("PCM_SIGNED");
- AudioFormat format = new AudioFormat(encoding, ((float) 8000.0), 16, 1, 2, ((float) 8000.0), false);
- System.out.println(format.toString());
-
- if (!this.local) {
- // To time the output correctly, we also play at the input:
- auline = null;
- DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
-
- try {
- auline = (SourceDataLine) AudioSystem.getLine(info);
- auline.open(format);
- } catch (LineUnavailableException e) {
- e.printStackTrace();
- return;
- } catch (Exception e) {
- e.printStackTrace();
- return;
- }
-
- if (auline.isControlSupported(FloatControl.Type.PAN)) {
- FloatControl pan = (FloatControl) auline
- .getControl(FloatControl.Type.PAN);
- if (this.curPosition == Position.RIGHT) {
- pan.setValue(1.0f);
- } else if (this.curPosition == Position.LEFT) {
- pan.setValue(-1.0f);
- }
- }
-
- auline.start();
- }
-
- int nBytesRead = 0;
- byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];
- long start = System.currentTimeMillis();
- try {
- while (nBytesRead != -1 && pktCount < 200) {
- nBytesRead = audioInputStream.read(abData, 0, abData.length);
-
- if (nBytesRead >= 0) {
- rtpSession.sendData(abData);
- //if(!this.local) {
- //auline.write(abData, 0, abData.length);
-
- //dataCount += abData.length;
- //if(pktCount % 10 == 0) {
- // System.out.println("pktCount:" + pktCount + " dataCount:" + dataCount);
- //
- // long test = 0;
- // for(int i=0; i<abData.length; i++) {
- // test += abData[i];
- // }
- // System.out.println(Long.toString(test));
- //}
- pktCount++;
- //if(pktCount == 100) {
- // System.out.println("Time!!!!!!!!! " + Long.toString(System.currentTimeMillis()));
- //}
- //System.out.println("yep");
- }
- if (pktCount == 100) {
- Enumeration<Participant> iter = this.rtpSession.getParticipants();
- System.out.println("iter " + iter.hasMoreElements());
- Participant p = null;
-
- //while (iter.hasMoreElements()) {
- p = iter.nextElement();
-
- String name = "name";
- byte[] nameBytes = name.getBytes();
- String data = "abcd";
- byte[] dataBytes = data.getBytes();
-
- int ret = rtpSession.sendRTCPAppPacket(p.getSSRC(), 0, nameBytes, dataBytes);
- System.out.println("!!!!!!!!!!!! ADDED APPLICATION SPECIFIC " + ret);
- continue;
- //}
- // if (p == null) {
- // System.out.println("No participant with SSRC available :(");
- // }
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- return;
- }
- System.out.println("Time: " + (System.currentTimeMillis() - start) / 1000 + " s");
-
- try {
- Thread.sleep(200);
- } catch (Exception e) {
- }
-
- this.rtpSession.endSession();
-
- try {
- Thread.sleep(2000);
- } catch (Exception e) {
- }
- if (RTPSession.rtpDebugLevel > 1) {
- System.out.println("<- Run()");
- }
- }
-
- }
|