TeamTalk 5 C-API DLL Version 5.22A

Loading...
Searching...
No Matches
ChangeLog

This section contains the list of new features and API changes in TeamTalk SDK releases.

TeamTalk 5 SDK v. 5.22a release, April 8th 2026

- New features in v5.22a
  - Windows client can now stream same formats as Linux and Mac
- API changes in v5.22a

TeamTalk 5 SDK v. 5.19a release, August 5th 2025

- Bug fixes in v5.19a

TeamTalk 5 SDK v. 5.18a release, May 5th 2025

- New features in v5.18a
  - Last login time on user account
  - WebRTC updated to r6818
- API changes in v5.18a

TeamTalk 5 SDK v. 5.15a release, December 19th 2023

- New features in v5.15a
  - PulseAudio support
  - User right for sending text messages
- API changes in v5.15a

TeamTalk 5 SDK v. 5.14a release, August 16th 2023

- New features in v5.14a
  - Time Out Timer for Voice and Media Streams
- API changes in v5.14a

TeamTalk 5 SDK v. 5.13a release, May 8th 2023

- New features in v5.13a
  - Event for encrypted connection errors
  - Events for user account added/removed
  - Encrypted client connect is no longer blocking
  - Events for changes to sound device
- API change in v5.13a

TeamTalk 5 SDK v. 5.12a release, December 21st 2022

- Bug Fixes in v5.12a

TeamTalk 5 SDK v. 5.11a release, October 2nd 2022

- New features in v5.11a
- Bug Fixes in v5.11a
- API change in v5.11a

TeamTalk 5 SDK v. 5.9a release, April 2nd 2022

- New features in v5.9a
  - Configurable server logging
  - Create combined TextMessage
  - Configurable delay in queued conversations (solo transmit)
- API change in v5.9a

TeamTalk 5 SDK v. 5.8b release, September 7th 2021

- New features in v5.8b
  - Timestamp on UserAccount-struct
  - Timestamp on RemoteFile-struct
- API change in v5.8b

TeamTalk 5 SDK v. 5.8a release, June 24th 2021

- New features in v5.8a
  - Store audio from multiple stream types
- API change in v5.8a

TeamTalk 5 SDK v. 5.7a release, March 4th 2021

- New features in v5.7a
  - WebRTC Audio Preprocessor
  - Classroom support for channel text messages
  - Hidden channels
  - Client/Server peer verification for encryption
  - Jitter buffer for voice stream
  - Stream OPUS .ogg files on Windows
  - Multiple encryption contexts for TeamTalk server
- API changes in v5.7a

TeamTalk 5 SDK v. 5.6a release, August 9th 2020

- New features in v5.6a
  - Android sound device for enabling voice communication mode
  - Enable platform specific sound device effects
  - Specify sample rate and audio channels for shared sound device
  - Perform sound loopback test using audio preprocessor and sound device effects
  - Sound preprocessor selection
- API changes in v5.6a
  - Compatibility issue with TeamTalk v5.5 and previous

TeamTalk 5 SDK v. 5.5a release, April 13 2020

- New features in v5.5a
  - Shared audio input/output device
  - Playback media file
  - Control media file playback when
  - nTxIntervalMSec increased to 500 msec
  - OPUS codec frame size selection
  - Access muxed audio stream
  - Inject audio into channel (replace voice input)
  - Configure TCP and UDP keep alive properties
  - Record audio from multiple channels
  - Connect to encrypted TeamTalk Professional servers
  - TeamTalk 5 shared C-API library for Android
- API changes in v5.5a

TeamTalk 5 SDK v. 5.4a release, June 25th 2019

- New features in v5.4a
- API changes in v5.4a
- Bug fixes in v5.4a

TeamTalk 5 SDK v. 5.3b release, November 11th 2018

- API changes in v5.3b

TeamTalk 5 SDK v. 5.3a release, April 14th 2018

- API changes in v5.3a

TeamTalk 5 SDK v. 5.2d release, June 24th 2017

- Bugfixes in v5.2d

TeamTalk 5 SDK v. 5.2c release, May 8th 2017

- New features in v5.2c
  - Virtual sound device
  - Transmission queue in CHANNEL_SOLO_TRANSMIT
  - Server callbacks for TT_DoChangeNickname() and TT_DoChangeStatus()
  - OpenSSL again dynamically linked in Linux distributions
  - Daemon scripts included for TeamTalk servers
- API changes in v5.2c

TeamTalk 5 SDK v. 5.2b release, Jan 30th 2017

- API changes in v5.2b
  - Send text message from Server API
- Bugfixes in v5.2b

TeamTalk 5 SDK v. 5.2a release, January 8th 2017

- New features in v5.2a
  - TeamTalk Server API with System ID
  - Voice-Processing I/O Unit for iOS
  - Video4Linux2 (V4L2) support on Linux
  - AVFoundation replaces QTkit on Mac OS
  - Dependencies on Linux has been reduced
  - Sound Preprocessing (Automatic gain control) for iOS
  - TeamTalk for Android now uses Android Studio
  - Store audio in .ogg format
- API changes in v5.2a
  - Deadline for WebM video encoder
  - Get software client used by peer
  - Limit access to TeamTalk server to one software client
- Bugfixes in v5.2a

TeamTalk 5 SDK v. 5.1c release, February 29th 2016

- New features in v. 5.1c
- API changes in v. 5.1c

TeamTalk 5 SDK v. 5.1b release, October 3rd 2015

- New features in v. 5.1b
  - Record own voice stream to separate file
  - TeamTalk JNI DLL for Windows

TeamTalk 5 SDK v. 5.1a release, June 13th 2015

- New Features in v. 5.1a release
  - TeamTalk 5 Server API
  - TeamTalk 5 Java DLL
  - TeamTalk 5 SDK for iOS

TeamTalk 5 SDK v. 5.0a release, March 15th 2015

- New features in v. 5.0a
  - Updated event handling
  - WebM replaces Theora video codec
  - OPUS replaces CELT audio codec
  - AES encryption replaces Blowfish
  - New stream type for media files
  - User rights now moved to user account
  - Audio codec bitrate limit moved to user account
  - Max channels limited to 4000
  - Peer to peer support has been removed
  - Channels can be renamed
  - Daemon script for server included
  - Audio configuration no longer forced by channel
  - Default server config file renamed to tt5srv.xml
  - Server statistics updated
  - Non-encrypted mode in Professional server
- API changes in v. 5.0a
  - Structures
    - New structs:
    - Renamed/modified structs:
    - Removed structs
  - Enumerations
    - New enumerations
    - Renamed/modified enumerations
    - Removed enumerations:
  - Events
    - New events:
    - Renamed/modified events:
    - Removed events
  - Methods
    - New methods
    - Renamed/modified methods
    - Removed methods

TeamTalk 4 SDK v. 4.6b release, June 28th 2014

- New features in v. 4.6b

TeamTalk 4 SDK v. 4.6a release, February 20th 2014

- New features in v. 4.6a
  - Desktop Access
- API Changes in v4.6a

TeamTalk 4 SDK v. 4.5a release, May 12th 2013

- New features in v. 4.5a
  - Stream Media Files to Channel
  - Login Attempt Limit
  - Ban user by IP-address
- API Changes in v4.5a

TeamTalk 4 SDK v. 4.4a release, September 25th 2012

- New features in v. 4.4a
  - Support for Windows Audio Session
  - Restart Sound System
  - Automatic resampling of unsupported sample rates
  - Operator receive-only channel type
  - Encrypted client (Pro-Edition) can connect to non-encrypted servers
  - Unicode video device names
- API Changes in v4.4a

TeamTalk 4 SDK v. 4.3a release, March 18th 2012

- New features in v. 4.3a
  - Share Desktop Applications
  - Join channel after login
  - Automatically become channel operator
  - Custom message type
  - Query maximum UDP packet size
  - Access raw audio data
  - Get name of file being recorded to
  - Reset recorded audio file
  - See own video stream
  - Free-for-all option in classrooms
- API Changes in v4.3a

TeamTalk 4 SDK v. 4.2a release, November 1st 2011

- New features in v. 4.2a
  - Muxed audio files
  - Windows XP/Vista/7 Firewall
  - Modify "talking" delay
  - VBR audio codecs
  - CELT updated to version 0.11
  - IPv6 support (Windows 2000 no longer supported)
- API Changes in v4.2a

TeamTalk 4 SDK v. 4.1a release, October 30th 2010

- New Features in v. 4.1a
  - Mac OS X and Windows Mobile platforms
  - Echo Cancellation
  - Classroom channel-type
  - Channel based audio configuration
  - Server Statistics
  - Simpler video extraction
- API Changes in v4.1a

TeamTalk 4 SDK v. 4.0c release, March 7th 2010

- New Features in v. 4.0c
  - Note-field and user-data for user accounts
  - Get "my" User Account
  - Swap `HWND` for events
  - Extract all Users on the Server
- API Changes in v4.0c
- Bug fixes in v. 4.0c

TeamTalk 4 SDK v. 4.0a release, November 22nd 2009

- New Features in v. 4.0a
  - Video Capturing from WebCams
  - User Accounts
  - Track Command Completion
  - Improved P2P Connections
  - Support for CELT audio codec
- API Changes in v. 4.0a

# TeamTalk 5 SDK v. 5.22a release, April 8th 2026

## New features in v5.22a

### Windows client can now stream same formats as Linux and Mac

Windows client can now also stream AAC, Vorbis, etc.

## API changes in v5.22a

- New enum value `SERVERLOGEVENT_USER_CRYPTERROR` in ServerLogEvent
- New enum value `SERVERLOGEVENT_USER_NEW_STREAM` in ServerLogEvent
- Deprecated `nWaveDeviceID` in SoundDevice

# TeamTalk 5 SDK v. 5.19a release, August 5th 2025

## Bug fixes in v5.19a

TeamTalk server executable has fixed a security issue where a reused channel ID could give operator access to someone who previously had that channel ID.

# TeamTalk 5 SDK v. 5.18a release, May 5th 2025

## New features in v5.18a

### Last login time on user account

A UserAccount now contains a field `szLastLoginTime` which shows the last time a user logged in.

### WebRTC updated to r6818

WebRTC was previously based on r4332 but has now been updated to r6818. This has unfortunately caused the WebRTCAudioPreprocessor struct to become incompatible with the struct specified previous releases. Basically level estimation and voice detecting using WebRTC is no longer supported.

## API changes in v5.18a

- New field `szLastLoginTime` in UserAccount
- Removed field `voicedetetion` from WebRTCAudioPreprocessor
- Removed field `levelestimation` from WebRTCAudioPreprocessor
- Modified field `adaptivedigital` in WebRTCAudioPreprocessor

# TeamTalk 5 SDK v. 5.15a release, December 19th 2023

## New features in v5.15a

### PulseAudio support

PulseAudio sound system is now supported in the TeamTalk SDKs for Ubuntu 22 and Raspbian.

See also
  SOUNDSYSTEM_PULSEAUDIO.

### User right for sending text messages

It is now possible to disable the ability to send private and channel text messages using USERRIGHT_TEXTMESSAGE_USER and USERRIGHT_TEXTMESSAGE_CHANNEL.

## API changes in v5.15a

- New field `szOwner` in BannedUser
- New enum value `CMDERR_MAX_FILETRANSFERS_EXCEEDED` in ClientError
- New enum value `__SOUNDDEVICEEFFECTS` in TTType
- New enum value `__DESKTOPWINDOW` in TTType
- New enum value `__ABUSEPREVENTION` in TTType
- New enum value `SOUNDSYSTEM_PULSEAUDIO` in SoundSystem
- New enum value `AFF_MP3_320KBIT_FORMAT` in AudioFileFormat
- New enum value `USERRIGHT_TEXTMESSAGE_USER` in UserRight
- New enum value `USERRIGHT_TEXTMESSAGE_CHANNEL` in UserRight

# TeamTalk 5 SDK v. 5.14a release, August 16th 2023

## New features in v5.14a

### Time Out Timer for Voice and Media Streams

The maximum duration (in milliseconds) for a voice or media stream to be active can now be specified in Channel fields `nTimeOutTimerVoiceMSec` and `nTimeOutTimerMediaFileMSec`. This can be used to ensure that a single user does not block voice transmission to a channel when e.g. using CHANNEL_SOLO_TRANSMIT.

## API changes in v5.14a

- New field `nTimeOutTimerVoiceMSec` in Channel
- New field `nTimeOutTimerMediaFileMSec` in Channel

# TeamTalk 5 SDK v. 5.13a release, May 8th 2023

## New features in v5.13a

### Event for encrypted connection errors

If the TeamTalk client fails to connect using an encrypted connection the event CLIENTEVENT_CON_CRYPT_ERROR is posted. The error will include an OpenSSL error code and text message regarding what failed.

### Events for user account added/removed

If a user of type USERTYPE_ADMIN adds a new UserAccount then the event CLIENTEVENT_CMD_USERACCOUNT_NEW is posted. If a UserAccount is deleted the event CLIENTEVENT_CMD_USERACCOUNT_REMOVE is posted.

### Encrypted client connect is no longer blocking

The call to TT_Connect() is no longer a blocking call when using encryption.

### Events for changes to sound device

On Windows the following new SoundDevice related events are posted:

- CLIENTEVENT_SOUNDDEVICE_ADDED
- CLIENTEVENT_SOUNDDEVICE_REMOVED
- CLIENTEVENT_SOUNDDEVICE_UNPLUGGED
- CLIENTEVENT_SOUNDDEVICE_NEW_DEFAULT_INPUT
- CLIENTEVENT_SOUNDDEVICE_NEW_DEFAULT_OUTPUT
- CLIENTEVENT_SOUNDDEVICE_NEW_DEFAULT_INPUT_COMDEVICE
- CLIENTEVENT_SOUNDDEVICE_NEW_DEFAULT_OUTPUT_COMDEVICE

## API change in v5.13a

