Remove All Ads from XDA

[Q] Teamspeak 3 for the Android

16 posts
Thanks Meter: 0
By DesireDroid, Junior Member on 20th August 2010, 01:21 AM
Post Reply Email Thread
Welcome to this new and important thread about the Teamspeak 3 Client for Android. We all need it so badly, always connected with Teamspeak on the PC, and now with your mobile where ever you go, you can talk with your Teamspeak buddies. Anyways, that would be wonderfull!!!! And also because Skype gets removed by Nimbuzz and Fring, we need a good alternative that doesn't rely on making money.

So to start off, I have to tell you, this app doesn't exist yet.
But we can make a difference!
If we all work together on this, I know we can do this.

So I did some research, and i want to share that research with you, so maby WE (as xdadevelopers) can do this.

First of all we need to look at how Teamspeak works and what functionalities and options we need to give the Teamspeak Android Client. (aah a nice name TAC, will keep using that one).

(cant post links to outside websites so i post the ts3architecture later when i have more post. Also go to the official TS3 website to download the SDK.

As far a codec for voice communication the Speex codec is the most commonly used in TS.
I spoke with a person who told me he managed to port the Speex codec onto the android. But I dont have access to that code. maby in the future....

So as far as SDK for Android.... I also heard about an NDK, (Native Developers Kit), so is this project more suitable for the NDK?

As far as i know from Teamspeak experiance we only need the UDP part to work, to have an voice communication.

Please all post your replies, comments, love, and support.

Cheers DesireDroid
20th August 2010, 01:53 AM |#2  
Junior Member
Thanks Meter: 0
That will be great!
I would buy it if anyone develop it!!!
20th August 2010, 02:05 AM |#3  
Flag Pittsburgh, PA
Thanks Meter: 8
Donate to Me
I don't know anywhere near enough to help develop, but I'd certainly buy the app.
20th August 2010, 06:06 AM |#4  
Account currently disabled
Flag Kent, OH
Thanks Meter: 240
Donate to Me
sipdroid has speex and is open source (GPL, i think). i might be able to get something working, but i probably won't have time to look at teamspeak until next week.
20th August 2010, 03:59 PM |#5  
OP Junior Member
Thanks Meter: 0
Originally Posted by hotaru

sipdroid has speex and is open source (GPL, i think). i might be able to get something working, but i probably won't have time to look at teamspeak until next week.

I will look into sipdroid right away.
And help in a week is still help. So we got our first helper ;)
Cheers, and stay tuned.

Sent from my HTC Desire using XDA App
21st August 2010, 08:20 PM |#6  
OP Junior Member
Thanks Meter: 0
Who wants this app and want to contribute?
21st August 2010, 11:35 PM |#7  
Junior Member
Thanks Meter: 0
reversing protocol and api is not easy, nor legal but doable

first of all, if we do this i would recommend to gather up some folks on a sourceforge website.

i have experience in VoIP, network protocol and android programming, because its my job. Thats why i'm afraid sipdroid is of no help because TS3 has a complete proprietary (and encrypted) protocol. I already know how to encode speex on android/java no problem here. the real trick is to break the ts3 protocol, because the support client API SDK is of no use, because its precompiled (and not for ARM V5/7 CPUs).

I took the time to have a loot at TS3 UDP packet structure and it does not look very promising because they are using obviously some kind of encryption that is somewhere hardcoded in the client library. I think it is a lightwight encryption, maybe even combination of MD5 or some easy bit operations. But resulting network traffic does not contain any default encoded values (like asn1 int/strings/...). I was not able to do a fake login. In order to do this someone needs to disassemble the TS3 Client library. This one really needs to know what he is doing. The compile library is 4MB in size, so there is a lot of stuff. I think it is out of my scope. However, it can be done, but it is anything else than of easy.

here are my first wireshark results:
PHP Code:
UDP only (think soeven though TCP is mentioned in docs)
- Default 

General Structure
Each packet heads a 8Byte hash.
Hash MAY contain a checksum and/or sequence 
Once connection is established a keepalive an ack ist looped containing a sequence number (in plain)


Connecte Request (1 client packet)

