Let me preface by saying I am still a VOIP newb. I've got the basics down (I think) but I welcome any and all advice or suggestions on things to add. I'm sure I got some things wrong. Obviously there are quite a few variables that come into play, including software, provider, codecs, and connection.
Google Voice Solutions:
MY Comments: not working reliably when off of Wi-Fi.
Review by cyberpyr8 (Verizon Network): http://androidactivist.org/reviews/a...iew-groove-ip/
Talkatone: (Free) Routes Google Voice through their own servers. Apparently converts to 3 different codecs. See more here:
Comments: still testing
VOIP.ms: Pay as you go, basically. DID numbers for $1/month, incoming calls $0.01/minute. Outgoing to the US starting at $0.0105/minute. They bill in 6 second intervals. You add funds (minimum $25), and they take them as needed. Supports G711(PCMA), G729a, and GSM codecs.
Comments: My current SIP provider. Interface seems fairly powerful when you get the hang of it. The 2 lower bandwidth codecs (G729a and GSM) seem to be fairly reliable, and G729 seems to be the better quality of the two. My WiFi calls have all been great, with very little lag time. Still testing.
Anveo: I like the options, but the site is a little hard to get used to. It's also nearly impossible to get it to work reliably with Android directly. They are a good option for DIDs and general VOIP service though, if you have another service you can route Android calls to/from. DIDs are cheap here, US numbers seem to go about $2/mo with unlimited inbound calls. E911 is the cheapest I've found at $0.80/mo. Call quality seems quite good, though codec selection is somewhat limited. The call routing editor seems pretty cool. Flowchart looking design app for choosing what to do with calls. FAX is also an option for you business users. US calls are 1 cent per minute.
Callcentric: They are a well known somewhat premium provider. I put $5 on them just as a backup route. They cost a little more, I think 1.5 cents/min. The gnex registers up to them fine, and calls in and out work fine. I've only used them a few times for testing, but call quality is good. Codec selection is in between. Enough options to cover most tastes though.
Built-In SIP: (Free) Codec support is limited; no G729?
CSipSimple: (Free) Integrates into native dialer, lots of codec support. A lot of config options. Supports a ton of codecs. My current choice. NIGHTLY BUILDS HERE: http://nightlies.csipsimple.com/trunk/
Bria: ($8.00) Quite a few options, but then they go and force you to pay even more for things like the G729 codec. Easy interface. I thought I had convinced myself I was getting better quality than CSipSimple, but I think that was related to outside variables. Does not integrate with native dialer.
Sipdroid: (Free) The original. Seems a bit dated now; no G729 support.
Skype: reported to work well, but is not the cheapest route. I haven't purchased one of their plans to test, but for easy setup it may be the best option. Proprietary codecs?
Terms for noobs: (Thanks ttabbal!)
DID: A phone number people on a regular phone can call. You can also direct Google Voice to call this number. If you have a free inbound call DID like Anveo, it's a decent option for GV integration. Most providers allow you to link a DID to various PBX type services and route calls in various ways. Or you can just send all the calls direct to your VOIP device.
PBX: Private Branch Exchange. Basically, your own mini phone company. You can receive calls, route them to various extensions (most any VOIP device), handle voicemail, transfer calls around, hold music, all sorts of crap most people here probably don't need.
Trunk: A connection for inbound and/or outbound calls. Usually used to link a server like Asterisk to a provider for calls to/from the phone network.
Asterisk: One thing Asterisk will give you is the ability to use a different codec on the phone->server link than the one GV uses. So your server will transcode for you. A free PBXes account will do that too. Asterisk is really more useful if you want multiple extensions and providers. You can then do all kinds of crazy stuff with calls.
Troubleshooting: (ttabbal again!)
NAT. NAT sucks. It will cause pain and suffering depending on the type of NAT you have. My office network is using Symmetric NAT, which is near impossible to use SIP with. So I set up OpenVPN on my gnex and just leave it running all the time. It doesn't use as much battery as I feared it would after tuning some settings. The big win was setting "keepalive 60 120" in the server config file. Comparing graphs using the Battery Monitor Widget, I'm about the same standby drain I was getting before. But now SIP works all the time, as there's no NAT in the way.
Wifi on the gnex.... When the screen is off it seems to go into some low-power state that doesn't save much power and causes little connection glitches. So even putting the phone to my head to talk would turn off the screen, then the VOIP call would get all choppy. Telling the app to leave the screen on in calls fixed it right up. I ended up trying Franco's kernel, as he has an option to disable the wifi power save stuff. It's working much better now. I've seen threads about this causing slow downloads when trying to download stuff like Gameloft game data as well. Though others say they don't see it. No idea, but it caused me lots of trouble and it's an easy fix, so I'm posting it.
UPDATE: New tips from natesilver:
This pretty much isn't important on wifi because a home router will usually keep the NAT entries long enough to never lose registration. However on 3/4G the cell carrier will usually cut UDP entries very quickly (my provider cuts them as early as 20 seconds. Unfortunately most VOIP providers only use UDP protocol. This means that if you are using the standard ICS VOIP client, you WILL miss some calls without even knowing that you have become unregistered.
There is an easy solution: go with a VOIP provider that supports TCP protocol. Why? Because cell carriers keep TCP connections open much longer. Personally, I'm very happy with VOIP.ms even though they are UDP only. What i did was create a free account at Sip2Sip.info (because they support TCP and allow free internet calls). My VOIP.ms DID is then forwarded via sip uri to my free Sip2Sip account so i can always receive incoming calls while on mobile, for no extra cost than VOIP.ms alone.
The other benefit to this is that now while using CSipSimple, you can change the TCP keep alive interval to a longer time (think 600 s), to allow the phone to be in deep sleep longer and greatly save on battery usage. IMO this if a must if you are using VOIP on a mobile connection for incoming calls.
The other topic is latency.
Even with a very fast wifi or mobile connection, there is noticeable latency introduced by the Android OS when using VOIP. The playback buffer seems to be unnecessarily high so there is a delay from the time the phone receives a word until it is played through the speaker. This makes for a bizarre pause during conversation, especially if two people begin to talk at the same time. Don't believe me? Try an echo test with your VOIP provider. On a good connection, you should hear yourself back essentially at the same time you speak. With stock Android, you will not experience this. There will be a delay. Add even a small bit of network latency and the problem multiplies.
I have a solution for you if you are using CM9 or AOKP or some other twist of these ROMs.
Install the patch from this thread:
Then to make it even better, use CSipSimple (nightly version) with OPENSL-ES enabled as backend implementation method for audio (somewhere in advanced media settings).
With this setup, latency is reduced to almost nothing which you can verify with another echo test, or just simply from the improved call conversation quality you will experience.