- New enum value CLIENTEVENT_CON_CRYPT_ERROR
- New enum value CLIENTEVENT_CMD_USERACCOUNT_NEW
- New enum value CLIENTEVENT_CMD_USERACCOUNT_REMOVE
- New enum value CLIENTEVENT_SOUNDDEVICE_ADDED
- New enum value CLIENTEVENT_SOUNDDEVICE_REMOVED
- New enum value CLIENTEVENT_SOUNDDEVICE_UNPLUGGED
- New enum value CLIENTEVENT_SOUNDDEVICE_NEW_DEFAULT_INPUT
- New enum value CLIENTEVENT_SOUNDDEVICE_NEW_DEFAULT_OUTPUT
- New enum value CLIENTEVENT_SOUNDDEVICE_NEW_DEFAULT_INPUT_COMDEVICE
- New enum value CLIENTEVENT_SOUNDDEVICE_NEW_DEFAULT_OUTPUT_COMDEVICE
- New field `sounddevice` in TTMessage

# TeamTalk 5 SDK v. 5.12a release, December 21st 2022

## Bug Fixes in v5.12a

This release fixes a crash issue in the TeamTalk server when a user performs a channel ban on a user who is not in a channel.

# TeamTalk 5 SDK v. 5.11a release, October 2nd 2022

## New features in v5.11a

Here's the list of new features in TeamTalk SDK v5.11a:

- TeamTalk server restores classroom transmissions
- Standard Edition TeamTalk server (tt5srv) no longer depend on OpenSSL
- Professional Edition TeamTalk server (tt5prosrv) requires BearWare.dk WebLogin authentication to run
- Subscription changes are written to server's log file
- Password of operators are forwarded to operators and administrators
- Auto-operators can update channels they're not currently participating in
- Channel operator status is resumed after connection lost when using BearWare.dk WebLogin
- TeamTalk SDK now targets Ubuntu 22 instead of Ubuntu 18

## Bug Fixes in v5.11a

Here's the list of bug fixes in TeamTalk SDK v5.11a:

- Fixed issue where channel bans were no longer valid after channel is renamed
- Fixed time zone conversion in TeamTalk server when time zone is before UTC.

## API change in v5.11a

- New enum value MSGTYPE_NONE.

# TeamTalk 5 SDK v. 5.9a release, April 2nd 2022

## New features in v5.9a

### Configurable server logging

It's now possible to change log levels while the TeamTalk server is running. Setup `uServerLogEvents` in ServerProperties and issue TT_DoUpdateServer(). `uServerLogEvents` is based on ServerLogEvent.

### Create combined TextMessage

TextMessage is limited to 511 characters but now it's possible to specify `bMore` on TextMessage to denote that a text message is part of a combined message.

### Configurable delay in queued conversations (solo transmit)

A CHANNEL_SOLO_TRANSMIT Channel automatically switched to the next user after 500 msec of inactivity. This delay is now configurable using `nTransmitUsersQueueDelayMSec` on Channel.

## API change in v5.9a

- New enum ServerLogEvents
- New field `uServerLogEvents` in ServerProperties
- New field `bMore` in TextMessage
- New field `nTransmitUsersQueueDelayMSec` in Channel

# TeamTalk 5 SDK v. 5.8b release, September 7th 2021

## New features in v5.8b

### Timestamp on UserAccount-struct

UserAccount now includes a property that shows when it was last modified.

### Timestamp on RemoteFile-struct

RemoteFile now includes a property that shows when it was uploaded.

## API change in v5.8b

- New field `szLastModified` on UserAccount struct.
- New field `szUploadTime` on RemoteFile struct

# TeamTalk 5 SDK v. 5.8a release, June 24th 2021

## New features in v5.8a

### Store audio from multiple stream types

Previously it was only possible to store audio from STREAMTYPE_VOICE to either a file or AudioBlock. In TeamTalk v5.8a it's now possible to have the TeamTalk instance mix several stream types into a single audio stream.

To record multiple audio streams, i.e. STREAMTYPE_VOICE, STREAMTYPE_LOCALMEDIAPLAYBACK_AUDIO and STREAMTYPE_MEDIAFILE_AUDIO, use TT_StartRecordingMuxedStreams(). The StreamTypes can be OR'ed to mix the wanted combination.

To retrieve AudioBlock with mixed audio use TT_EnableAudioBlockEvent() or TT_EnableAudioBlockEventEx().

## API change in v5.8a

- New enum value STREAMTYPE_LOCALMEDIAPLAYBACK_AUDIO for TT_InitLocalPlayback() playback.
- New field `uStreamTypes` on AudioBlock denoting which streams were mixed into the AudioBlock.
- New function TT_StartRecordingMuxedStreams() to record multiple StreamTypes to a single file.

# TeamTalk 5 SDK v. 5.7a release, March 4th 2021

## New features in v5.7a

### WebRTC Audio Preprocessor

Previously SpeexDSP was the only support audio preprocessor for noise suppression, echo cancellation and automatic gain control (AGC). In TeamTalk v5.7 it's now possible to use WebRTC's audio preprocessor which work significantly better than the echo cancellor in SpeexDSP and platform echo cancellors supported through SOUNDDEVICEFEATURE_AEC.

Read more about WebRTC's audio preprocessor using the WebRTCAudioPreprocessor struct.

### Classroom support for channel text messages

Previously it was only possible to control STREAMTYPE_VOICE, STREAMTYPE_MEDIAFILE, STREAMTYPE_VIDEOCAPTURE and STREAMTYPE_DESKTOP in a classroom using `transmitUsers` on Channel struct. Now STREAMTYPE_CHANNELMSG has been added so it's also possible to enable/disable channel text messages sent through TT_DoTextMessage().

### Hidden channels

A new channel type CHANNEL_HIDDEN has been introduced which makes a channel invisible to users who do not have USERRIGHT_VIEW_HIDDEN_CHANNELS. Users who cannot see the channel are still able to join it given that they know its name and password. Only users with USERRIGHT_MODIFY_CHANNELS are able to create hidden channels.

Use TT_DoMakeChannel() or TT_DoJoinChannel() to create a hidden channel.

### Client/Server peer verification for encryption

Both client and server are now able to verify that the remote end is a valid user using TLS peer verification. Peer verfication is set up in EncryptionContext and enable using TT_SetEncryptionContext() on the client and TTS_SetEncryptionContext() on the server.

### Jitter buffer for voice stream

Compensation for network jitter can now be enabled using JitterConfig and activated using TT_SetUserJitterControl(). The jitter configuration allows a buffer to build up before playback starts. Remember to also increase the allowed buffer size by calling TT_SetUserAudioStreamBufferSize().

### Stream OPUS .ogg files on Windows

TT_StartStreamingMediaFileToChannel() now support OPUS .ogg files on Windows. This allows playback of files recorded using TT_SetUserMediaStorageDir() or TT_StartRecordingMuxedAudioFile().

### Multiple encryption contexts for TeamTalk server

Previously it was only possible to set one EncryptionContext for all TeamTalk server instance, i.e. TTSInstance, but now each server instance can have its own by calling TTS_SetEncryptionContext().

## API changes in v5.7a

- New enum value SOUNDDEVICEFEATURE_DEFAULTCOMDEVICE to denote default communication device on Windows.
- New struct WebRTCAudioPreprocessor for configurating WebRTC audio preprocessor.
- New enum value WEBRTC_AUDIOPREPROCESSOR for WebRTCAudioPreprocessor.
- New field `webrtc` in AudioPreprocessor for WebRTCAudioPreprocessor.
- New enum value STREAMTYPE_CHANNELMSG for enable/disabling channel text messages.
- New enum value CHANNEL_HIDDEN for creating hidden channels. See Hidden channels.
- New enum value USERRIGHT_VIEW_HIDDEN_CHANNELS for allowing a user to view channels of type CHANNEL_HIDDEN.
- New field `nSoundInputDeviceDelayMSec` in ClientStatistics for showing audio device delay.
- New enum value CMDERR_CHANNEL_CANNOT_BE_HIDDEN for given error when a channel cannot be hidden.
- New enum value CLIENTEVENT_USER_FIRSTVOICESTREAMPACKET for sending event when new voice stream starts.
- New struct JitterConfig for configuring network jitter compensation. See Jitter buffer for voice stream.
- New function TT_SetUserJitterControl() for enabling JitterConfig on a User.
- New function TT_GetUserJitterControl() for retrieving JitterConfig on a User.
- New variable `%starttick%` for audio file names. See TT_SetUserMediaStorageDir().
- New function TT_SetUserMediaStorageDirEx() for configuring when an audio log should be closed.
- New struct EncryptionContext for setting up peer verification. See Multiple encryption contexts for TeamTalk server.
- New function TT_SetEncryptionContext() for setting up peer verification.
- New function TTS_SetEncryptionContextEx() for setting up peer verification on a server.

# TeamTalk 5 SDK v. 5.6a release, August 9th 2020

## New features in v5.6a

### Android sound device for enabling voice communication mode

A new SoundDevice will appear on Android when calling TT_GetSoundDevices(). This sound device behaves the same as calling Android Java class android.media.AudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION).

### Enable platform specific sound device effects

Most platforms today come with their own way of toggling effects on a sound device. Examples of this are echo cancellation, automatic gain control (AGC), noise suppression, 3D sound positioning.

SoundDevice now has a new property called `uSoundDeviceFeatures` which tells what features can be enabled on the sound device. Currently the list of SoundDeviceFeature includes:

- SOUNDDEVICEFEATURE_AEC
  - This feature is currently available on Android and on Windows when using SOUNDSYSTEM_WASAPI.
  - Enable this feature using TT_SetSoundDeviceEffects()
- SOUNDDEVICEFEATURE_AGC
  - This feature is currently available on Android and on Windows when using SOUNDSYSTEM_WASAPI.
  - Enable this feature using TT_SetSoundDeviceEffects()
- SOUNDDEVICEFEATURE_DENOISE
  - This feature is currently available on Android and on Windows when using SOUNDSYSTEM_WASAPI.
  - Enable this feature using TT_SetSoundDeviceEffects()
- SOUNDDEVICEFEATURE_3DPOSITION
  - This feature is currently available on Windows when using SOUNDSYSTEM_DSOUND.
  - Enable this feature using TT_SetUserPosition()
- SOUNDDEVICEFEATURE_DUPLEXMODE
  - Enable this feature using TT_InitSoundDuplexDevices()

TT_SetSoundDeviceEffects() is a new function in TeamTalk v5.6 which can be used for enabling AGC, AEC and denoising on Windows and Android.

### Specify sample rate and audio channels for shared sound device

When TT_SOUNDDEVICE_ID_SHARED_FLAG was introduced the shared sound device would default to a sample rate of 48000 and stereo.

Now it's possible to manually specify the sample rate and number of audio channels using TT_InitSoundInputSharedDevice() and TT_InitSoundOutputSharedDevice().

### Perform sound loopback test using audio preprocessor and sound device effects

When AudioPreprocessor was introduced it could not be used when performing a loopback test. This is now possible using TT_StartSoundLoopbackTestEx().

### Sound preprocessor selection

Previously only SpeexDSP was available as AudioPreprocessor but now others can be chosing using TT_SetSoundInputPreprocessEx().

## API changes in v5.6a

- New macro SOUNDSYSTEM_AUDIOUNIT_IOS to emphasize AudioUnit for iOS. SOUNDSYSTEM_COREAUDIO actually also uses AudioUnit.
- New enumeration SoundDeviceFeature for listing features that are provided by a SoundDevice. See `uSoundDeviceFeatures` on SoundDevice.
- New property `nWaveDeviceID` on SoundDevice on non-Windows platforms. Previously this property was only shown on Windows but now it's shown on all platform. The reason for this is to have a common structure available for Python integration.
  - Note that this change actually breaks binary compatiblity with TeamTalk v5.5 and previous versions. See Compatibility issue with TeamTalk v5.5 and previous.
- New property `uSoundDeviceFeatures` on SoundDevice for showing features available when setting up a sound device.
- New structure SoundDeviceEffects for enabling specific effects on a sound device prior to initialization, e.g. echo cancellation.
- Modified macro TT_SOUNDDEVICE_ID_VOICEPREPROCESSINGIO to include TT_SOUNDDEVICE_ID_SHARED_FLAG. Previously the iOS sound device that does voice preprocessing actually ran in its own shared device. However, with the introduction of TT_SOUNDDEVICE_ID_SHARED_FLAG in TeamTalk v5.5 it is simpler for iOS to use the same shared device property as on Android.
  - Note that this change actually breaks binary compatiblity with TeamTalk v5.5 and previous versions. See Compatibility issue with TeamTalk v5.5 and previous.
- New macro TT_SOUNDDEVICE_ID_OPENSLES_VOICECOM for selecting a SoundDevice that uses Android OpenSL ES voice communication mode.
- New macro TT_LOCAL_TX_USERID for only getting audio during voice transmission when using TT_EnableAudioBlockEvent().
- Added INTERR_AUDIOPREPROCESSOR_INIT_FAILED to ClientError.
- Added INTERR_SNDEFFECT_FAILURE to ClientError.
- New function TT_StartSoundLoopbackTestEx() for testing a SoundDevice with AudioPreprocessor and SoundDeviceEffects.
- New function TT_InitSoundInputSharedDevice() for specifying sample rate, frame size and mono/stereo of the input SoundDevice that has been initialized with TT_SOUNDDEVICE_ID_SHARED_FLAG.
- New function TT_InitSoundOutputSharedDevice() for specifying sample rate, frame size and mono/stereo of the output SoundDevice that has been initialized with TT_SOUNDDEVICE_ID_SHARED_FLAG.
- New function TT_SetSoundDeviceEffects() for enabling SoundDeviceEffects on a client instance prior to initialization of the SoundDevice.
- New function TT_GetSoundDeviceEffects() for getting the SoundDeviceEffects on a client instance.
- New function TT_SetSoundInputPreprocessEx() for selecting an AudioPreprocessor instead of only SpeexDSP in TT_SetSoundInputPreprocess().
- New function TT_GetSoundInputPreprocessEx() for getting the active AudioPreprocessor.
- New function TT_EnableAudioBlockEventEx() for requesting AudioBlock with the specified AudioFormat.