HASH (each packet)
00000000 [e0 e2 2e d8 fd cd 03 3b00 00 00 00 02 9d 74 8b .......; ......t.

00000010  45 aa 7b ef b9 9e fe ad  08 19 ba cf 41 e0 16 a2 E.{..... ....A...
[2b 77 d5 94 fe e7 31 72  e6 d0 a3 2f 2d 59]90 95 +w....1r .../-Y..

00000030  23 3e 00 97 2b 1c 71 b2  4e c0 61 f1 d7 6f c5 7e #>..+.q. N.a..o.~

00000040  f6 48 52 bf 82 6d a9 3a  52 da 23 5f 03 2b d9 bf .HR..m.: R.#_.+..

00000050  3a da 2e aa fe 74 c6 fc  23 de 99 71 23 91 b9 06 :....t.. #..q#...

00000060  16 4a 4e eb 2b 48 ae c3  2d 14 a1 e6 77 cc 68 ab .JN.+H.. -...w.h.

00000070  c1 cf 0f fd 07 ac 0d 42  09 15 bb a0 86 33 2a 23 ............3*#

00000080  08 03 8a 65 81 89 c6 2b  85 82 4b d5 fd f8 61 3c ...e...+ ..K...a<

00000090  b4 39 76 fb cf 18 2a aa  97 9b f7 ad 81 82 33 66 .9v...*. ......3f

000000A0  be 8d


Answer (1 server packet)

[be e2 d4 c4 8f 8c 54 5100 00 02 97 76 8b 54 ad ......TQ ....v.T.
00000010  79 e3 af 87 eb aa 1a 19  ba cf 41 e0 16 a2[6c 5e]y....... ..A...l^
[e3 cf 93 df 2f 4a f9 f2  97 29 22 59]90 95 23 33 ..../J.. .)"Y..#3
                          VAR          LO HI HI LO HI LO HI LO
    00000030  08 86 2d 40[29 b6 39 cf  40 e6 c5 3a c6 5a f0 6f][email protected]).9. @..:.Z.o
                    9c FIX
    00000040  65 89 d6[12]c3 62 6f 88  32 7a 69 3e cd a4 12 ce 2zi>....
    00000050  62 fe de 1e 96 d0 0e a9  9f 76 7e cc a7 63 1c 47 b....... .v~..c.G

    00000060  0a 94 38 22 f5 f9 06 34  d6 f6 78 92 6c 91 c6 d9 ..8"
...4 ..x.l...

00000070  2d fa 2a 8e 10 54 6c 33  91 be 92 3f 2d 2b 0d 3c -.*..Tl3 ...?-+.<

00000080  a2 7c 89 de e2 27 ae b0  53 e4 c7 fd 64 0a e3 2d .|...'.. S...d..-

    00000090  2c fc c4 06 0e fc f7 81  f6 de a7 cc 1c 71 bc 80 ,....... .....q..

    000000A0  d3 54 8b 02 9a 1b ca ad  92 99 28 62 cc 62 fa 53 .T...... ..(b.b.S

    000000B0  1b 13 ec 93 
22nd August 2010, 11:33 AM |#9  
Junior Member
Thanks Meter: 0
this project cares about ts2 protocol not ts3. ts3 is more complicated and not yet reverse engineered.
22nd August 2010, 08:48 PM |#10  
OP Junior Member
Thanks Meter: 0
Maby this is usefull.... got this from the sdk documentation.

Connecting to a server
To connect to a server, a client application is required to request an identity from the Client Lib. This string should be requested
only once and then locally stored in the applications configuration. The next time the application connects to a server, the
identity should be read from the configuration and reused again.

unsigned int ts3client_createIdentity(result);
char** result;

• result
Address of a variable that receives the identity string, encoded in UTF-8.
Returns ERROR_ok on success, otherwise an error code as defined in public_errors.h. If an error occured, the result
string is uninitialized and must not be accessed.

The result string must be released using ts3client_freeMemory. If an error has occured, the result string
is uninitialized and must not be released.

Once a server connection handler has been spawned and an identity is available, connect to a TeamSpeak 3 server with

unsigned int ts3client_startConnection(serverConnectionHandlerI D, identity, ip,
port, nickname, defaultChannelArray, defaultChannelPassword, serverPassword);

uint64 serverConnectionHandlerID;
const char* identity;
const char* ip;
unsigned int port;
const char* nickname;
const char** defaultChannelArray;
const char* defaultChannelPassword;
const char* serverPassword;

• serverConnectionHandlerID
Unique identifier for this server connection. Created with ts3client_spawnNewServerConnectionHandler
• identity
The clients identity. This string has to be created by calling ts3client_createIdentity. Please note an application
should create the identity only once, store the string locally and reuse it for future connections.
• ip
Hostname or IP of the TeamSpeak 3 server.
If you pass a hostname instead of an IP, the Client Lib will try to resolve it to an IP, but the function may block for an
unusually long period of time while resolving is taking place. If you are relying on the function to return quickly, we
recommend to resolve the hostname yourself (e.g. asynchronously) and then call ts3client_startConnection with
the IP instead of the hostname.
• port
UDP port of the TeamSpeak 3 server, by default 9987. TeamSpeak 3 uses UDP. Support for TCP might be added in the
• nickname
On login, the client attempts to take this nickname on the connected server. Note this is not necessarily the actually assigned
nickname, as the server can modifiy the nickname ("gandalf_1" instead the requested "gandalf") or refuse blocked names.
• defaultChannelArray
String array defining the path to a channel on the TeamSpeak 3 server. If the channel exists and the user has sufficient rights
and supplies the correct password if required, the channel will be joined on login.
To define the path to a subchannel of arbitrary level, create an array of channel names detailing the position of the default
channel (e.g. "grandparent", "parent", "mydefault", ""). The array is terminated with a empty string.
Pass NULL to join the servers default channel.
• defaultChannelPassword
Password for the default channel. Pass an empty string if no password is required or no default channel is specified.
• serverPassword
Password for the server. Pass an empty string if the server does not require a password.

All strings need to be encoded in UTF-8 format.

(hope this isn't to mutch text. its that i cant copy any links in here....
22nd August 2010, 09:12 PM |#11  
OP Junior Member
Thanks Meter: 0
bastard dot sourceforge dot net/libdisasm.html
Post Reply Subscribe to Thread

teamspeak 3 android

Guest Quick Reply (no urls or BBcode)
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes