RTP streaming and Cisco IP phones problem

Hello,
I'm trying to write an application that should dial some numbers and play the voice message from the file into the phone line using Cisco JTAPI and Java Media Framework.
I've found some samples, that seems useful for me, but unfortunately they does not work. There are no any errors and no exceptions, I have no idea what to do.
Small brief: I make a call from one Cisco IP phone (7960) to another using Cisco JTAPI, then I catch the CiscoRTPInputStartedEv event, get the IP and port of the IP Phone and call the RTPStreamer class constuctor with them. It gives no any errors or exceptions (just a message shown below), but there is only silence in the phone line. Message:
Should b streamin'...
Encoding ok?: true
streams is [Lcom.sun.media.multiplexer.RawBufferMux$RawBufferSourceStream;@53d : 1
sink: setOutputLocator rtp://192.168.1.22:20794/audio
Please see the RTFStreamer class code below.
I set the packet size to 160 as reccomended for Cisco IP phones, I use the greeting.wav from Cisco example that properties are 8Khz 8bit mono, but it still doesn't work.
Could you help me? Thank you for any advice!
import java.io.* ;
import java.util.* ;
import java.net.* ;
import javax.media.* ;
import javax.media.control.* ;
import javax.media.format.* ;
import javax.media.protocol.* ;
import stream.*;
public class RtpStreamer
     public static int PlayCounter = 0;
     private RtpStreamer()
          // not supported
     public RtpStreamer(String IP, String Port)
          PlayCounter++;
          new RtpStreamer("rtp://" + IP + ":" + Port + "/");
     public RtpStreamer(String CurrentMediaUrl)
          PlayCounter++;
     System.out.println("Should b streamin'...");
     // Create a Processor for the selected file. Exit if the
     // Processor cannot be created.
     Processor processor = null;
     StateHelper sh = null;
     try
               String mediaUrl = "file:\\C:\\greetings.wav";
     processor = Manager.createProcessor( new MediaLocator(mediaUrl));
     sh = new StateHelper(processor);
     catch (IOException e)
     System.out.println("Exception occured (1a): " + e);
     catch (NoProcessorException e)
     System.out.println("Exception occured (1b): " + e);
     // for loggin purpose
     //sh.setContext( getServletContext() );
     // configure the processor
     if (!sh.configure(10000))
     System.out.println("Configuration failed!!");
     // Block until the Processor has been configured
     TrackControl track[] = processor.getTrackControls();
     boolean encodingOk = false;
     // Go through the tracks and try to program one of them to
     // output ulaw data.
     for (int i = 0; i < track.length; i++)
     if (!encodingOk && track[i] instanceof FormatControl)
     if (((FormatControl)track).setFormat( new AudioFormat(AudioFormat.ULAW_RTP,8000,8,1)) == null)
     track[i].setEnabled(false);
     else
     encodingOk = true;
     else
     // we could not set this track to ulaw, so disable it
     track[i].setEnabled(false);
               // set packet size to 160
               try
                    Codec codec[] = new Codec[3];
                    codec[0] = new com.ibm.media.codec.audio.rc.RCModule();
                    codec[1] = new com.ibm.media.codec.audio.ulaw.JavaEncoder();
                    codec[2] = new com.sun.media.codec.audio.ulaw.Packetizer();
                    ((com.sun.media.codec.audio.ulaw.Packetizer)codec[2]).setPacketSize(160);
                    ((TrackControl)track[i]).setCodecChain(codec);
               catch (Exception e)
                    System.out.println("Error setting packet size in 160: " + e + " in " + e.getMessage());
     System.out.println("Encoding ok?: " + encodingOk );
     // At this point, we have determined where we can send out
     // ulaw data or not.
     // realize the processor
     if (encodingOk)
     if (!sh.realize(10000))
     System.out.println("Realization failed!!");
     // block until realized.
     // get the output datasource of the processor and exit
     // if we fail
     DataSource ds = null;
     try
     ds = processor.getDataOutput();
     catch (NotRealizedError e)
     System.out.println("Exception occured(2): "+e);
     // hand this datasource to manager for creating an RTP
     // datasink.
     // our RTP datasink will multicast the audio
     try
     //String mediaUrl= "rtp://192.168.1.12:20002/audio/1"; // it works without errors
                    String mediaUrl= CurrentMediaUrl + "audio";
     MediaLocator m = new MediaLocator(mediaUrl);
     DataSink d = Manager.createDataSink(ds, m);
     d.open();
     d.start();
     catch (Exception e)
     System.out.println("Exception occured(3): "+e);

BTW is there any solution to figure out if the RTP application makes any network activity or not?

Similar Messages

  • Merging RTP streams and writing to file

    I'm am in the middle of project using JMF i'm trying to merge incoming RTP streams and write them to file but i always have problem with formats. I have created processor with merged DataSource i set ContentDescriptor to different FileTypeDescriptors and tried to transcode the RTP streams to different formats, but always processor couldnt realize because of this error:
    Unable to handle format: LINEAR, 8000.0 Hz, 16-bit, Mono, LittleEndian, Signed
    Unable to handle format: LINEAR, 8000.0 Hz, 16-bit, Mono, LittleEndian, Signed
    Could someone tell me what content descriptors i need to use and what formats to solve this problem. Any help will be appreciated.
    Message was edited by:
    kaligula

    Hello,
    Here is a procedure i wrote to write on text files the content of any table (and also generate the insert SQL order)
    http://oracle.developpez.com/sources/?page=developpement#Extraction_table
    You can download the script file here http://sheikyerbouti.developpez.com/src/extraction_table.zip
    Hope this help you.
    Francois

  • Cisco IP phone problem with external directory http error

    Hi,
    I have a problem when I try to open the directory on different model Cisco IP Phone for new deployment.
    In CUCM (version 8.5) we have configured internal and external directory and on each device set the "service provisioning" to "both". For all the sites configured in CUCM this feature is working properly, but not in the new deployed site. I´ve already verified the url is written properly.
    I get the following error messages for these different models:
    - Cisco IP phone 8945: "HTTP connection failed"
    - Cisco IP Comm: "HTTP error [500] "
    Thank you for your help,
    Regards,
    David Lozano             

    Hi David,
    What firmware are you using? Do you have 8945s on the other sites? I found a bug, but I'm not sure it applies to your description:
    CSCty58000 Bug Details
    8945 freezes when directories is pressed
    Symptom:
    8945 freezes when directories button is pressed.
    Conditions:
    This issue happens when the phone load is 9.2.3 and the directories URL doesn't contain port number.
    Workaround:
    Please use http://X.X.X.X:8080/ccmip/xmldirectory.jsp for the directories
    URL instead of http://X.X.X.X/ccmip/xmldirectory.jsp
    You can try upgrading to firmware 9.3(1)
    Regards,
    Tere.

  • Dot1x, .1X and Cisco IP Phones

    Hi,
    We are busy performing dot1x tests on IP Phones. We chose the LSC approach and have generated CAPF CSRs which we have signed by our PKI infrastructure.
    Once all certificates and trust have been uploaded and when we update the CUCM CTL with the Cisco CTL client tool, we received the following error message
    “Could not get CAPF certificate(s).CAPF seems to be running on the CUCM Publisher but the certificate file(s) do not exist in the Certifiicate trust path on Server”
    We searched Neptro with an explanation on this and found that article:
    https://supportforums.cisco.com/thread/2067102
    In our setup we one issuing CA in the certification path has n key of 4096 bits. This is imposed by our Security Policy and can’t be workaround from a security policy point of view.
    We then had the CAPF CSR regenerated and had a test CA with an encryption key of only 2048 bit sign our certificate and Dot1x authentication. This worked just fine and test Ip Phones can now authenticate..
    My question is, is that a known limitation of Cisco Callmanager which is unable to handle certificates signed by a PKI in which one of the CA has a key of more that 2048 bits. Or is this a bug related to our 8.6.2.23900-10 CUCM version.
    Is there a way to bypass that limitation or a precise version of callmanager correcting it?
    THanks,
    Antoine

    You can configure the MSFT supplicant to send an EAPOL-Logoff:
    Software\Microsoft\EAPOL\Parameters\General\Global\AuthMode -- REG_DWORD
    0: Machine authentication mode in Windows XP Client RTM. When a user logs in, if the connection has already been authenticated with Machine credentials, the user’s credentials are not used for authentication.
    1: Machine authentication with re-authentication functionality. Whenever a user logs in, 802.1X authentication is performed using the user’s-credentials.
    2: Machine authentication only – Whenever a user logs in, it has no effect on the connection. 802.1X authentication is performed using machine credentials only.
    In the wired-Ethernet case you should set (SupplicantMode = 3) AND (AuthMode = 0) AND (disable Machine-Authentication OR ensure that there are no machine credentials on the client). This will ensure that when a user logs off, an EAPOL-Logoff will be sent out. So, AFAIK, this is the bad news .. you lose machine-auth.
    Actually, stay tuned for the ability for our IP Phones to be able to do this on behalf of a PC very soon. What will happen is when an IP Phone senses EAPOL through it, it will know who the supplicant is, and what port they're on (the phone's PC port). Assuming 2 conditions above, if link to phone's PC port goes down, IP Phone will transmit EAPOL-Logoff to PC immediately (on PCs behalf).
    Hope this helps.

  • Call manager and Cisco IP phones

    I would like to know if it's possible to use Cisco IP phones in small environments, without having Call manager, or it's mandatory to have always CallManager if one wants to use the IP phones.
    Thank you

    You can use Call Manager Express, which runs on cisco 1751/60, 2600 and above routers. it can support up to 120 users. Cisco Unity Express will provide voice mail. this is a network module in 2600 and above routers. for more info, see www.cisco.com/go/ccme

  • Play an rtp stream and save at the same time

    Hello
    How cam i play and save at the same time an rtp stream.
    can anyone help me about this.
    Thanks

    Hello
    How cam i play and save at the same time an rtp stream.
    can anyone help me about this.
    Thanks

  • Mitel phone 802.1x with Cat 3560 and Cisco ACS5.2 problem

    I am piloting an 802.1x implementation for a client who has Mitel IP Phones.  I have setup the switch and ACS based on previous experience and a windows PC can authenticate onto the network OK.  When I use a Mitel phone however, it seems to skip past the first 802.1x LCD message and goes straight to LLDP and DHCP discovery, which obviously fails.  The phone are 5224s and the controller is on the original v10 release.  I have cleared the 802.1x config on the phone and rebooting as per Mitel documentation which leads me to believe it should then prompt for a user/pass on next reboot.  It does not do this.
    I known the ACS is setup to support EAP-MD5 and I have tried all the various types of host modes including the default and Multi-Auth, Multi-Domain and none of them seem to make any difference.  I have tried with and without a PC attached to the phone as well.
    A wireshark shows the EAP identity request from the switch, and I see an EAP response from the phone, although it is slightly different to the PC's response.  In the end the phone issues an EAP 4 failure message.  So something in that EAP conversation doesnt seem to work.  Does anybody have an experience of this?

    A wireshark capture shows a difference in the EAP request message from a Cisco Cat 3560 (12.2.55) to the Mitel, compared to a HP Procurve to the Mitel which the Mitel responds to:
    Cisco EAP Request trace:
    Frame 17 (60 bytes on wire, 60 bytes captured)
    Ethernet II, Src: Cisco_99:06:84 (00:1e:49:99:06:84), Dst: Mitel_2c:ad:3b (08:00:0f:2c:ad:3b)
        Destination: Mitel_2c:ad:3b (08:00:0f:2c:ad:3b)
        Source: Cisco_99:06:84 (00:1e:49:99:06:84)
        Type: 802.1X Authentication (0x888e)
        Trailer: 000000000000000000000000000000000000000000000000...
    802.1X Authentication
       Version: 3
        Type: EAP Packet (0)
        Length: 5
        Extensible Authentication Protocol
            Code: Request (1)
            Id: 1
            Length: 5
            Type: Identity [RFC3748] (1)
    HP EAP Request trace:
    Frame 36 (60 bytes on wire, 60 bytes captured)
    Ethernet II, Src: Procurve_03:b7:40 (00:1b:3f:03:b7:40), Dst: Mitel_42:f5:21 (08:00:0f:42:f5:21)
        Destination: Mitel_42:f5:21 (08:00:0f:42:f5:21)
        Source: Procurve_03:b7:40 (00:1b:3f:03:b7:40)
        Type: 802.1X Authentication (0x888e)
        Trailer: 000000000000000000000000000000000000000000000000...
    802.1X Authentication
        Version: 1
        Type: EAP Packet (0)
        Length: 15
        Extensible Authentication Protocol
            Code: Request (1)
            Id: 1
            Length: 15
            Type: Identity [RFC3748] (1)
            Identity (10 bytes): User name:
    The HP seems to be requesting a User name as a string in the Identity field, whcih the Mitel phone then responds with an EAP response packet with an identity of MITEL.
    The other difference seems to be that a Version code of 3 is being used by the Catalyst but Version 1 by the HP and Mitel phone.
    Any ideas anyone?

  • 802.1x and Cisco IP phones

    I have 802.1x configured on a Cisco 2950 switch. On ports where I have PCs plugged into the data port on the IP phones users sometimes get placed in the guest vlan. If they shut down their attached PC and then unplug the network cable (the one between the switch and the phone), then re-plug in the cable and boot their PC it seems to authenticate them again.... sometimes. The config for the ports with phones configured is as below:
    interface FastEthernet0/4
    switchport access vlan 4
    switchport mode access
    switchport voice vlan 200
    switchport port-security
    switchport port-security maximum 2
    no ip address
    dot1x port-control auto
    dot1x host-mode multi-host
    dot1x guest-vlan 3
    spanning-tree portfast
    Does anyone have a possible fix or work around?
    Thanks in advance,
    Peter

    You can configure the MSFT supplicant to send an EAPOL-Logoff:
    Software\Microsoft\EAPOL\Parameters\General\Global\AuthMode -- REG_DWORD
    0: Machine authentication mode in Windows XP Client RTM. When a user logs in, if the connection has already been authenticated with Machine credentials, the user’s credentials are not used for authentication.
    1: Machine authentication with re-authentication functionality. Whenever a user logs in, 802.1X authentication is performed using the user’s-credentials.
    2: Machine authentication only – Whenever a user logs in, it has no effect on the connection. 802.1X authentication is performed using machine credentials only.
    In the wired-Ethernet case you should set (SupplicantMode = 3) AND (AuthMode = 0) AND (disable Machine-Authentication OR ensure that there are no machine credentials on the client). This will ensure that when a user logs off, an EAPOL-Logoff will be sent out. So, AFAIK, this is the bad news .. you lose machine-auth.
    Actually, stay tuned for the ability for our IP Phones to be able to do this on behalf of a PC very soon. What will happen is when an IP Phone senses EAPOL through it, it will know who the supplicant is, and what port they're on (the phone's PC port). Assuming 2 conditions above, if link to phone's PC port goes down, IP Phone will transmit EAPOL-Logoff to PC immediately (on PCs behalf).
    Hope this helps.

  • Mac Lion and Cisco VPN client problems

    I just installed Lion 10.7 on my iMac and can no longer use the downloaded Cisco VPN client to connect to Microsoft Remote Desktop and access the PC in my company's office. When I try to launch the VPN client I get Error 51. I used to be able to enter a command in the Terminal as a workaround to use the VPN client when that happened, but that no longer works. I have tried booting into 32-bit mode; doesn't work. I tried to use the Cisco client built into Lion using settings provided by my company. When I try to connect I get the following message: "The negotiation with the VPN server failed. Verify the server address and try reconnecting."
    I have searched the web looking for a solution. My company's tech department is stumped; the Apple Geniuses haven't been able to help. Does anyone have any ideas how I can use either the downloaded Cisco VPN client or the client built into Lion?
    Sent from Cisco Technical Support iPad App

    Here is the link which you can use to configure the inbuilt VPN client in MAC Lion.
    http://glazenbakje.wordpress.com/2011/07/28/how-to-create-a-cisco-vpn-connection-in-apple-mac-os-x-lion/
    Make sure you configure the attributes correctly.
    Secondly the inbuilt VPN client code of Lion is made in collaboration with Cisco so there will not be any issues of compatibility.
    Cheers,
    Rohan

  • How to synchronize audio and video rtp-streams

    Hi everyone!
    I've tried to make one of the processors, processor1, control the other processor, processor2, with processor1.addController(processor2) but I get a
    javax.media.IncompatibleTimeBaseException. I need to synchronize audio and video rtp-streams because they are sometimes completely out of sync.
    In JMF API Guide I've read:
    "2. Determine which Player object's time base is going to be used to drive
    the other Player objects and set the time base for the synchronized
    Player objects. Not all Player objects can assume a new time base.
    For example, if one of the Player objects you want to synchronize has
    a *push-data-source*, that Player object's time base must be used to
    drive the other Player objects."
    I'm using a custom AVReceive3 to receive rtp-streams and then I create processors for the incoming stream's datasource's, and they are ALL PushBufferDataSource's.
    Does this mean I can't synchronize these. If so is there any way I can change them into Pull...DataSources ?
    How are you supposed to sync audio and video if not with as above ?

    camelstrike wrote:
    Hi everyone!
    I've tried to make one of the processors, processor1, control the other processor, processor2, with processor1.addController(processor2) but I get a
    javax.media.IncompatibleTimeBaseException. I need to synchronize audio and video rtp-streams because they are sometimes completely out of sync.
    In JMF API Guide I've read:
    "2. Determine which Player object's time base is going to be used to drive
    the other Player objects and set the time base for the synchronized
    Player objects. Not all Player objects can assume a new time base.
    For example, if one of the Player objects you want to synchronize has
    a *push-data-source*, that Player object's time base must be used to
    drive the other Player objects."
    I'm using a custom AVReceive3 to receive rtp-streams and then I create processors for the incoming stream's datasource's, and they are ALL PushBufferDataSource's.
    Does this mean I can't synchronize these. If so is there any way I can change them into Pull...DataSources ?The RTP packets are timestamped when they leave, and they are played in order. You can't change the timebase on an RTP stream because, for all intensive purposes, it's "live" data. It plays at the speed the transmitting RTP server wants it to play, and it never gets behind because it drops out of order and old data packets.
    If your RTP streams aren't synced correctly on the receiving end, it means they aren't being synced on the transmitting end...so you should look into the other side of the equation.

  • My phone problem

    My Phone Problem
    In April 2013 I signed 2 year with me and my wife.
    I picked an HTC android phone that they had offered when
    you sign up for I think $50-100.
    In November I accidentally cracked the screen. I went to the
    local store where I bought the plan and they checked my account and saw that I
    had insurance. Then they made sure I did not enter the pool of people being
    helped in the store and gave me a pamphlet and said to call this number and
    they will help you. I felt a little pawned off but thought ok this is how its
    done so lets call them and they supposidly overnight you a new phone after you
    pay $100. I'm not even gonna go into the paying $100, my problem was worse
    here, the $100 was nothing.
    I went home and called the number but it would not ever let
    you talk to anyone and it kept saying to do it online. So I filled out the
    claim online.  I got the new phone right
    away but it would not hold a charge. I tried the new charger it came with, the
    old charger, then I switched batteries from the old phone and it still would
    not hold a charge. I could charge the battery in the old phone and put the
    battery in the new phone and it would drain right away. So I look at a few
    threads and there seems to be an issue with this phone and something about the
    charging port. So I go back to the store and they listen to me and use their
    charger/tester on the phone and say yes we agree it is not charging. They said
    I have to wait the two years to get the upgrade or they could finance me(make
    payments) for a new one. I politely explained I don't think I should have to
    pay $500 for a new phone because I happened to pick a crappy one that you
    offered in your store. Then they told me to call the insurance number again and
    escorted me to the door!
    So I call the number again and they run you around on all
    kinds of automated questions and make you give them numbers off of the phone
    and after about an hour I got to talk to someone. He then very procedurally
    made me plug the phone in the charge and tell him if the charge light and the
    meter in the menus says its charging. I explained yes, but that's the problem
    it looks like it's charging and it actually is not charging cause the battery
    power decreases. I told him I went to the local store to confirm this and they
    agreed. He then told me I would have to leave it on the charger for a couple of
    hours at least before using it and that's all he can do and to call back in a
    few hours if it does not work. What do you do when the store you went to does
    not want anything to do with your problem and the insurance service guy won't
    listen? My last effort was to call verizon and tell them the story and if they
    cannot help me fix this situation I'm leaving. They lady was nice and said she
    was going to put me on with the insurance company again and I thought oh great,
    I could have done this. But the insurance person did not take me through any
    tests or questions they just set up the shipment of another phone.
    Not to mention that while all this was going on I was trying
    to use the old cracked phone to charge the battery then take it out and put in
    the new broken phone that would not charge and used up the battery quickly.
    A few things out of all this....
    I have a bad taste in my mouth in general regarding
    Verizon and service. Really? Upgrading my phone a little earlier is that big of
    a deal? I pay this company $180 a month for me and my wife. I was millimeters
    away from going to ATT and saying SeeYa at whatever costs.
    That local verizon store is evil, is that how everyone
    elses service is at the local store? Let me know.
    That Asurion insurance service that you pay $5 or 6 a
    month for is a fricken joke.
    The whole experience was bad and I cannot wait til my
    contract is up or until I have another problem, cause I'm outta there.

    This is my point, the overall degradation and acceptance of poorer and poorer customer service.
    Yes I broke my phone. But listen, I thought there was a good chance I might break my phone in a couple of years, I'm a clutz! But that is why I bought insurance and have paid for it every month to Verizon!
    But when I went to the Verizon store I was basically pushed out and one time just about walked out. And I am a very non confrontational person, I acted completely professionally, they just did not want to help me. Their attitude towards anyone that has insurance, IS ALREADY A VERIZON CUSTOMER, and has a phone problem is to push them on, and ask for "NEXT". Because they know I am locked in a contract.
    Take a look at society and how people are doing business these days, it is so self service, they don't even want to deal with you, they give you a website. Or in this case a phone number which then referred me to a website.
    People we are paying good hard earned money for these services and I just think we are falling into the thinking of the masses and "that's how it is so accept it" in this self serve society.
    Yes, Asurion initially did not handle this well, and I indicated this on their serve.
    But My main complaint is the overall customer service, or lack their of, with my Carrier who I signed up for this insurance with and whom I pay dearly.
    I want people to know so maybe they can make an informed decision next time they need to.

  • RTP stream to 7920 phone

    I have a jtapi app that mimics a walkie talkie system. Pretty basic stuff going on.
    I'm using the multicast custom softkeys to transmit and receive audio.
    So the Cisco Docs say that the 7920s can "only support one incoming and one outgoing unicast stream."
    However, I'm able to transmit multicast fine from the 7920...it's just I'm not receiving anything.
    Here are my two CiscoTerminal.sendData() methods that are pushed to a phone when it joins a walkie talkie channel:
    CT_.sendData("<CiscoIPPhoneExecute>" +
    "<ExecuteItem URL=\'RTPMRx:" + SHOUTIP + ":" + (Integer.parseInt(SHOUTPORT)+channel_*2) + "\'/>" +
    "</CiscoIPPhoneExecute>");
    CT_.sendData("<CiscoIPPhoneText>" +
    "<Title>" + channelname + "</Title>" + "<Prompt></Prompt>" +
    "<Text>Hold down the [Talk] key to talk.\nPress the [Stop] key to exit the channel.</Text>" +
    "<SoftKeyItem>" +
    "<Name>Talk</Name>" +
    "<URL>RTPTx:Stop</URL>" +
    "<URLDown>RTPMTx:" + SHOUTIP + ":" + (Integer.parseInt(SHOUTPORT)+channel_*2) + "</URLDown>" +
    "<Position>1</Position>" + "</SoftKeyItem>" +
    "<SoftKeyItem>" +
    "<Name>Stop</Name>" +
    "<URL>http://" + server_ + ":8080" + path_ + "?CHANNEL=" + channel_ + "&TASK=1&DEVICE=" + SEP_ + "</URL>" +
    "<Position>2</Position>" +
    "</SoftKeyItem>" +
    "</CiscoIPPhoneText>");
    Is there some trick to receiving RTP on the 7920? I discovered that you have to wrap the CiscoIPPhoneExecute URL in single quotes instead of double quotes or the 7920 won't do anything with it. I was wondering if there's something else I need to call to turn on the earpiece?
    I'm seeing the RTP receive animated icon on the phone when it joins the walkie talkie channel, and like I said, I can hold down the "Talk" softkey and hear audio on my desk IP phones.
    Additional Info: the SHOUTIP variable is 230.20.20.21 and the SHOUTPORT variable is 20480. My channel numbers are linear from 0 on up, you'll notice I multiply them by 2 to keep on the even ports for broadcasting.
    Any help is appreciated,
    DB

    Pshh...nevermind. I updated the firmware this morning from 3.0 to 3.01 and it works now.
    Curiously, we have Syn-Apps SA-Announce and it had no problem doing paging and walkie talkie to the 7920 before the firmware upgrade this morning...so more power to them for figuring out the pre-3.01 trick to multicasting to the 7920s.
    Coincidentally, this whole thing came about because we sold an SA-Announce server to a company that requires paging and a service that works EXACTLY like a walkie talkie system. Since the Syn-Apps walkie talkie requires one person to always be in a phone call to keep it active, and can't rejoin members once they've left, I had to write this app to go along with it.
    I'm going to donate the code to you guys for those curious. It was written in two days including fighting against stupid issues...so it's not well documented and it hasn't been optimized at all.
    I'm zipping up the entire NetBeans project folder.
    There's a WT.war file in a dist subfolder but our CallManager and Push user/pass are hardcoded in, so you'll need to update those and rebuild.
    The URL: http://your-servlet-server:8080/WT/servlet?DEVICE=#DEVICENAME#
    is used for the services URL.
    This code provided as-is blah blah blah...
    DB

  • RTP for Cisco IP Phones

    Hello friends!
    I'm developing an application for Cisco IP Phones that whorks with JMF. Since there are some programmers in this forum that knows Cisco IP phones, I send my question here.
    I was send succefully the XML message to phone (CiscoIPPhoneExecute), I was customized the paket's size to 160, etc. All works aparently. But audio stream does not reach to phone. Can anyone tell me why??
    Below I write my source code.
    Tanks!
    Max.
    import java.io.*;
    import java.net.*;
    import java.util.*;
    import org.apache.xerces.impl.dv.util.Base64;
    import javax.media.*;
    import javax.media.control.*;
    import javax.media.format.*;
    import javax.media.protocol.*;
    * @author  Administrator
    public class MMHTTPPost {
        /** Creates a new instance of MMHTTPPost */
        public MMHTTPPost() {
            try {
                 * Envia el CiscoIPPhoneExecute al telefono
                String xml = new String("<CiscoIPPhoneExecute>"+
                                            "<ExecuteItem Priority=\"0\" URL=\"RTPRx:Stop\"/>"+"<ExecuteItem Priority=\"1\" URL=\"RTPRx:10.1.15.10:23480\"/>"+
                                            "</CiscoIPPhoneExecute>");
                String  userId      = "Max",
                        password    = "12345",           
                        basicAuth   = "Basic ",           
                        params      = "XML=" + URLEncoder.encode(xml, "ISO-8859-1" );    
                byte[]  bytes       = params.getBytes();
                // Create a URL pointing to the servlet or CGI script and open an HttpURLConnection on that URL       
                URL url = new URL( "http://10.1.15.56/CGI/Execute" );       
                HttpURLConnection con = ( HttpURLConnection ) url.openConnection();       
                // Indicate that you will be doing input and output, that the method is POST, and that the content       
                // length is the length of the byte array       
                con.setDoOutput( true );       
                con.setDoInput( true );       
                con.setRequestMethod( "POST" );       
                con.setRequestProperty( "Content-length", String.valueOf( bytes.length ) );
                // Create the Basic Auth Header       
                Base64 encoder = new Base64();
                basicAuth = (String)encoder.encode( ((String)(userId + ":" + password)).getBytes() );
                System.out.println("Codificado: " + basicAuth);
                con.setRequestProperty( "Authorization", "Basic " + basicAuth.trim() );
                // Write the parameters to the URL output stream       
                OutputStream output = con.getOutputStream();       
                output.write( bytes );       
                output.flush();       
                // Read the response       
                BufferedReader input = new BufferedReader( new InputStreamReader( con.getInputStream() ) );       
                while ( true ) {           
                    String line = input.readLine();           
                    if ( line == null )                
                        break;           
                    System.out.println( line );       
                input.close();       
                output.close();       
                con.disconnect();
                 * Aca empieza la parte RTP/JMF
                // Create a Processor for the selected file. Exit if the       
                // Processor cannot be created.       
                Processor processor = null;       
                try {           
                    String mediaUrl = "file:\\C:\\pruebas execute\\spacemusic.au";
                    processor = Manager.createProcessor( new MediaLocator(mediaUrl));       
                } catch (IOException e){           
                    System.out.println("Exception occured (1a): " + e);       
                } catch (NoProcessorException e){           
                    System.out.println("Exception occured (1b): " + e);       
                // configure the processor       
                //processor.configure();       
                //Espera el estado Processor.Configured
                boolean result = waitForState(processor, Processor.Configured);
                if (result == false)
                    System.out.println("No se pudo configurar el procesador...");
                // Block until the Processor has been configured       
                TrackControl track[] = processor.getTrackControls();       
                boolean encodingOk = false;       
                // Go through the tracks and try to program one of them to       
                // output ulaw data.       
                for (int i = 0; i < track.length; i++)        
                    if (!encodingOk && track[i] instanceof FormatControl)            
                        if (((FormatControl)track).setFormat( new AudioFormat(AudioFormat.ULAW_RTP,8000,8,1)) == null)
    track[i].setEnabled(false);
    else
    encodingOk = true;
    else
    // we could not set this track to ulaw, so disable it
    track[i].setEnabled(false);
    *Aqu? se cambia el tama?o del paquete a 160
    if (((TrackControl)track[i]).isEnabled()) {
    try {
    System.out.println("Cambiando la lista de codecs...");
    Codec codec[] = new Codec[3];
    codec[0] = new com.ibm.media.codec.audio.rc.RCModule();
    codec[1] = new com.ibm.media.codec.audio.ulaw.JavaEncoder();
    //codec[2] = new com.ibm.media.codec.audio.ulaw.Packetizer();
    codec[2] = new com.sun.media.codec.audio.ulaw.Packetizer();
    ((com.sun.media.codec.audio.ulaw.Packetizer)codec[2]).setPacketSize(160);
    ((TrackControl)track[i]).setCodecChain(codec);
    catch (Exception e){
    System.out.println("Error al cambiar el tamano del paquete: " + e);
    System.out.println("Encoding ok?: " + encodingOk );
    // At this point, we have determined where we can send out
    // ulaw data or not.
    // realize the processor
    if (encodingOk)
    //processor.realize();
    // block until realized.
    // get the output datasource of the processor and exit
    // if we fail
    //Espera el estado Processor.Realized
    result = waitForState(processor, Processor.Realized);
    if (result == false)
    System.out.println("No se pudo realizar el procesador...");
    DataSource ds = null;
    try
    ds = processor.getDataOutput();
    catch (NotRealizedError e)
    System.out.println("Exception occured(2): "+e);
    // hand this datasource to manager for creating an RTP
    // datasink.
    // our RTP datasink will multicast the audio
    try
    String mediaUrl= "rtp://10.1.15.56:23480/audio/1";
    MediaLocator m = new MediaLocator(mediaUrl);
    DataSink d = Manager.createDataSink(ds, m);
    d.open();
    d.start();
    catch (Exception e)
    System.out.println("Exception occured(3): "+e);
    catch ( MalformedURLException murlex )
    System.out.println( murlex );
    catch ( IOException ioex )
    System.out.println( ioex );
    * @param args the command line arguments
    public static void main(String[] args) {
    new MMHTTPPost();
    * Convenience methods to handle processor's state changes.
    private Integer stateLock = new Integer(0);
    private boolean failed = false;
    Integer getStateLock() {
         return stateLock;
    void setFailed() {
         failed = true;
    private synchronized boolean waitForState(Processor p, int state) {
         p.addControllerListener(new StateListener());
         failed = false;
         // Call the required method on the processor
         if (state == Processor.Configured) {
         p.configure();
         } else if (state == Processor.Realized) {
         p.realize();
         // Wait until we get an event that confirms the
         // success of the method, or a failure event.
         // See StateListener inner class
         while (p.getState() < state && !failed) {
         synchronized (getStateLock()) {
              try {
              getStateLock().wait();
              } catch (InterruptedException ie) {
              return false;
         if (failed)
         return false;
         else
         return true;
    * Inner Classes
    class StateListener implements ControllerListener {
         public void controllerUpdate(ControllerEvent ce) {
         // If there was an error during configure or
         // realize, the processor will be closed
         if (ce instanceof ControllerClosedEvent)
              setFailed();
         // All controller events, send a notification
         // to the waiting thread in waitForState method.
         if (ce instanceof ControllerEvent) {
              synchronized (getStateLock()) {
              getStateLock().notifyAll();

    ignore my last post.. I didn't properly read the source code.
    Anyway, I got g.711 streaming to work. I started out using the AVTransmit2 sample, but set the audio output format to what is used in the source code posted here. I've also applied the same codec chain described above, and that was it.
    I could never get streaming to work using the first RTP streaming method described in the JMF Programmers guide (and this is the method used in the source posted above), but using the RTPManager, things work just fine.

  • Is there a way to delete photos from Photo Stream on my macbook pro? (Not from my folders,etc.) I need to empty the photo stream. Something in my photo stream has corrupted my phone and my apple specialist suggested I do this.

    Is there a way to delete the photos in Photo Stream on my mackbook pro notebook?
    My phone became corrupted today and, after continuing to have problems with 2 new phones, the apple specialists determined that the only possible explanation was the presence of a corrupted photo or video in photo stream; and that the only way to use my phone without it shutting down was to deactivate the photo stream on it.  It worked, but I would like to be able to have the option of using photostream again. The apple folks suggested that I delete all photos from photo stream on my computer; and then, when it is "empty", reactivate it on my phone? Is anyone familiar with this problem?

    If it says Not Enough Storage Space on iCloud then you can get more Storage space for iCloud if you want to backup more Data on iCloud Storage. You will find the Pricing for Additional Storage Space and how to Buy Storage Space for iCloud from your Device in the Link below.
    http://support.apple.com/kb/ht4874
    http://support.apple.com/kb/HT5879

  • Transfer VOIP Calls Between Cisco Desk Phone and Cisco Jabber For IPhone 9.5

    Does anyone know how to transfer an active voip call from a Cisco IP Desk Phone to Cisco Jabber for IPhone?  I can transfer a call from Cisco Jabber for IPhone to my Cisco IP Desk Phone no problem.  I put the call on hold and then click "Resume" on my Cisco IP Desk Phone.  However I cannot do the same but the other way around.  If I put the call on hold on my Cisco IP Desk Phone, I see "no active call" on my Jabber client.  The only information I could find slighlty relevant was using the Mobility Key/Remote Destination Profile feature however this defeats the object as this will forward to an external number, e.g. mobile and I just want to transfer the call within the VOIP environment between the two devices that are using the same directory number.
    I am using Cisco Call Manager 9.1(2), Cisco Presence 9.1 and Cisco Jabber for IPhone 9.5.
    Any help would be greatly appreciated.
    Kind Regards,
    Paul Parker.

    Did you ever find an answer to this ?
    I am seeing the same behavior and trying so see if I can put calls on hold and pick them up both ways also.
    The only answer I seem to have found is to use park instead
    That would/should work but I would just prefer to hold/unhold
    Just not sure why we would not be able to hold/unhold on what is essentially a "shared" line
    Does anyone have this working for them ?

Maybe you are looking for

  • XMLHttpRequest performance is very slow

    I'm noticing that the performance of XMLHttpRequest is very slow.  I was seeing poor overall request performance in my Extension, so I wrote a simple test Extension that issues a GET request to fetch an image available on the Adobe homepage.  This re

  • Does the Communications API work with Studio 4

    I just installed Studio 4 along with the JDK. The Java version that I am running now is: java version "1.4.1_02" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02-b06) Java HotSpot(TM) Client VM (build 1.4.1_02-b06, mixed mode) Running

  • Getting error message when trying to print (LR4)

    Hi All, I am getting this message (/Library/Printers/EPSON/InkjetPrinter/Filter/pdftopdf.app/Contents/MacOS/pdftopdf failed) when trying to print through the LR4 print module to my Epson 3880 I am running OSX 10.7.3 and have just downloaded and insta

  • I can't open any pdf with Adobe Reader XI, neither online or offline - OS X

    Since I've upgraded to Acrobat Reader XI I'm not able to open any pdf file. I can't open any .PDF already existing in my Mac and also can't open anything online throughout browser (I use Safari and Chrome) I've already uninstalled and reinstalled Ado

  • Dynamic binding of a DataGridTemplateColumn with a ComboBox inside

    Hi all and thank you in advance. I wish you could help me 'cause I'm quite a newbye in this world (C# and WPF). I need to bind a ComboBox field inside a DataGrid with some data. The DataGrid is filled with a collection. I need that one or more data f