### Compatibility issue with TeamTalk v5.5 and previous

All platforms now include the property `nWaveDeviceID` on SoundDevice. Previously this property was only shown on Windows but now it's shown on all platform. This means the byte offset of `bSupports3D` and onwards have changed in the SoundDevice structure. The reason for this is to have a common structure available for Python integration.

Value of TT_SOUNDDEVICE_ID_VOICEPREPROCESSINGIO has been changed to include TT_SOUNDDEVICE_ID_SHARED_FLAG. Previously the iOS sound device that does voice preprocessing actually ran in its own shared device. However, with the introduction of TT_SOUNDDEVICE_ID_SHARED_FLAG in TeamTalk v5.5 it is simpler for iOS to use the same shared device property as on Android. Therefore ensure that TT_InitSoundInputDevice() and TT_InitSoundOutputDevice() is not called with 1 instead of the value of TT_SOUNDDEVICE_ID_VOICEPREPROCESSINGIO.

# TeamTalk 5 SDK v. 5.5a release, April 13 2020

## New features in v5.5a

### Shared audio input/output device

Previously the Android platform only supported one active sound input device. This meant that only one TeamTalk instance could be used on Android.

With the introduction of shared audio device it's now possible for multiple TeamTalk instances to share the same audio input device.

Also for playback the TeamTalk instance can use a shared sound device so playback is not limited to few simultaneous users talking at the same time.

The shared audio device on Android is same as TT_SOUNDDEVICE_ID_OPENSLES_DEFAULT but or'ed with the flag TT_SOUNDDEVICE_ID_SHARED_FLAG. The sound device ID flag TT_SOUNDDEVICE_ID_SHARED_FLAG tells the TeamTalk instance to create a shared audio device which distributes its audio to all other client instances.

The shared audio device which is created runs at the audio device's highest sample rate and highest number of channels. Each client which receives the audio from the shared audio device resamples the audio data to its own format. This is a CPU intensive task, so many clients at different sample rates uses more CPU. It is therefore recommended that clients which use this feature all use channels that has the same audio codec settings. Preferably `nDefaultSampleRate` and `nMaxInputChannels` and `nMaxOutputChannels` of the chosen SoundDevice.

To initialize a shared audio input device call like this:

      TT_InitSoundInputDevice(ttInst, inputid | TT_SOUNDDEVICE_ID_SHARED_FLAG);

To initialize a shared audio output device call like this:

      TT_InitSoundInputDevice(ttInst, outputid | TT_SOUNDDEVICE_ID_SHARED_FLAG);

### Playback media file

Media files can now be played using the TeamTalk instance configured sound output device. Call TT_InitLocalPlayback() to playback a media file.

Prior to playback it's possible to set specify an offset using MediaFilePlayback and setup an AudioPreprocessor.

While the media file is playing it's possible to use TT_UpdateLocalPlayback() to change the media stream's properties. The progress of the media file playback can be monitor through CLIENTEVENT_LOCAL_MEDIAFILE.

Stop local media file playback using TT_StopLocalPlayback().

### Control media file playback when

streaming to channel

When streaming media files to a channel it's now possible to specify an AudioPreprocessor to change the audio stream of the media file.

A new audio TTAudioPreprocessor is introduced with can mute left/right audio channel and change gain level.

It's also possible to change the offset and pause the media file using TT_UpdateStreamingMediaFileToChannel() and MediaFilePlayback.

To use these new features use TT_StartStreamingMediaFileToChannelEx() instead of TT_StartStreamingMediaFileToChannel().

### nTxIntervalMSec increased to 500 msec

Previously the maximum transmit interval was limited to 100 msec. With OpusCodec's introduction of 120 msec frame sizes the transmit interval has been increased to 500 msec.

### OPUS codec frame size selection

OPUS v1.3 introduced additional frame sizes, i.e. 80, 100 and 120 msec. These frame sizes can now be set using the `nFrameSizeMSec` property of OpusCodec.

### Access muxed audio stream

Previously TT_EnableAudioBlockEvent() could only be used to access audio from a single user. Using TT_MUXED_USERID now makes it possible to access the audio stream where all users' audio streams have been mixed together. Basically the same as recording all conversations to a single file using TT_StartRecordingMuxedAudioFile().

### Inject audio into channel (replace voice input)

The STREAMTYPE_VOICE could previously only come from the configured SoundDevice passed to TT_InitSoundInputDevice(). Now it's possible to replace the, typically microphone, audio input with a custom audio stream by passing raw audio in AudioBlock to TT_InsertAudioBlock().

The audio input must be passed continuesly to TT_InsertAudioBlock() to keep the input going. Use event CLIENTEVENT_AUDIOINPUT to monitor progress. The AudioInputProgress struct hold information about the queue sizes/progress.

### Configure TCP and UDP keep alive properties

How often "keep alive" information should be sent depend on the type of network where the TeamTalk client is deployed. Previously the TCP and UDP keep alive settings have been controlled entirely by the TeamTalk client instance.

Now it's possible to configure the keep alive properties using ClientKeepAlive struct and functions TT_SetClientKeepAlive() and TT_GetClientKeepAlive().

### Record audio from multiple channels

Previously it was only possible to have one active audio recording using TT_StartRecordingMuxedAudioFile().

Now it's possible to record multiple channels at the same time using TT_StartRecordingMuxedAudioFileEx(). Note that in order to get audio from channels where the TeamTalk instance is currently not participating requires the use of TT_DoSubscribe() and SUBSCRIBE_INTERCEPT_VOICE.

### Connect to encrypted TeamTalk Professional servers

The TeamTalk 5 SDK Standard Edition could only connect to unencrypted TeamTalk servers, but now it's also possible to connect to encrypted servers. The TeamTalk server in TeamTalk 5 SDK, however, still cannot run in encrypted mode.

### TeamTalk 5 shared C-API library for Android

Previously the Android platform only included a shared library for Java Native Interface (JNI). But now it's also possible to use a shared library like other platforms.

## API changes in v5.5a

- New macro TT_SOUNDDEVICE_ID_SHARED_FLAG for shared sound input device.
  - See Shared audio input/output device.
- New macro TT_MUXED_USERID for TT_EnableAudioBlockEvent().
  - See Access muxed audio stream.
- New macro TT_LOCAL_USERID for TT_EnableAudioBlockEvent()
  - See Access muxed audio stream.
- New functions TT_SetClientKeepAlive() and TT_GetClientKeepAlive() for keep alive properties.
  - See Configure TCP and UDP keep alive properties.
- New property `nFrameSizeMSec` for OpusCodec.
  - See OPUS codec frame size selection.
- New macro OPUS_MIN_FRAMESIZE for minimum OPUS frame size.
  - See OPUS codec frame size selection and nTxIntervalMSec increased to 500 msec.
- New macro OPUS_MAX_FRAMESIZE for maximum OPUS frame size (OPUS before v1.3)
  - See OPUS codec frame size selection and nTxIntervalMSec increased to 500 msec.
- New macro OPUS_REALMAX_FRAMESIZE for maximum OPUS frame size in OPUS v1.3 and onwards.
  - See OPUS codec frame size selection and nTxIntervalMSec increased to 500 msec.
- New functions TT_InitLocalPlayback(), TT_UpdateLocalPlayback() and TT_StopLocalPlayback() for local media playback.
  - See Playback media file.
- New enumeration values MFS_PAUSED MFS_PLAYING for MediaFileStatus used by CLIENTEVENT_LOCAL_MEDIAFILE and CLIENTEVENT_STREAM_MEDIAFILE.
  - See Playback media file and Control media file playback when.
- New enumeration value CLIENTEVENT_LOCAL_MEDIAFILE for monitoring progress of local media playback.
  - See Playback media file.
- New enumeration AudioPreprocessorType for audio preprocessor selection.
  - See Playback media file and Control media file playback when.
- New AudioPreprocessor struct for configured audio preprocessor.
  - See Playback media file and Control media file playback when.
- New TTAudioPreprocessor struct for TT_InitLocalPlayback() or TT_StartStreamingMediaFileToChannelEx().
  - See Playback media file and Control media file playback when.
- New function TT_StartStreamingMediaFileToChannelEx() for streaming media file.
  - See Control media file playback when.
- New function TT_UpdateStreamingMediaFileToChannel() for updating an active media file.
  - See Control media file playback when.
- New MediaFilePlayback struct for media file streaming or playback.
  - See Playback media file and Control media file playback when.
- New AudioInputProgress struct for monitoring progress when injecting audio.
  - See Inject audio into channel (replace voice input).
- New enumeration value CLIENTEVENT_AUDIOINPUT for monitoring progress when injecting audio.
  - See Inject audio into channel (replace voice input).
- New function TT_InsertAudioBlock() for injecting audio which replaces microphone input.
  - See Inject audio into channel (replace voice input).
- New function TT_StartRecordingMuxedAudioFileEx() for recording audio from channel.
  - See Record audio from multiple channels.
- New function TT_StopRecordingMuxedAudioFileEx() for stopping recording audio from channel.
  - See Record audio from multiple channels.
- New function TT_DBG_WriteAudioFileTone() for generating audio media file.

# TeamTalk 5 SDK v. 5.4a release, June 25th 2019

## New features in v5.4a

TeamTalk SDKs for Android now comes with a TeamTalk JNI library for 64-bit ARM and 32-bit Intel x86. Required API level is now 21 (Android 5.0).

TeamTalk SDKs for Windows now uses Microsoft Media Foundation instead of DirectShow when streaming media files and capturing from video cameras. This means that Windows 10 users can now stream from HTTP and HTTPS.

TeamTalk SDK Standard Edition can now connect to encrypted TeamTalk servers. Running an encrypted TeamTalk server, however, still requires TeamTalk SDK Professional Edition.

TeamTalk SDK Standard Edition can now stream HTTPS on macOS, Android and Linux.

TeamTalk SDK Standard Edition now requires libssl dependency (OpenSSL).

OPUS_CODEC upgraded to v1.3 on all platforms.

Record in MP3 format when using TT_SetUserMediaStorageDir() and TT_StartRecordingMuxedAudioFile().

## API changes in v5.4a

- Added `nLoginDelayMSec` to ServerProperties
- Added `szAccessToken` to ServerProperties

## Bug fixes in v5.4a

Fixed DesktopInput not being received in encrypted mode.

# TeamTalk 5 SDK v. 5.3b release, November 11th 2018

## API changes in v5.3b

The `transmitUsers` array of Channel now also applies to CHANNEL_DEFAULT but unlike a channel of type CHANNEL_CLASSROOM the `transmitUsers` array contains the user ID of those who cannot talk. Basically the opposite of classrooms.

The following new macros have been introduced to access the `transmitUsers` array:

- TT_CLASSROOM_USERID_INDEX
- TT_CLASSROOM_STREAMTYPE_INDEX
- TT_TRANSMITUSERS_FREEFORALL
- TT_TRANSMITUSERS_USERID_INDEX
- TT_TRANSMITUSERS_STREAMTYPE_INDEX

StreamType enumeration now contains:

- STREAMTYPE_MEDIAFILE
- STREAMTYPE_CLASSROOM_ALL

UserRight enumeration now contains:

- USERRIGHT_RECORD_VOICE
- USERRIGHT_TRANSMIT_MEDIAFILE

# TeamTalk 5 SDK v. 5.3a release, April 14th 2018

## API changes in v5.3a

- Added UserRight to lock nickname: USERRIGHT_LOCKED_NICKNAME.
- Added UserRight to lock status: USERRIGHT_LOCKED_STATUS.
- New BanType enumeration to support new ban types on channel and username.
- Added `uBanTypes` to BannedUser.
- New AbusePrevention structure to UserAccount to prevent flooding.
- Added `abusePrevent` to UserAccount.
- Added ClientError to indicate flooding: CMDERR_COMMAND_FLOOD
- Added ClientError to indicate channel ban: CMDERR_CHANNEL_BANNED
- Added ClientError to indicate login service unavailable: CMDERR_LOGINSERVICE_UNAVAILABLE.
  - Used for Facebook login in TeamTalk application
- New function TT_DoBanUserEx() for banning a user using BanType.
- New function TT_DoBan() for banning properties, i.e. BannedUser.
  - User doesn't have to be logged in to issue this ban.
- New function TT_DoUnBanUserEx() for removing a bans.

# TeamTalk 5 SDK v. 5.2d release, June 24th 2017

## Bugfixes in v5.2d

Fixed severe crash issue when audio streams are stopped. Crash was due to a race condition which occurs in rare cases.

# TeamTalk 5 SDK v. 5.2c release, May 8th 2017

## New features in v5.2c

### Virtual sound device

In order to record conversations using TT_StartRecordingMuxedAudioFile() it has previously been required to initialize a real sound output device in order to process audio packets. It is still required to initialize the sound output device but now a new virtual sound device is available which processes audio packets. This virtual sound device has ID TT_SOUNDDEVICE_ID_TEAMTALK_VIRTUAL.

### Transmission queue in CHANNEL_SOLO_TRANSMIT

A new feature of the CHANNEL_SOLO_TRANSMIT channel type is that the server ensures that only one user can transmit audio and media files to the channel. The user's position in the transmission queue can be seen in Channel's `transmitUsersQueue` array.

### Server callbacks for TT_DoChangeNickname() and TT_DoChangeStatus()

The server API can now intercept when a user requests to change nickname or change status. This is done by calling TTS_RegisterUserChangeNicknameCallback() and TTS_RegisterUserChangeStatusCallback().

### OpenSSL again dynamically linked in Linux distributions

The TeamTalk SDK v5.2b introduced static linking of all dependencies in libTeamTalk5Pro.so but this caused problems when linking an application that already included an OpenSSL dependency. Therefore the Linux distributions now again requires that the user installs the required OpenSSL dependency. To see what OpenSSL dependency is missing run:

      $ ldd Library/TeamTalk_DLL/libTeamTalk5Pro.so

### Daemon scripts included for TeamTalk servers

The SDK's `Server` folder now includes daemon scripts for Debian (`/etc/init`.d) and systemd based Linux distributions.

## API changes in v5.2c

- Added macro for virtual sound device TT_SOUNDDEVICE_ID_TEAMTALK_VIRTUAL.
- New member variable `transmitUsersQueue` of Channel struct.
- Added macro for size of transmissionUsersQueue TT_TRANSMITQUEUE_MAX.
- Added server callback TTS_RegisterUserChangeNicknameCallback()
- Added server callback TTS_RegisterUserChangeStatusCallback()

# TeamTalk 5 SDK v. 5.2b release, Jan 30th 2017

## API changes in v5.2b

### Send text message from Server API

Added TTS_SendTextMessage() to TeamTalk Server API.

## Bugfixes in v5.2b

- Fixed severe issue causing audio playback not to start if client received bursts of audio packets (the client has a 1 second buffer which would overflow and not restart).
- Fixed `nChannelID` not being set in User struct when using TeamTalk Server API.

# TeamTalk 5 SDK v. 5.2a release, January 8th 2017

## New features in v5.2a

### TeamTalk Server API with System ID

The server API has been updated in this release so it's possible to restrict logins to your TeamTalk server to only your own client application. If the "normal" TeamTalk client tries to connect to your TeamTalk server then it will be possible to reject it.

To limit access to your TeamTalk server you can use the `szSystemID` parameter of TT_StartServerSysID(). When a client has to connect then the chosen system-ID will also have to passed to TT_ConnectSysID(). If it's not then the connecting TeamTalk client will receive the CMDERR_INCOMPATIBLE_PROTOCOLS. The szSystemID of the default TeamTalk application is "teamtalk". This is what you see when you connect with Telnet on port TCP port 10333 (non-encrypted).

On top of the system-ID restriction it's now also possible to do a check on the client name connecting by using the extended TT_DoLoginEx(). When a client tries to connect to a TeamTalk server you can then check the `szClientName` property of User to ensure only your client application is allowed to connect.

### Voice-Processing I/O Unit for iOS

Audio device "Voice-Processing I/O Unit" added as sound device ID 1 on iOS. The Voice-Processing I/O Unit sound device is designed to eliminate echo when using speaker output and also enable automatic gain control. Read more on audio units here: https://developer.apple.com/library/ios/documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/UsingSpecificAudioUnits/UsingSpecificAudioUnits.html

### Video4Linux2 (V4L2) support on Linux

The video capture API on Linux has been updated to it now uses V4L2 instead of the obsolete V4L API.

### AVFoundation replaces QTkit on Mac OS

The previously used video capture API, QTkit, on Mac OS has been replaced by AVFoundation. Apple's AppStore doesn't accept apps which link to QTkit, so therefore this replacement was nescessary.

### Dependencies on Linux has been reduced

Previous releases of TeamTalk 5 shared library depended on WebM (libvpx), Speex (libspeex), OPUS (libopus), etc. Now this has been limited to C++ standard library (libstdc++) and ALSA (libasound).

### Sound Preprocessing (Automatic gain control) for iOS

The Speex sound preprocessing library (SpeexDSP) is now also supported on iOS platforms.

The SpeexDSP struct is used by TT_SetSoundInputPreprocess() and TT_StartSoundLoopbackTest().

### TeamTalk for Android now uses Android Studio

Previously the TeamTalk sample application (TeamTalkAndroid) was using Eclipse but this project has now been converted to Android Studio 2.0.

### Store audio in .ogg format

When storing audio to files it's now possible to specify AFF_CHANNELCODEC_FORMAT which is part of the enumeration AudioFileFormat. The AFF_CHANNELCODEC_FORMAT will store in the audio format configured by a Channel's AudioCodec.

## API changes in v5.2a

### Deadline for WebM video encoder

Added `nEncodeDeadline` to WebMVP8Codec which specifies quality of the video encoder. Values are WEBM_VPX_DL_REALTIME, WEBM_VPX_DL_GOOD_QUALITY and WEBM_VPX_DL_BEST_QUALITY.

### Get software client used by peer

Added `szClientName` to User struct. The client name is specified in TT_DoLoginEx().

### Limit access to TeamTalk server to one software client

If using TeamTalk 5 SDK Professional then a System-ID can be used to limit access to the TeamTalk server to a single client application.

Use the TeamTalk server API to setup a server with a System-ID, i.e. TTS_StartServerSysID() and then use TT_ConnectSysID().

## Bugfixes in v5.2a

- Stream media files was slow to start.
- Streaming media file from Windows caused bottom-up bitmap image.
- Fixed file handle being leaked on Windows during desktop transmission.
- Fixed corrupt .wav file if file greater than 4GB.
- Fixed Bluetooth not working on iOS 10 and later.

# TeamTalk 5 SDK v. 5.1c release, February 29th 2016

The TeamTalk C-API DLL has been moved to `Library/TeamTalk_DLL` The TeamTalk .NET DLL project has been moved to `Library/TeamTalk.NET`. The TeamTalk JNI DLL has been moved to `Library/TeamTalkJNI`.

This file layout change has been made so the projects are more aligned with TeamTalk 5 on GitHub.

TeamTalk 5 for iOS application (TeamTalk for iOS (iTeamTalk)) from App Store now included with TeamTalk 5 SDKs for iOS.

TeamTalk 5 Professional SDK now includes TeamTalk 5 Java server sample application (jTeamTalkServer).

## New features in v. 5.1c

TeamTalk 5 iOS SDKs can now be compiled with "Enable Bitcode" (`-fembed-bitcode`).

## API changes in v. 5.1c

Sound device 1 (speaker output) removed from TeamTalk iOS SDK when calling TeamTalk.GetSoundDevices(). Instead use iOS's function `AVAudioSession.setMode()`.

Server API callback UserCreateUserAccountCallback changed so UserAccount is const.

- Added function TT_PumpMessage() for getting latest User state.
- Added function TTS_StopServer() for closing network sockets.
- Added function TTS_SetChannelFilesRoot() for server files storage.
- Added function TTS_AddFileToChannel() for adding files to server.
- Added function TTS_RemoveFileFromChannel() for removeing files from server.

# TeamTalk 5 SDK v. 5.1b release, October 3rd 2015

A quite severe bug which caused files on the server to end up in the wrong channels has been fixed in this minor release. The issue only affects the standalone servers which are included in the SDK. Custom servers created by the TeamTalk server API should not be affected.

## New features in v. 5.1b

### Record own voice stream to separate file

Previously it has only been possible to record own audio streams by subscribing to them. Now it's, however, possible to call TT_SetUserMediaStorageDir() with user ID 0 to record own audio stream.

### TeamTalk JNI DLL for Windows

Windows developers can now also use Java for client development. The TeamTalk JNI DLL is located in `Library/Java/TeamTalkJNI`.

# TeamTalk 5 SDK v. 5.1a release, June 13th 2015

The inclusion of the TeamTalk Server API has caused quite a bit of reorganization of the TeamTalk SDK's file layout. Previously the TeamTalk DLL only allowed client operations and was therefore located in the `Client` folder. Now that the TeamTalk DLL (in the Professional edition) also allows users to develop a TeamTalk server then the core TeamTalk library projects have been moved to the `Library` folder in the root of the SDK.

       Library
         C-API
         Java
         NET
       Documentation
         C-API
         Java
         NET
       Examples
         C-API
         Java
         NET
       Server
       Demo Client

## New Features in v. 5.1a release

### TeamTalk 5 Server API

The TeamTalk 5 Professional Edition now includes a TeamTalk Server API which enables developers to instantiate a TeamTalk server by calling the TeamTalk DLL. With the server API it's possible to do basic operations like authentication users and updating server properties.

Note that the TeamTalk server API is currently only supported in the TeamTalk C-API DLL.

### TeamTalk 5 Java DLL

Now that the TeamTalk SDK is also available for Android the Java API used for Android development has also been ported to Linux and Mac OS X.

Java is supported by using a new TeamTalk DLL with a Java Native Interface (JNI). The TeamTalk JNI DLL is located in `Library/Java/TeamTalkJNI`.

Open the Java documentation to see how to use the new Java API. The Java TeamTalk classes greatly ressemble the .NET classes therefore the API documentation for Java is the same as .NET. Hopefully this doesn't cause too much confusion.

### TeamTalk 5 SDK for iOS

The iOS platform is now also supported by the TeamTalk DLL. Please refer to TeamTalk DLL on iOS on how to use the TeamTalk DLL on iOS.

# TeamTalk 5 SDK v. 5.0a release, March 15th 2015

## New features in v. 5.0a

### Updated event handling

In TeamTalk 4 events were posted in a `TTMessage` containing a WPARAM and LPARAM where the WPARAM would typically contain an ID and the LPARAM some extended information about the event. When an event occured the client application would query the TeamTalk client instance to extract information about what had changed to the current state. Since the client instance was running in its own thread the state change could, however, have become unknown in the meantime. If e.g. a text message was received from a user and the user would immediately quit afterwards then the text message would be lost since the text message was "attached" to the user who was no longer there. In TeamTalk 5 a TTMessage now contains a copy of what changed as a cause of the event. If e.g. a text message is received from a user then the TTMessage will contain a full copy of the TextMessage which was received. Also if a new channel is created then it's no longer required to extract the Channel object through the TeamTalk client instance (using TT_GetChannel()) now the new channel is part of the TTMessage using the TTMessage's data container.

### WebM replaces Theora video codec

Theora video codec was used in TeamTalk 4 to encode video from webcam and media files but this has now been replaced by the more recent Google-backed WebM codec. Check out WebM website for more information about the new video codec. Currently it's only possible to configure the bitrate in the codec but should you need access to more codec configuration options then feel free to request these.

### OPUS replaces CELT audio codec

CELT is no longer being developed and has been replaced by OPUS. Check out OPUS website for more information.

### AES encryption replaces Blowfish

TeamTalk 4 used Blowfish for encrypting audio, video and desktop sharing streams. TeamTalk 5 uses AES 256-bit for encrypting audio, video, media file and desktop sharing streams.

### New stream type for media files

In TeamTalk 4 streaming a media file would replace voice input from microphone and video from a media file would replace webcam input. In TeamTalk 5 a new stream type for media files has been introduced so it's still possible to talk and show webcam video while streaming a media file to a channel.

### User rights now moved to user account

In TeamTalk 4 all users of the default user type had the same user rights on the server which were set up in ServerProperties. The user rights (UserRight) are now part of UserAccount so each user can have different UserRights on the server.

### Audio codec bitrate limit moved to user account

The maximum bitrate for audio codecs where global to all users in TeamTalk 4 but now the maximum bitrate a user can use for a new channel is configured in the UserAccount.

### Max channels limited to 4000

TeamTalk 4 supported 65000 active channels/rooms but in TeamTalk 5 only 4000 channels are supported. This limited has been implemented to reduce bandwidth usage.

### Peer to peer support has been removed

TeamTalk 5 doesn't support P2P connections since the 'forward through server' is required for desktop sharing to work.

### Channels can be renamed

In TeamTalk 4 is was not possible to update a channel's name but this is now supported. Ensure to update `szInitChannel` of UserAccount if you use this feature.

### Daemon script for server included

The TeamTalk 5 Linux server now includes a daemon script which can be put in `/etc/init`.d on Debian to start/stop the TeamTalk daemon (with -d option).

### Audio configuration no longer forced by channel

If a Channel was configured with an AudioConfig in TeamTalk 4 then the client instance would automatically enable this audio configuration. This is no longer the case in TeamTalk 5. Now the client application must invoke TT_SetSoundInputPreprocess() manually.

### Default server config file renamed to tt5srv.xml

The default name for the server xml configuration file was `tt4svc.xml` in TeamTalk 4 but in TeamTalk 5 it's now `tt5srv.xml` and `tt5prosrv.xml` for the Professional edition.

### Server statistics updated

ServerStatistics now includes the number of users served, the highest number of users and server's uptime.

### Non-encrypted mode in Professional server

The TeamTalk server in the Professional SDK (tt5prosrv) now also supports non-encrypted mode. Whether to run in encrypted or non-encrypted mode is configured when running the setup wizard. See more in TeamTalk Server Setup Guide.

## API changes in v. 5.0a

### New structs:

- OpusCodec
  - See OPUS replaces CELT audio codec
- SpeexDSP
  - See TT_SetSoundInputPreprocess().
- WebMVP8Codec
  - See WebM replaces Theora video codec
- RemoteFile
  - Replacement for `FileInfo`.
- ClientErrorMsg
  - Contains information about an error of type ClientError.

### Renamed/modified structs:

- SoundDevice
  - `inputSampleRates` and `outputSampleRates` replaced by `supportedSampleRates` due to change of TT_GetSoundDevices() instead of `TT_GetSoundInputDevices()` and `TT_GetSoundOutputDevices()`.
- AudioBlock
  - Now contains `nStreamID`. Stream ID changes whenever push-to-talk or voice activation are toggled.
- VideoCaptureDevice
  - `captureFormats` renamed to `videoFormats`.
  - `nCaptureFormatsCount` renamed to `nVideoFormatsCount`.
- MediaFileInfo
  - Now contains `szFileName`.
- DesktopWindow
  - Now contains `frameBuffer` with pointer to data and `nFrameBufferSize` with size of bffer.
- SpeexCodec
  - Renamed `nMSecPerPacket` to nTxIntervalMSec.
  - Removed `bUseJitterBuffer`.
- SpeexVBRCodec
  - Renamed `nMSecPerPacket` to nTxIntervalMSec.
  - Renamed `nQualityVBR` to `nQuality`.
  - Removed `bUseJitterBuffer`.
- AudioCodec
  - Removed `celt` and `celt_vbr`.
  - Added `opus`, i.e. OpusCodec.
- AudioConfig
  - Now only contains gain settings. Use SpeexDSP for denoising, AEC and AGC.
- VideoCodec
  - Removed `theora`.
  - Added `webm_vp8`.
- ServerProperties
  - Removed `szServerPasswd`. Only valid UserAccount is required now.
  - Removed `uUserRights`. Now part of UserAccount.
  - Removed `nAduioCodecBpsLimit`. Now part of UserAccount.
  - `nMaxVideoTxPerSecond` replaced by nMaxVideoCaptureTxPerSecond.
  - Added `nMaxMediaFileTxPerSecond`.
- ServerStatistics
  - `nVideoBytesTX` replaced by nVideoCaptureBytesTX.
  - `nVideoBytesRX` replaced by nVideoCaptureBytesRX.
  - Added `nMediaFileBytesTX`.
  - Added `nMediaFileBytesRX`.
  - Added `nUsersServed`.
  - Added `nUsersPeak`.
  - Added `nFilesTx`.
  - Added `nFilesRx`.
- UserAccount
  - Added `uUserRights`. See User rights now moved to user account.
  - Added `nAudioCodecBpsLimit`. See Audio codec bitrate limit moved to user account.
- User
  - Added `nVolumeVoice`.
  - Added `nVolumeMediaFile`.
  - Added `nGainLevelVoice`.
  - Added `nGainLevelMediaFile`.
  - Added `nStoppedDelayVoice`.
  - Added `nStoppedDelayMediaFile`.
  - Added `soundPositionVoice`.
  - Added `soundPositionMediaFile`.
  - Added `stereoPlaybackVoice`.
  - Added `stereoPlaybackMediaFile`.
  - Added `nBufferMSecVoice`
  - Added `nBufferMSecMediaFile`.
  - Renamed `szAudioFolder` to `szMediaStorageDir`
  - Removed `uAFF`. Format in CLIENTEVENT_USER_RECORD_MEDIAFILE.
  - Removed `szAudioFileName`. File name in CLIENTEVENT_USER_RECORD_MEDIAFILE.
- UserStatistics
  - `nAudioPacketsRecv` replaced by nVoicePacketsRecv.
  - `nAudioPacketsLost` replaced by nVoicePacketsLost.
  - `nVideoPacketsRecv` replaced by nVideoCapturePacketsRecv.
  - `nVideoFramesRecv` replaced by nVideoCaptureFramesRecv.
  - Added `nMediaFileAudioPacketsRecv`.
  - Added `nMediaFileAudioPacketsLost`.
  - Added `nMediaFileVideoPacketsRecv`.
  - Added `nMediaFileVideoFramesRecv`.
  - Added `nMediaFileVideoFramesLost`.
  - Added `nMediaFileVideoFramesDropped`.
- Channel
  - Added `nUserData`.
  - Added `transmitUsers`.
  - Renamed `codec` to `audiocodec`.
  - Remove `voiceUsers`. Use `transmitUsers` instead.
  - Remove `videoUsers`. Use `transmitUsers` instead.
  - Remove `desktopUsers`. Use `transmitUsers` instead.
  - Remove `voiceUsers`. Use `transmitUsers` instead.
- FileTransfer
  - Added `nStatus`.
- TTMessage
  - See Updated event handling.

### Removed structs

- `CELTCodec`
  - See OPUS replaces CELT audio codec
- `TheoraCodec`
  - See WebM replaces Theora video codec
- `FileInfo`
  - Replaced by RemoteFile.
- `CaptureFormat`
  - Replaced by VideoFormat.

### New enumerations

- StreamType
  - See New stream type for media files

### Renamed/modified enumerations

- `TransmitType`
  - Use StreamType instead.
- UserRight
  - Added USERRIGHT_CREATE_TEMPORARY_CHANNEL. See User rights now moved to user account.
  - Added USERRIGHT_MODIFY_CHANNELS. See User rights now moved to user account.
  - Added USERRIGHT_KICK_USERS.
  - Added USERRIGHT_BAN_USERS.
  - Added USERRIGHT_MOVE_USERS.
  - Added USERRIGHT_OPERATOR_ENABLE.
  - Added USERRIGHT_UPLOAD_FILES.
  - Added USERRIGHT_DOWNLOAD_FILES.
  - Added USERRIGHT_UPDATE_SERVERPROPERTIES.
  - Added USERRIGHT_TRANSMIT_MEDIAFILE_AUDIO. See New stream type for media files.
  - Added USERRIGHT_TRANSMIT_MEDIAFILE_VIDEO See New stream type for media files.
  - `USERRIGHT_DOUBLE_LOGIN` replaced by USERRIGHT_MULTI_LOGIN.
  - `USERRIGHT_CLIENT_BROADCAST` replaced by USERRIGHT_TEXTMESSAGE_BROADCAST.
  - `USERRIGHT_FORWARD_AUDIO` replaced by USERRIGHT_TRANSMIT_VOICE
  - `USERRIGHT_FORWARD_VIDEO` replaced by USERRIGHT_TRANSMIT_VIDEOCAPTURE
  - `USERRIGHT_FORWARD_DESKTOP` replaced by USERRIGHT_TRANSMIT_DESKTOP
  - `USERRIGHT_FORWARD_DESKTOPINPUT` replaced by USERRIGHT_TRANSMIT_DESKTOPINPUT
  - Removed `USERRIGHT_CHANNEL_CREATION`. See User rights now moved to user account.
  - Removed `USERRIGHT_CHANNEL_OPERATORS`.
  - Removed `USERRIGHT_CHANNEL_COMMANDS`.
  - Removed `USERRIGHT_SUBSCRIPTIONS`. Subscriptions are now mandatory.
  - Removed `USERRIGHT_STRICT_UTF8`. UTF-8 is now mandatory.
- Subscription
  - `SUBSCRIBE_AUDIO` replaced by SUBSCRIBE_VOICE.
  - `SUBSCRIBE_VIDEO` replaced by SUBSCRIBE_VIDEOCAPTURE.
  - `SUBSCRIBE_INTERCEPT_AUDIO` replaced by SUBSCRIBE_INTERCEPT_VOICE.
  - `SUBSCRIBE_INTERCEPT_VIDEO` replaced by SUBSCRIBE_INTERCEPT_VIDEOCAPTURE.
  - Added SUBSCRIBE_MEDIAFILE.
  - Added SUBSCRIBE_INTERCEPT_MEDIAFILE.
- UserState
  - `USERSTATE_TALKING` replaced by USERSTATE_VOICE.
  - `USERSTATE_MUTE` replaced by USERSTATE_MUTE_VOICE.
  - `USERSTATE_VIDEO` replaced by USERSTATE_VIDEOCAPTURE.
  - Added `USERSTATE_MUTE_MEDIAFILE`.
  - Added `USERSTATE_MEDIAFILE_AUDIO`.
  - Added `USERSTATE_MEDIAFILE_VIDEO`.
  - Added `USERSTATE_MEDIAFILE`.
- ChannelType
  - `CHANNEL_STATIC` replaced by CHANNEL_PERMANENT.
  - Removed `CHANNEL_ECHO`. Use SUBSCRIBE_VOICE instead.
  - Removed `CHANNEL_ECHO_AUDIO`. Use SUBSCRIBE_VOICE instead.
  - Removed `CHANNEL_ECHO_VIDEO`. Use SUBSCRIBE_VIDEOCAPTURE instead.
  - Removed `CHANNEL_ECHO_DESKTOP`. Use SUBSCRIBE_DESKTOP instead.
  - Added CHANNEL_NO_VOICEACTIVATION.
  - Added CHANNEL_NO_RECORDING.
- ClientError
  - Removed `CMDERR_INCORRECT_SERVER_PASSWORD`.
  - Removed `CMDERR_CANNOT_CREATE_CHANNELS`.
  - Removed `CMDERR_SUBSCRIPTIONS_DISABLED`.
  - Removed `CMDERR_SERVER_HAS_USERS`.
  - Added CMDERR_INVALID_USERNAME.
  - Added CMDERR_MAX_CHANNELS_EXCEEDED. See Max channels limited to 4000.
  - Added INTERR_AUDIOCODEC_INIT_FAILED.
  - Added INTERR_SPEEXDSP_INIT_FAILED.
- ClientFlag
  - Added CLIENT_SNDINPUT_VOICEACTIVE.
  - `CLIENT_TX_AUDIO` replaced by CLIENT_TX_VOICE.
  - `CLIENT_TX_VIDEO` replaced by CLIENT_TX_VIDEOCAPTURE.
  - Removed `CLIENT_SNDINPUT_DENOISING`.
  - Removed `CLIENT_P2P_AUDIO`. See Peer to peer support has been removed.
  - Removed `CLIENT_P2P_VIDEO`. See Peer to peer support has been removed.
  - Removed `CLIENT_P2P`. See Peer to peer support has been removed.
  - Removed `CLIENT_SNDINPUT_AEC`.
  - Removed `CLIENT_SNDINPUT_AGC`.
- SoundLevel
  - Changed SOUND_VU_MAX to 100
  - Changed SOUND_VOLUME_MAX 32000
  - Added SOUND_VOLUME_DEFAULT

### Removed enumerations:

- `AudioFileStatus`
  - Replaced by MediaFileStatus.

### New events:

- CLIENTEVENT_CMD_SERVERSTATISTICS
  - Response to TT_DoQueryServerStats().
- CLIENTEVENT_USER_STATECHANGE
  - User's state mask `uUserState` changed.
- CLIENTEVENT_USER_MEDIAFILE_VIDEO
  - Video frame from media file ready for display.

### Renamed/modified events:

- `WM_TEAMTALK_CON_SUCCESS`
  - Use CLIENTEVENT_CON_SUCCESS instead.
- `WM_TEAMTALK_CON_FAILED`
  - Use CLIENTEVENT_CON_FAILED instead.
- `WM_TEAMTALK_CON_LOST`
  - Use CLIENTEVENT_CON_LOST instead.
- `WM_TEAMTALK_CMD_PROCESSING`
  - Use CLIENTEVENT_CMD_PROCESSING instead.
- `WM_TEAMTALK_CMD_MYSELF_LOGGEDIN`
  - Use CLIENTEVENT_CMD_MYSELF_LOGGEDIN instead.
- `WM_TEAMTALK_CMD_MYSELF_LOGGEDOUT`
  - Use CLIENTEVENT_CMD_MYSELF_LOGGEDOUT instead.
- `WM_TEAMTALK_CMD_MYSELF_JOINED`
  - Use CLIENTEVENT_CMD_USER_JOINED instead.
- `WM_TEAMTALK_CMD_MYSELF_LEFT`
  - Use CLIENTEVENT_CMD_USER_LEFT instead.
- `WM_TEAMTALK_CMD_MYSELF_KICKED`
  - Use CLIENTEVENT_CMD_MYSELF_KICKED instead.
- `WM_TEAMTALK_CMD_USER_LOGGEDIN`
  - Use CLIENTEVENT_CMD_USER_LOGGEDIN instead.
- `WM_TEAMTALK_CMD_USER_LOGGEDOUT`
  - Use CLIENTEVENT_CMD_USER_LOGGEDOUT instead.
- `WM_TEAMTALK_CMD_USER_UPDATE`
  - Use CLIENTEVENT_CMD_USER_UPDATE instead.
- `WM_TEAMTALK_CMD_USER_JOINED`
  - Use CLIENTEVENT_CMD_USER_JOINED instead.
- `WM_TEAMTALK_CMD_USER_LEFT`
  - Use CLIENTEVENT_CMD_USER_LEFT instead.
- `WM_TEAMTALK_CMD_USER_TEXTMSG`
  - Use CLIENTEVENT_CMD_USER_TEXTMSG instead.
- `WM_TEAMTALK_CMD_CHANNEL_NEW`
  - Use CLIENTEVENT_CMD_CHANNEL_NEW instead.
- `WM_TEAMTALK_CMD_CHANNEL_UPDATE`
  - Use CLIENTEVENT_CMD_CHANNEL_UPDATE instead.
- `WM_TEAMTALK_CMD_CHANNEL_REMOVE`
  - Use CLIENTEVENT_CMD_CHANNEL_REMOVE instead.
- `WM_TEAMTALK_CMD_SERVER_UPDATE`
  - Use CLIENTEVENT_CMD_SERVER_UPDATE instead.
- `WM_TEAMTALK_CMD_FILE_NEW`
  - Use CLIENTEVENT_CMD_FILE_NEW instead.
- `WM_TEAMTALK_CMD_FILE_REMOVE`
  - Use CLIENTEVENT_CMD_FILE_REMOVE instead.
- `WM_TEAMTALK_CMD_ERROR`
  - Use CLIENTEVENT_CMD_ERROR instead.
- `WM_TEAMTALK_CMD_SUCCESS`
  - Use CLIENTEVENT_CMD_SUCCESS instead.
- `WM_TEAMTALK_USER_TALKING`
  - Use CLIENTEVENT_USER_STATECHANGE instead.
- `WM_TEAMTALK_USER_VIDEOFRAME`
  - Use CLIENTEVENT_USER_VIDEOCAPTURE or CLIENTEVENT_USER_MEDIAFILE_VIDEO instead.
- `WM_TEAMTALK_USER_AUDIOFILE`
  - Use CLIENTEVENT_USER_RECORD_MEDIAFILE instead.
- `WM_TEAMTALK_INTERNAL_ERROR`
  - Use CLIENTEVENT_INTERNAL_ERROR instead.
- `WM_TEAMTALK_VOICE_ACTIVATION`
  - Use CLIENTEVENT_VOICE_ACTIVATION instead.
- `WM_TEAMTALK_HOTKEY`
  - Use CLIENTEVENT_HOTKEY instead.
- `WM_TEAMTALK_HOTKEY_TEST`
  - Use CLIENTEVENT_HOTKEY_TEST instead.
- `WM_TEAMTALK_FILETRANSFER`
  - Use CLIENTEVENT_FILETRANSFER instead.
- `WM_TEAMTALK_USER_AUDIOBLOCK`
  - Use CLIENTEVENT_USER_AUDIOBLOCK instead.
- `WM_TEAMTALK_USER_DESKTOPWINDOW`
  - Use CLIENTEVENT_USER_DESKTOPWINDOW instead.
- `WM_TEAMTALK_DESKTOPWINDOW_TRANSFER`
  - Use CLIENTEVENT_DESKTOPWINDOW_TRANSFER instead.
- `WM_TEAMTALK_USER_DESKTOPCURSOR`
  - Use CLIENTEVENT_USER_DESKTOPCURSOR instead.
- `WM_TEAMTALK_CON_MAX_PAYLOAD_UPDATED`
  - Use CLIENTEVENT_CON_MAX_PAYLOAD_UPDATED instead.
- `WM_TEAMTALK_STREAM_AUDIOFILE_CHANNEL`
  - `TT_StartStreamingAudioFileToUser()` replaced by TT_StartStreamingMediaFileToChannel()
- `WM_TEAMTALK_STREAM_MEDIAFILE_CHANNEL`
  - Use CLIENTEVENT_STREAM_MEDIAFILE instead.
- `WM_TEAMTALK_USER_DESKTOPINPUT`
  - Use CLIENTEVENT_USER_DESKTOPINPUT instead.

### Removed events

- `WM_TEAMTALK_STREAM_AUDIOFILE_USER`
  - "Outside channel" streaming no longer supported.
- `WM_TEAMTALK_CON_P2P`
  - See Peer to peer support has been removed

### New methods

- TT_GetSoundDevices()
  - Replacement for `TT_GetSoundInputDevices` and TT_GetSoundOutputDevices.
- TT_SetSoundInputPreprocess()
  - Replacement for `TT_SetAGCSettings` and `TT_GetAGCSettings`.
- TT_GetSoundInputPreprocess()
  - Replacement for `TT_GetAGCSettings`.
- TT_EnableVoiceTransmission()
  - Replacement for `TT_EnableTransmission`.
- TT_StartVideoCaptureTransmission()
  - Replacement for `TT_EnableTransmission`.
- TT_StopVideoCaptureTransmission()
  - Replacement for `TT_EnableTransmission`.
- TT_AcquireUserVideoCaptureFrame()
  - Replacement for `TT_GetUserVideoFrame` and `TT_AcquireUserVideoFrame`.
- TT_ReleaseUserVideoCaptureFrame()
  - Replacement for `TT_ReleaseUserVideoFrame`.
- TT_AcquireUserMediaVideoFrame()
  - See New stream type for media files
- TT_ReleaseUserMediaVideoFrame()
  - See New stream type for media files
- TT_AcquireUserDesktopWindow()
  - Replacement for TT_GetUserDesktopWindow().
- TT_AcquireUserDesktopWindowEx()
  - Replacement for TT_GetUserDesktopWindow().
- TT_ReleaseUserDesktopWindow()
  - Replacement for TT_GetUserDesktopWindow().
- TT_GetClientStatistics()
  - Replacement for TT_GetStatistics().
- TT_DoPing()
  - Response using CLIENTEVENT_CMD_PROCESSING.
- TT_GetChannelFile()
  - Replacement for `TT_GetChannelFileInfo`
- TT_GetMyUserRights()
  - Quick access to own UserAccount.
- TT_SetUserStoppedPlaybackDelay()
  - Replacement for `TT_SetUserStoppedTalkingDelay`
- TT_SetUserAudioStreamBufferSize()
  - Replacement for `TT_SetUserMediaBufferSize`

### Renamed/modified methods

- TT_InitTeamTalk()
  - Now has uMsg parameter `HWND` message identifier.
- TT_GetDefaultSoundDevices()
  - Removed lpTTInstance parameter.
- TT_StartSoundLoopbackTest()
  - Now returns TTSoundLoop instance.
- TT_GetVideoCaptureDevices()
  - Removed `lpTTInstance` parameter.
- TT_InitVideoCaptureDevice()
  - Removed `lpVideoCodec` parameter.
- TT_SendDesktopWindow()
  - `lpBitmap` and `nBitmapSize` are now part of DesktopWindow.
- TT_SendDesktopCursorPosition()
  - Removed `nUserID` parameter. All in channel will receive.
- TT_Connect()
  - Added `bEncrypted` parameter.
- TT_ConnectEx()
  - Added `bEncrypted` parameter.
- TT_DoLogin()
  - `szServerPassword` removed. User account mandatory in TeamTalk 5.
- TT_GetServerUsers()
  - `lpUserIDs` replaced by `lpUsers` parameter.
- TT_GetChannelUsers()
  - `lpUserIDs` replaced by `lpUsers` parameter.
- TT_GetChannelFiles()
  - `lpFileInfos` replaced by `lpRemoteFiles`
- TT_GetServerChannels()
  - `lpChannelIDs` replaced by `lpChannels`.
- TT_SetUserVolume()
  - Added `nStreamType` parameter.
- TT_SetUserMute()
  - Added `nStreamType` parameter.
- TT_EnableAudioBlockEvent()
  - Now requires `nUserID` and `nStreamType`.
- TT_AcquireUserAudioBlock()
  - Removed `lpAudioBlock` parameter. Now returns AudioBlock.

### Removed methods

- `TT_GetSoundInputDevices`
  - Use TT_GetSoundDevices() instead.
- `TT_GetSoundOutputDevices`
  - Use TT_GetSoundDevices() instead.
- `TT_StartSoundLoopbackTestEx()`
  - Use TT_StartSoundLoopbackTest() instead.
- `TT_SetUserGainLevel`
  - Use TT_SetUserVolume() instead.
- `TT_EnableAGC`
  - Use TT_SetSoundInputPreprocess() instead.
- `TT_EnableEchoCancellation`
  - Use TT_SetSoundInputPreprocess() instead.
- `TT_SetAGCSettings`
  - Use TT_SetSoundInputPreprocess() instead.
- `TT_GetAGCSettings`
  - Use TT_GetSoundInputProcess() instead.
- `TT_EnableDenoising`
  - Use TT_SetSoundInputPreprocess() instead.
- `TT_SetDenoiseLevel`
  - Use TT_SetSoundInputPreprocess() instead.
- `TT_GetDenoiseLevel`
  - Use TT_GetSoundInputPreprocess() instead.
- `TT_GetUserVideoFrame`
  - Use TT_AcquireUserVideoCaptureFrame() instead.
- `TT_AcquireUserVideoFrame`
  - Use TT_AcquireUserVideoCaptureFrame() instead.
- `TT_ReleaseUserVideoFrame`.
  - Use TT_ReleaseUserVideoCaptureFrame() instead.
- `TT_EnableTransmission`
  - Use TT_EnableVoiceTransmission() or TT_StartVideoCaptureTransmission() instead.
- `TT_IsTransmitting`
  - Use TT_GetFlags() instead.
- `TT_StartStreamingAudioFileToUser`
  - "Outside channel" streaming no longer supported.
- `TT_StopStreamingAudioFileToUser`
  - "Outside channel" streaming no longer supported.
- `TT_StartStreamingAudioFileToChannel`
  - Use TT_StartStreamingMediaFileToChannel() instead.
- `TT_StopStreamingAudioFileToChannel`
  - Use TT_StopStreamingMediaFileToChannel() instead.
- `TT_SetUserAudioFolder`
  - Use TT_SetUserMediaStorageDir() instead.
- `TT_GetUserDesktopCursor`
  - Cursor position posted in CLIENTEVENT_USER_DESKTOPCURSOR.
- `TT_GetUserDesktopInput`
  - DesktopInput posted in CLIENTEVENT_USER_DESKTOPINPUT.
- `TT_ConnectNonEncrypted`
  - Use TT_Connect() instead.
- `TT_SetKeepAliveInterval()`
  - Use TT_DoPing() instead.
- `TT_GetKeepAliveInterval()`
- `TT_SetServerTimeout`
- `TT_GetServerTimeout`
- `TT_EnablePeerToPeer`
  - See Peer to peer support has been removed
- `TT_GetStatistics`
  - Use TT_GetClientStatistics() instead.
- `TT_GetPacketSize`
- `TT_GetServerStatistics`
  - ServerStatistics posted in CLIENTEVENT_CMD_SERVERSTATISTICS.
- `TT_GetChannelFileInfo()`
  - Use TT_GetChannelFile() instead.
- `TT_GetTextMessage()`
  - TextMessage posted in CLIENTEVENT_CMD_USER_TEXTMSG.
- `TT_GetUserVolume`
  - Use `nVolumeVoice` in User instead.
- `TT_GetUserGainLevel`
  - Use `nGainLevelVoice` in User instead.
- `TT_SetUserStoppedTalkingDelay`
  - Use TT_SetUserStoppedPlaybackDelay() instead.
- `TT_GetUserStoppedTalkingDelay`
  - Use `nStoppedDelayVoice` in User instead.
- `TT_GetUserPosition`
  - Use `soundPositionVoice` in User instead.
- `TT_GetUserStereo`
  - Use `uUserState` in User instead.
- `TT_SetUserMediaBufferSize`
  - Use TT_SetUserAudioStreamBufferSize() instead.
- `TT_ReleaseAllAudioBlocks`
  - Use TT_ReleaseUserAudioBlock() instead.

# TeamTalk 4 SDK v. 4.6b release, June 28th 2014

The TeamTalk 4 SDK is now also available for Mac OS X 64-bit.

Released on 2014/07/20.

## New features in v. 4.6b

The TeamTalk server now also includes `-l` command line argument for specifying the location of the log-file. Previously only the `-wd` argument could be used for changing the location of the log file.

The log-file of the TeamTalk server now also includes entries for when a user acount is added or deleted and also a log entry for when users are moved between channels.

# TeamTalk 4 SDK v. 4.6a release, February 20th 2014

Released on 2014/02/20.

## New features in v. 4.6a

### Desktop Access

Shared desktops can now be controlled remotely using mouse and keyboard input. Check out Remote Desktop Access to read on how to control remote desktops.

## API Changes in v4.6a

- DesktopInput
- DesktopKeyState
- Subscription
  - Added SUBSCRIBE_DESKTOPINPUT
- ClientEvent
  - Added `WM_TEAMTALK_USER_DESKTOPINPUT`
- UserRight
  - Added `USERRIGHT_FORWARD_DESKTOPINPUT`
- TT_SendDesktopInput
- `TT_GetUserDesktopInput`
- TT_DesktopInput_KeyTranslate
- TT_DesktopInput_Execute

# TeamTalk 4 SDK v. 4.5a release, May 12th 2013

Released on 2013/05/13.

## New features in v. 4.5a

### Stream Media Files to Channel

Previously it's only been possible to stream 16-bit signed PCM wave-files to a channel but in the 4.5 release it's now possible to stream mp3, mpg, avi, wma, wmv, etc. to a channel. On Windows you can basically stream whatever Windows Media Player can play to a channel. Checkout `TT_StartStreamingMediaFileToChannel()` for more information.

### Login Attempt Limit

To prevent a brute force login attempt it's now possible to limit the number of login attempt before banning an IP-address. Checkout `nMaxLoginAttempts` property of ServerProperties. It's now also possible to limit the number of logins per IP-address by specifying `nMaxLoginsPerIPAddress` in ServerProperties.

### Ban user by IP-address

Previously it was only possible to ban a user's IP-address if the user was present on the server. Now it's, however, possible to ban an IP-address using TT_DoBanIPAddress().

## API Changes in v4.5a

- AudioFormat
- MediaFileInfo
- ServerProperties
  - Added `nMaxLoginAttempts`
  - Added `nMaxLoginsPerIPAddress`
- ClientError
  - Added CMDERR_MAX_LOGINS_PER_IPADDRESS_EXCEEDED
- ClientFlag
  - Added CLIENT_STREAM_VIDEO
  - Added CLIENT_STREAM_AUDIO
- ClientEvent
  - Added `WM_TEAMTALK_STREAM_MEDIAFILE_CHANNEL`
- TT_StartStreamingMediaFileToChannel()
- TT_StopStreamingMediaFileToChannel()
- TT_GetMediaFileInfo()
- TT_DoBanIPAddress()
- TT_SetUserMediaBufferSize()

# TeamTalk 4 SDK v. 4.4a release, September 25th 2012

Released on 2012/10/15.

## New features in v. 4.4a

### Support for Windows Audio Session

Windows Audio Session is a new sound system available in Windows Vista and later versions of Windows. It's a sound system which provides significantly lower latency than both DirectSound and Windows default sound devices. Check out SOUNDSYSTEM_WASAPI for more information.

### Restart Sound System

When the TeamTalk client is initially start it scan the system for all sound devices but if a user later plugs in a USB sound card then this device will not be detected automatically in `TT_GetSoundInputDevices()` and `TT_GetSoundOutputDevices()`.

TT_RestartSoundSystem() can now be used to shut down the sound systems can rescan for new devices.

### Automatic resampling of unsupported sample rates

If a sound card doesn't support the sampling rate of a codec or if the codec requires stereo input then TeamTalk now automatically resamples audio so it fits the proper format. DirectSound e.g. had problems with input devices which only allowed mono and therefore couldn't be used with stereo codecs.

### Operator receive-only channel type

A new channel type, CHANNEL_OPERATOR_RECVONLY, has now also been introduced which only allowed administrators and operators of a channel to receive audio and video. This can be useful if bandwidth is a problem.

### Encrypted client (Pro-Edition) can connect to non-encrypted servers

The client in the TeamTalk 4 Professional Edition can now also connect to non-encrypted TeamTalk server. Use TT_ConnectNonEncrypted() to do this.

### Unicode video device names

VideoCaptureDevice now shows the name of the video device in Unicode on Windows.

## API Changes in v4.4a

- SoundSystem
  - Added `SOUNDSYSTEM_WASAPI`
- SoundDevice
  - Added `nDefaultSampleRate`
- UserRight
  - Added `USERRIGHT_STRICT_UTF8`
- ChannelType
  - Added CHANNEL_OPERATOR_RECVONLY
- TT_GetDefaultSoundDevicesEx()
- TT_RestartSoundSystem()
- TT_ConnectNonEncrypted()

# TeamTalk 4 SDK v. 4.3a release, March 18th 2012

Released on 2012/03/26.

## New features in v. 4.3a

### Share Desktop Applications

The major new feature in the 4.3 release is the ability to share desktop applications. When sharing a desktop application you send a bitmap, using TT_SendDesktopWindow(), to the local client instance. The bitmap is then split into in small blocks and transmitted to the server using the UDP connection. Read more about this feature in the section Desktop Sharing.

### Join channel after login

A UserAccount now has the `szInitChannel` property which holds the channel a user should join after login. The user can join this channel without passing a password. Use TT_GetMyUserAccount() to get the local instance's UserAccount after login has completed.

### Automatically become channel operator

A user can automatically become operator of a Channel configured with `CHANNEL_STATIC` if the channel's ID is in the `autoOperatorChannels` property of UserAccount.

### Custom message type

An extra message type has been added for custom messages. The MSGTYPE_CUSTOM works in the same way as MSGTYPE_USER.

### Query maximum UDP packet size

Some routers don't allow UDP packets over a given size so use TT_QueryMaxPayload() after connecting to a server to detect the maximum size for UDP packets. The event `WM_TEAMTALK_CON_MAX_PAYLOAD_UPDATED` is triggered when the client instance has finished querying.

### Access raw audio data

The raw audio, which has been playing when a user is talking, can now be accessed by calling TT_EnableAudioBlockEvent(). The event `WM_TEAMTALK_USER_AUDIOBLOCK` is triggered when a new AudioBlock is available.

### Get name of file being recorded to

If audio files are being recorded separately for every User, using `TT_SetUserAudioFolder`, the file name of the file currently being recorded to can be found in the `szAudioFileName` property of the User struct.

### Reset recorded audio file

To cancel and start recording to a new audio file pass AFF_NONE as parameter to `TT_SetUserAudioFolder`. This will reset the current recording and generate the `WM_TEAMTALK_USER_AUDIOFILE` event.

### See own video stream

A Channel can now be configured using the `CHANNEL_ECHO_VIDEO` flag for echoing the video stream transmitted by the local client instance.

### Free-for-all option in classrooms

A Channel configured using CHANNEL_CLASSROOM was previously limited to 16 people transmitting either video or audio. Now it's, however, possible to add TT_CLASSROOM_FREEFORALL to the "enabled" users properties to allow everyone to transmit.

## API Changes in v4.3a

- TT_EnableAudioBlockEvent()
- TT_AcquireUserAudioBlock()
- TT_ReleaseUserAudioBlock()
- TT_ReleaseAllAudioBlocks()
- `TT_SetUserAudioFolder`
  - Added `uAFF` parameter
- TT_PaintVideoFrameEx()
- TT_PaintDesktopWindow()
- TT_PaintDesktopWindowEx()
- TT_SendDesktopWindow()
- TT_SendDesktopWindowFromHWND()
- TT_SendDesktopFromWindowID()
- TT_SendDesktopCursorPosition()
- TT_CloseDesktopWindow()
- `TT_GetUserDesktopWindow()`
- `TT_GetUserDesktopCursor()`
- TT_QueryMaxPayload()
- TT_Palette_GetColorTable()
- TT_Windows_GetDesktopActiveHWND()
- TT_Windows_GetDesktopHWND()
- TT_Windows_GetDesktopWindowHWND()
- TT_Windows_GetWindow()
- TT_MacOS_GetWindow()
- TT_MacOS_GetWindowFromWindowID()
- AudioBlock new struct
- BitmapFormat new struct
- DesktopProtocol new struct
- DesktopWindow new struct
- ShareWindow new struct
- Channel struct updated with new fields:
  - `desktopUsers`
- ClientStatistics
  - `nDesktopBytesSent`
  - `nDesktopBytesRecv`
- ServerProperties struct updated with new fields:
  - `szMOTDRaw`
  - `nMaxDesktopTxPerSecond`.
- UserAccount struct updated with new fields:
  - `szInitChannel`
  - `autoOperatorChannels`
- User struct updated with new fields
  - `uAFF`
  - `szAudioFileName`
- AudioFileFormat enumeration updated with new values:
  - AFF_MP3_16KBIT_FORMAT
  - AFF_MP3_32KBIT_FORMAT
- ClientEvent enumeration updated with new values:
  - `WM_TEAMTALK_USER_AUDIOBLOCK`
  - `WM_TEAMTALK_USER_DESKTOPWINDOW`
  - `WM_TEAMTALK_DESKTOPWINDOW_TRANSFER`
  - `WM_TEAMTALK_USER_DESKTOPCURSOR`
  - `WM_TEAMTALK_CON_MAX_PAYLOAD_UPDATED`
- ChannelType enumeration updated with new values:
  - `CHANNEL_ECHO_AUDIO`
  - `CHANNEL_ECHO_VIDEO`
  - `CHANNEL_ECHO_DESKTOP`
- ClientFlag
  - CLIENT_DESKTOP_ACTIVE
  - CLIENT_TX_DESKTOP
- Subscription enumeration updated with new values:
  - SUBSCRIBE_CUSTOM_MSG
  - SUBSCRIBE_INTERCEPT_CUSTOM_MSG
  - SUBSCRIBE_DESKTOP
  - SUBSCRIBE_INTERCEPT_DESKTOP
- TextMsgType
  - MSGTYPE_CUSTOM
- UserState enumeration updated with new values:
  - USERSTATE_DESKTOP
  - `USERSTATE_VIDEO`
- UserRight enumeration updated with new values:
  - `USERRIGHT_FORWARD_DESKTOP`.
- TT_CLASSROOM_FREEFORALL new const macro
- TT_CHANNELS_OPERATOR_MAX new const macro

# TeamTalk 4 SDK v. 4.2a release, November 1st 2011

Released on 2011/11/02.

## New features in v. 4.2a

### Muxed audio files

It is now possible to store "muxed" audio files, i.e. audio from all users are written to the same audio file. Check out TT_StartRecordingMuxedAudioFile() on how to do this.

### Windows XP/Vista/7 Firewall

The Windows Firewall, included in XP and later Windows versions, can sometimes block network traffic to and from applications which uses the TeamTalk DLL. Check out the section Windows Firewall on how to use the Windows Firewall functions.

### Modify "talking" delay

Voice activation is by default disabled if no audio has reached the voice activation level for 1.5 seconds. This option can now be changed by calling TT_SetVoiceActivationStopDelay(). Also users who are talking are set to non-talking after 0.5 seconds if no new voice data has been received. This value can now be changed by calling `TT_SetUserStoppedTalkingDelay()`.

### VBR audio codecs

Speex and CELT can now be used in VBR mode by creating a Channel with the SpeexVBRCodec or `CELTVBRCodec`. To limit bandwidth usage it is advised to use the VBR codecs. Especially the Speex VBR codec with DTX enabled reduces throughput when there's silence.

### CELT updated to version 0.11

CELT 0.5.2, which was used in v 4.1 and previous of the SDK, has been replaced by CELT 0.11. Note that encoding and decoding of CELT 0.5.2 is no longer supported. Check out http://www.celt-codec.org

### IPv6 support (Windows 2000 no longer supported)

Client and server now support IPv6. To make the server run in IPv6 mode the server must bind to an IPv6 address. Check out Configurating the TeamTalk Server on how to specify the bind IP-address (<bind-ip> tag).

Note that the TeamTalk DLL can no longer run on Windows 2000 since this platform does not support IPv6.

## API Changes in v4.2a

- TT_SetVoiceActivationStopDelay()
- TT_GetVoiceActivationStopDelay()
- TT_StartRecordingMuxedAudioFile()
- TT_StopRecordingMuxedAudioFile()
- TT_GetServerChannels()
- `TT_SetUserStoppedTalkingDelay()`
- `TT_GetUserStoppedTalkingDelay()`
- TT_Firewall_Enable()
- TT_Firewall_AppExceptionExists()
- TT_Firewall_AddAppException()
- TT_Firewall_RemoveAppException()
- SpeexVBRCodec struct for Speex VBR.
- `CELTCodec` struct updated for CELT 0.11.
- `CELTVBRCodec` struct for CELT VBR.
- Codec enum update with `CELT_0_5_2_OBSOLETE_CODEC`, `SPEEX_VBR_CODEC`, `CELT_CODEC` and `CELT_VBR_CODEC`.
- AudioCodec struct updated with VBR codecs.
- ServerProperties struct updated with `nAudioCodecBpsLimit`, `nMaxAudioTxPerSecond`, `nMaxVideoTxPerSecond` and `nMaxTotalTxPerSecond`.
- ServerStatistics struct updated with `nUptimeMSec`.
- AudioFileFormat enum for different types of audio storage.
- ClientError enum now contains CMDERR_UNKNOWN_AUDIOCODEC for unsupport audio codec and CMDERR_AUDIOCODEC_BITRATE_LIMIT_EXCEEDED for setting a bitrate for audio codecs which is too high.
- ClientFlag enum now contains CLIENT_MUX_AUDIOFILE for active muxed audio file.

### Removed API functions

Support for "talking callback" by function pointer has been removed since it's causing problems with threads (typically UI vs. TT-threads).

- `TT_RegisterTalkingCallback`
- `TT_UnregisterTalkingCallback`

# TeamTalk 4 SDK v. 4.1a release, October 30th 2010

Released on 2010/10/30.

## New Features in v. 4.1a

The new features in the TeamTalk 4 SDK v. 4.1a has are described in the following subsections.

### Mac OS X and Windows Mobile platforms

Mac OS X is now supported using the C-API DLL which is compiled for i386 and uses QuickTime for video and CoreAudio for audio. Windows Mobile support is now also supported using both the C-API DLL and the .NET Framework DLL. Note, however, that the Windows Mobile is only supported in the Standard SDK and not the Professional SDK since OpenSSL is quite tricky to port to Windows Mobile.

### Echo Cancellation

When initializing the client instance's sound system in duplex mode it is now possible to enable echo cancellation. Note, however, that echo cancellation performs poorly on Windows whereas it's very effective on Mac OS X and Linux. Check out TT_InitSoundDuplexDevices() and TT_EnableEchoCancellation() on how to use echo cancellation.

### Classroom channel-type

A new channel-type called classroom has now been introduced where the channel's operator can control who is allowed to transmit audio and video to a channel. The channel operator can then work as sort of a teacher where the teacher selects the people who should answer questions. Check out CHANNEL_CLASSROOM for how to create classroom channels.

### Channel based audio configuration

Often users have set their microphones to different audio levels so it's hard to hear certain users and others are too loud. When creating a channel it's now possible to use Channel's audiocfg member to set the same audio level for all users. Note that all users must use the v. 4.1a release for this to work.

### Server Statistics

Administrators can now query a server statistics using the command TT_DoQueryServerStats() and thereby get an overview of bandwidth usage.

### Simpler video extraction

Using TT_GetUserVideoFrame() is quite tricky to use since the developer must first query for how much memory must be allocated to store the video frame. In this new release it's possible to share memory with the client instance so one simply calls TT_AcquireUserVideoFrame() to get a pointer to a user's video data. when one has completed using the video frame call TT_ReleaseUserVideoFrame() to release the shared memory. Note that only one video frame can be extracted each time, therefore calling TT_AcquireUserVideoFrame() twice will simply result in getting the same video frame.

## API Changes in v4.1a

- TT_ConnectEx()
  - The function has now been introduced which allows to specify the IP-address to bind to on the local interface.
- `WM_TEAMTALK_CMD_SUCCESS`
  - Whenever the client issues a command to the server (TT_Do* functions) this message will be posted if the command was successful.
- SOUNDSYSTEM_COREAUDIO
  - Support for Mac OS X sound system.
- TT_InitSoundDuplexDevices()
  - Initialize both sound input and output devices simultaneously. In duplex mode all users' playback streams will be mixed into a single stream. Duplex mode most be enabled if echo cancellation is to be used.
- TT_CloseSoundDuplexDevices()
  - When running in duplex mode this function must be used to close down audio capture and playback.
- `TT_StartSoundLoopbackTestEx()`
  - Same as TT_StartSoundLoopbackTest() both with AudioConfig and echo cancellation.
- TT_SetDenoiseLevel()
  - Specify how agressive denoise should be when `TT_EnableDenoising()` is enabled.
- `TT_GetDenoiseLevel()`
  - Getter for `TT_SetDenoiseLevel()`.
- `TT_EnableEchoCancellation()`
  - For echo cancellation to be enabled the sound system must have been initialized in duplex mode using TT_InitSoundDuplexDevices(). Note that echo cancellation performs poorly on Windows.
- `TT_AcquireUserVideoFrame()`
  - Extract a user's video frame in a VideoFrame struct. Call `TT_ReleaseUserVideoFrame()` to release the memory referenced in the VideoFrame.
- `TT_ReleaseUserVideoFrame()`
  - Release the resources held by the client instance so a new video frame can be extracted. Never use the VideoFrame from TT_AcquireUserVideoFrame() again after this call.
- AudioConfig
  - When creating a Channel using TT_DoMakeChannel() or TT_DoJoinChannel() it is now possible to specify an audio configuration so all users will speak at the same volume level.
- CHANNEL_CLASSROOM
  - This is a new channel-type where a channel operator or administrator can select which users are allowed to talk and send video to a channel. Use voiceUsers and videoUsers members of Channel to select who is allowed to transmit then afterwards call TT_DoUpdateChannel().
- TT_DoChannelOpEx()
  - Make another user operator of a channel by specifying the Channel's operator password.
- TT_DoQueryServerStats()
  - Ask the server for statistics regarding bandwidth usage.
- TT_GetServerStatistics()
  - After a successful call to TT_DoQueryServerStats() extract the server's statistics in a ServerStatistics struct.
- TT_DBG_SIZEOF()
  - Useful for developers making wrappers for the C-API DLL to get the size of structs used internally by the client instance.
- TT_DBG_EVENT_LAST()
  - Useful for developers making wrappers for the C-API DLL to ensure that events are numbered correctly.

# TeamTalk 4 SDK v. 4.0c release, March 7th 2010

Released on 2010/03/16.

## New Features in v. 4.0c

The new features in the TeamTalk 4 SDK v. 4.0c has are described in the following subsections.

### Note-field and user-data for user accounts

The UserAccount struct now has a new member called szNote which can contain extra information about a user account. The UserAccount and User structs now also has a nUserData integer field which can be used by developers to store an application specific value. After a successful login the nUserData field on UserAccount will be transferred to the nUserData field on the User struct.

### Get "my" User Account

After login it's now possible to retrieve one's own UserAccount by calling TT_GetMyUserAccount(). TT_GetMyUserData() can be used to extract one's nUserData of one's UserAccount.

### Swap @c HWND for events

When using TT_InitTeamTalk() a `HWND` is passed which is used for event handling. If at some point another `HWND` should be used for event handling this `HWND` can be swapped using TT_SwapTeamTalkHWND().

### Extract all Users on the Server

All users who are connected to a server can now be retrieved using TT_GetServerUsers().

## API Changes in v4.0c

The folder for audio storage has now been placed in User instead of on Channel. Audio storage is therefore user specific now instead of channel specific.

Renamed/modified functions:

- `TT_SetChannelAudioFolder`
  - Call `TT_SetUserAudioFolder` instead.

## Bug fixes in v. 4.0c

Here a list of bugs fixed in this release:

- Fixed TCP keep-alive timer not starting after connect event
- Improved performance for uploading/downloading files

# TeamTalk 4 SDK v. 4.0a release, November 22nd 2009

Released on 2009/11/23.

## New Features in v. 4.0a

The new features in the TeamTalk 4 SDK v. 4.0a has are described in the following subsections.

### Video Capturing from WebCams

TeamTalk can now capture video from webcams and encode it for transmission. Bandwidth usage can be as low as a 2-3 KBytes/sec in low resolutions. High resultions are, of course, also supported.

To start using the new video features checkout the following new functions:

- Call TT_GetVideoCaptureDevices to get a list of available capture devices.
- Call TT_InitVideoCaptureDevice to initialize the video capture device.
- Process `WM_TEAMTALK_USER_VIDEOFRAME` event.
- Call `TT_EnableTransmission` to transmit video data.

### User Accounts

The TeamTalk server can now be set to only allow users to log on if they have a user account on the server. The user account also introduces user types, so some users can have administrator capabilities.

Read the section Configurating the TeamTalk Server on how to configure the server with user accounts. To see the new functions in the TeamTalk DLL for handling user accounts check out the following new functions:

- Call TT_DoNewUserAccount to create a new user account. The user doing this must be administrator, i.e. USERTYPE_ADMIN.
- Call TT_DoDeleteUserAccount to delete a user account.
- Call TT_DoListUserAccounts to list all user accounts on the server.

### Track Command Completion

When calling any of the client to server commands listed in section Client/Server Commands a command ID is returned to the user application. This command ID can be used to track when the server has started and finished processing the command using the `WM_TEAMTALK_CMD_PROCESSING` event.

### Improved P2P Connections

The TeamTalk client now has better support for peer to peer data transmission and can now penetrate most NAT devices.

Check out section REMOVED for more information on P2P networking. P2P networking is enabled using the following functions:

- Call `TT_EnablePeerToPeer` to enable/disable peer to peer connections.

### Support for CELT audio codec

TeamTalk now not only supports the Speex codec, but also the CELT codec. The CELT codec gives much better audio quality but also requires higher bandwidth usage. If a user application is used to transmit music it is advised to use CELT since the sound quality will be must better than Speex. Speex is mainly for voice transmissions. Check out section Audio and Video Codecs to read more about the new codec.

Also note that the audio codec used by a client is now configured on a Channel and not on each individual client. This means that all users in a channel must now use the same audio settings. This restriction has been set to support echo-cancellation which is on the Known Issues.

## API Changes in v. 4.0a

This section outlines how TeamTalk 3 developers can adapt their existing applications to TeamTalk 4.

Renamed/modified functions:

- `TT_GetDefaultDevices`
  - Call TT_GetDefaultSoundDevices instead.
- `TT_GetInputDevicesCount`
  - Call `TT_GetSoundInputDevices` instead.
- `TT_GetInputDevice`
  - Call `TT_GetSoundInputDevices` instead.
- `TT_GetOutputDevicesCount`
  - Call `TT_GetSoundOutputDevices` instead.
- `TT_GetOutputDevice`
  - Call `TT_GetSoundOutputDevices` instead.
- `TT_LaunchSoundSystem`
  - Call TT_InitSoundInputDevice and TT_InitSoundOutputDevice instead.
- `TT_IsSoundSystemInitialized`
  - Check CLIENT_SNDINPUT_READY and CLIENT_SNDOUTPUT_READY instead.
- `TT_ShutdownSoundSystem`
  - Call TT_CloseSoundInputDevice and TT_CloseSoundOutputDevice instead.
- `TT_RestartSoundSystem`
  - Call TT_CloseSoundInputDevice and TT_InitSoundInputDevice instead. Similar way for output device.
- `TT_GetCurrentInputLevel`
  - Call TT_GetSoundInputLevel instead.
- `TT_SetMasterVolume`
  - Call TT_SetSoundOutputVolume instead.
- `TT_GetMasterVolume`
  - Call TT_GetSoundOutputVolume instead.
- `TT_MuteAll`
  - Call TT_SetSoundOutputMute instead.
- `TT_IsAllMute`
  - Check CLIENT_SNDOUTPUT_MUTE instead.
- `TT_IsDenoising`
  - Check `CLIENT_SNDINPUT_DENOISING` instead.
- `TT_SetVoiceGainLevel`
  - Call TT_SetSoundInputGainLevel instead.
- `TT_GetVoiceGainLevel`
  - Call TT_GetSoundInputGainLevel instead.
- `TT_IsVoiceActivated`
  - Check CLIENT_SNDINPUT_VOICEACTIVATED instead.
- `TT_EnableAutoPositioning`
  - Call TT_Enable3DSoundPositioning instead.
- `TT_IsConnected`
  - Check CLIENT_CONNECTED instead.
- `TT_IsConnecting`
  - Check CLIENT_CONNECTING instead.
- `TT_IsAuthorized`
  - Check CLIENT_AUTHORIZED instead.
- `TT_SetTcpKeepAliveInterval`
  - Call `TT_SetKeepAliveInterval` instead.
- `TT_GetTcpKeepAliveInterval`
  - Call `TT_GetKeepAliveInterval` instead.
- `TT_DoChangeNick`
  - Call TT_DoChangeNickname instead.
- `TT_DoUserMessage`
  - Call TT_DoTextMessage with message type MSGTYPE_USER instead.
- `TT_DoChannelMessage`
  - Call TT_DoTextMessage with message type MSGTYPE_CHANNEL instead.
- `TT_GetMessageOfTheDay`
  - Call TT_GetServerProperties instead.
- `TT_GetServerName`
  - Call TT_GetServerProperties instead.
- `TT_GetChannelParentID`
  - Use nParentID in Channel instead.
- `TT_GetChannelMessage`
  - Call `TT_GetTextMessage` instead.
- `TT_GetBroadcastMessage`
  - Call `TT_GetTextMessage` instead.
- `TT_GetUserMessage`
  - Call `TT_GetTextMessage` instead.
- `TT_IsUserMute`
  - Check `USERSTATE_MUTE` in uUserState of User struct.
- `TT_IsUserTalking`
  - Check `USERSTATE_TALKING` in uUserState of User struct.
- `TT_ForwardToAll`
  - Call `TT_EnablePeerToPeer` with parameter to false (the default setting).
- `TT_IsForwardingToAll`
  - Check that `CLIENT_P2P` is no enabled.
- `TT_GetBytesReceived`
- Call `TT_GetStatistics` instead.
- `TT_GetBytesSent`
- Call `TT_GetStatistics` instead.
- `TT_StartTransmitting`
  - Call `TT_EnableTransmission` instead.
- `TT_StopTransmitting`
  - Call `TT_EnableTransmission` instead.
- `TT_StartTransmittingWaveFile`
  - Call `TT_StartStreamingAudioFileToUser` or `TT_StartStreamingAudioFileToChannel` instead.
- `TT_StopTransmittingWaveFile`
  - Call `TT_StopStreamingAudioFileToUser` or `TT_StopStreamingAudioFileToChannel` instead.
- `TT_RegisterHotKey`
  - Call TT_HotKey_Register instead.
- `TT_UnregisterHotKey`
  - Call TT_HotKey_Unregister instead.
- `TT_IsHotKeyActive`
  - Call TT_HotKey_IsActive instead.
- `TT_GetChannelFilesCount`
  - Call TT_GetChannelFiles instead.
- `TT_GetChannelFileID`
  - Call TT_GetChannelFiles instead.
- `TT_DoUserSubscribe`
  - Call TT_DoSubscribe instead.
- `TT_DoUserUnsubscribe`
  - Call TT_DoUnsubscribe instead.

Removed functions:

- `TT_SetEncoderComplexity`
- `TT_GetEncoderComplexity`
- `TT_GetSamplesPerPacket`
- `TT_SetPlaybackMode`
- `TT_GetPlaybackMode`
- `TT_GetChannelUserCount`

Renamed/modified events:

- `WM_TEAMTALK_CONNECTSUCCESS`
  - Use `WM_TEAMTALK_CON_SUCCESS` instead.
- `WM_TEAMTALK_CONNECTFAILED`
  - Use `WM_TEAMTALK_CON_FAILED` instead.
- `WM_TEAMTALK_CONNECTIONLOST`
  - Use `WM_TEAMTALK_CON_LOST` instead.
- `WM_TEAMTALK_ACCEPTED`
  - Use `WM_TEAMTALK_CMD_MYSELF_LOGGEDIN` instead.
- `WM_TEAMTALK_ADDUSER`
  - Use `WM_TEAMTALK_CMD_USER_JOINED` instead.
- `WM_TEAMTALK_UPDATEUSER`
  - Use `WM_TEAMTALK_CMD_USER_UPDATE` instead.
- `WM_TEAMTALK_REMOVEUSER`
  - Use `WM_TEAMTALK_CMD_USER_LEFT` instead.
- `WM_TEAMTALK_ADDCHANNEL`
  - Use `WM_TEAMTALK_CMD_CHANNEL_NEW` instead.
- `WM_TEAMTALK_UPDATECHANNEL`
  - Use `WM_TEAMTALK_CMD_CHANNEL_UPDATE` instead.
- `WM_TEAMTALK_REMOVECHANNEL`
  - Use `WM_TEAMTALK_CMD_CHANNEL_REMOVE` instead.
- `WM_TEAMTALK_USERMESSAGE`
  - Use `WM_TEAMTALK_CMD_USER_TEXTMSG` instead.
- `WM_TEAMTALK_CHANNELMESSAGE`
  - Use `WM_TEAMTALK_CMD_USER_TEXTMSG` instead.
- `WM_TEAMTALK_KICKED`
  - Use `WM_TEAMTALK_CMD_MYSELF_KICKED` instead.
- `WM_TEAMTALK_SERVERUPDATE`
  - Use `WM_TEAMTALK_CMD_SERVER_UPDATE` instead.
- `WM_TEAMTALK_JOINEDCHANNEL`
  - Use `WM_TEAMTALK_CMD_MYSELF_JOINED` instead.
- `WM_TEAMTALK_ERROR`
  - Use `WM_TEAMTALK_CMD_ERROR` instead.
- `WM_TEAMTALK_USERTALKING`
  - Use `WM_TEAMTALK_USER_TALKING` instead.
- `WM_TEAMTALK_USERSTOPPEDTALKING`
  - Use `WM_TEAMTALK_USER_TALKING` instead.
- `WM_TEAMTALK_DIRCONNECTIONFAILED`
  - Use `WM_TEAMTALK_CON_P2P` instead.
- `WM_TEAMTALK_LISTCOMMAND_COMPLETED`
  - Use `WM_TEAMTALK_CMD_PROCESSING` instead.
- `WM_TEAMTALK_LEFTCHANNEL`
  - Use `WM_TEAMTALK_CMD_MYSELF_LEFT` instead.
- `WM_TEAMTALK_LOGGEDOUT`
  - Use `WM_TEAMTALK_CMD_MYSELF_LOGGEDOUT` instead.
- `WM_TEAMTALK_ADDFILE`
  - Use `WM_TEAMTALK_CMD_FILE_NEW` instead.
- `WM_TEAMTALK_REMOVEFILE`
  - Use `WM_TEAMTALK_CMD_FILE_REMOVE` instead.
- `WM_TEAMTALK_TRANSFER_BEGIN`
  - Use `WM_TEAMTALK_FILETRANSFER` instead.
- `WM_TEAMTALK_TRANSFER_COMPLETED`
  - Use `WM_TEAMTALK_FILETRANSFER` instead.
- `WM_TEAMTALK_TRANSFER_FAILED`
  - Use `WM_TEAMTALK_FILETRANSFER` instead.
- `WM_TEAMTALK_BROADCASTMESSAGE`
  - Use `WM_TEAMTALK_CMD_USER_TEXTMSG` instead.
- `WM_TEAMTALK_USERLOGGEDIN`
  - Use `WM_TEAMTALK_CMD_USER_LOGGEDIN` instead.
- `WM_TEAMTALK_USERLOGGEDOUT`
  - Use `WM_TEAMTALK_CMD_USER_LOGGEDOUT` instead.
- `WM_TEAMTALK_SOUNDDEVICE_ERROR`
  - Use `WM_TEAMTALK_INTERNAL_ERROR` instead.
- `WM_TEAMTALK_KEYTEST`
  - Use `WM_TEAMTALK_HOTKEY_TEST` instead.
- `WM_TEAMTALK_AUDIOFILE_STATUS`
  - Use `WM_TEAMTALK_USER_AUDIOFILE` instead.
- `WM_TEAMTALK_STREAMFILE_COMPLETED`
  - Use `WM_TEAMTALK_STREAM_AUDIOFILE_USER` instead.
- `WM_TEAMTALK_USER_SUBSCRIBERS_RESULT`
  - Use uLocalSubscriptions and uPeerSubscriptions in User instead.