Teamspeak3集成要注意的问题

本文介绍了Teamspeak3集成过程中的常见问题及解决方法,包括连接服务器时ChannelArray的正确设置、客户端静音功能的实现、调整Channel最大用户数以及录音功能的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Teamspeak3集成要注意的问题

2010-5-17

Kagula

这里采用的环境:

[1] ts3_sdk_3.0.0-beta3

[2]VS2008+SP1

问题一:调用ts3client_startConnection连接服务器时,ChannelArray的设置。

正确的应该是

char *ChannelArray[2];

char strNull[]={""};

ChannelArray[0] = pChannelName;

ChannelArray[1] = strNull;

/* Connect to server on localhost:9987 with nickname "client", no default channel, no default channel password and server password "secret" */

if((error = ts3client_startConnection(scHandlerID, identity, ip, port, nickname, ChannelArray, "", "secret")) != ERROR_ok) {

sprintf(msg,"Error connecting to server: %d/n", error);

OutputDebugStringA(msg);

return 1;

}

char ChanelArray[2][32]形式来设置Channel,调用API会产生错误!

若指定名称的通道不存在,不会产生错误提示,自动连接到默认通道!

问题二:Mute客户端的问题

发现使用ts3client_requestMuteClientsts3client_requestUnmuteClients两个函数不起作用(虽然函数返回结果看起来是正确的)。

我使用了下面的代码段来解决问题

bool CTeamSpeak::EnableMute() { if(m_bStop) return false; anyID clientID; if(ts3client_getClientID(scHandlerID,&clientID)!=ERROR_ok) { OutputDebugString(L"[CTeamSpeak::EnableMute]取clientID失败!/n"); return false; } anyID clientIDArray[2]; clientIDArray[0] = clientID; clientIDArray[1] = 0; if(ts3client_requestMuteClients(scHandlerID,clientIDArray,NULL)!=ERROR_ok) { OutputDebugString(L"[CTeamSpeak::EnableMute]ts3client_requestMuteClients失败!/n"); return false; } if(ts3client_closeCaptureDevice(scHandlerID)!= ERROR_ok) { OutputDebugString(L"Close CaptureDevice failed!/n"); return false; } return true; } bool CTeamSpeak::DisableMute() { if(m_bStop) return false; anyID clientID; if(ts3client_getClientID(scHandlerID,&clientID)!=ERROR_ok) { OutputDebugString(L"[CTeamSpeak::DisableMute]取clientID失败!/n"); return false; } anyID clientIDArray[2]; clientIDArray[0] = clientID; clientIDArray[1] = 0; if(ts3client_requestUnmuteClients(scHandlerID,clientIDArray,NULL)!=ERROR_ok) { OutputDebugString(L"[CTeamSpeak::EnableMute]ts3client_requestUnmuteClients失败!/n"); return false; } //if(ts3client_activateCaptureDevice(scHandlerID)!= ERROR_ok) //{ // OutputDebugString(L"Activeate CaptureDevice failed!/n"); // return false; //} int mode; char msg[64]; int error; /* Get default capture mode */ if( (error = ts3client_getDefaultCaptureMode(&mode)) != ERROR_ok) { sprintf(msg,"Error getting default capture mode: %d/n", error); OutputDebugStringA(msg); return false; } /* Open default capture device (Passing NULL for the device parameter opens the default device) */ if( (error=ts3client_openCaptureDevice(scHandlerID, mode, NULL)) != ERROR_ok) { sprintf(msg,"Error opening capture device: %d/n", error); OutputDebugStringA(msg); return false; } return true; } bool CTeamSpeak::IsMuted(bool &bMuted) { if(m_bStop) return false; int clientIsMuted; anyID clientID; if(ts3client_getClientID(scHandlerID,&clientID)!=ERROR_ok) { OutputDebugString(L"[CTeamSpeak::IsMuted]取clientID失败!/n"); return false; } if(ts3client_getClientVariableAsInt(scHandlerID, clientID, CLIENT_IS_MUTED, &clientIsMuted) != ERROR_ok) { OutputDebugString(L"Error querying client muted state/n"); return false; } if(clientIsMuted) bMuted=true; else bMuted=false; return true; }

其中IsMuted成员函数用来检查当前状态是否处于Mute

问题三:设置Channel的最大slots

设置当前VirtualServer的最大用户数为32,原来为8

参考TS3SDK中的ts3_server_example中的main.c

/* Maximum number of clients allowed per virtual server */

#define MAX_CLIENTS 32

设置0ChannelSlots数为16

ts3server_setChannelVariableAsInt(serverID, 0, CHANNEL_MAXCLIENTS, 16);

TS3免费版的限制:

Only one server process per machine

Only one virtual server per process

Only 32 slots

问题四:录音功能

录音的采样率和采样精度,默认和当前通道语音的采样率及采样精度无关。

使用ts3client_startVoiceRecording函数在客户端开启录音功能后

你可以使用下面的代码来录音

char g_FilenameOfRawData[256]; int lrintf(float x) { __asm cvtss2si eax, x } void float32_to_short(const float in[], short out[], int num_samples) { int n; for(n=0; n<num_samples; n++) { int tmp = lrintf(in[n] * 32768.0f); if (tmp > SHRT_MAX) { out[n] = SHRT_MAX; } else if (tmp < SHRT_MIN) { out[n] = SHRT_MIN; } else { out[n] = (short) tmp; } } } //这里省略若干行代码 //保存为,采样率22050,立体声,采样精度16比特的PCM文件! void onVoiceRecordDataEvent(const float* data,unsigned int dataSize) { FILE *fp = NULL; short *outData = NULL; outData = malloc(dataSize/4*sizeof(short)); if(outData==NULL) { OutputDebugString(L"[onVoiceRecordDataEvent]分配内存失败!/n"); return; } float32_to_short(data,outData,dataSize/4); fp = fopen(g_FilenameOfRawData,"ab"); if( NULL == fp ) { fp = fopen(g_FilenameOfRawData,"wb"); if(fp==NULL) { OutputDebugStringA("Create the file failed!/n"); return; } } fwrite(outData,sizeof(short),dataSize/4,fp); free(outData); fclose(fp); } //回调.end

测试录制的pcm文件内容是否正常,可以使用Cool Edit PRO软件。数据存储默认采用Intel大数端方式。

备注

[1]删除默认通道,会产生通道标志出错的提示信息,但是,删除自己建立的通道不存在这个问题。

[2]在当前OS中调用ts3server_initServerLib只能一次,所以ts3server里有virutual server的概念。

使用TS3MusicBot将当前的TAB声音流传输到TeamSpeak或Discord服务器 与任何音乐/媒体播放网站兼容。 适用于Chrome浏览器的多功能TS3MusicBot扩展。 特征:-与任何音乐/媒体播放网站兼容。 -将多个TS3MusicBots添加到您的连接列表。 -为您的连接设置自己喜欢的名称。 -每个TS3MusicBot Web界面的联机/脱机状态。 -将您的浏览器声音流式传输到选定的TS3MusicBot! -将当前的“ ACTIVE TAB” URL发送到您的TS3MusicBot进行播放。 -显示“正在播放”(当前歌曲)信息(如果有)。 -底部的其他URL字段可粘贴并将其他任何受支持的URL发送到TS3MusicBot进行播放。 -将当前的ACTIVE TAB URL添加到TS3MusicBot的播放队列中。 -单击以打开TS3MusicBot Web界面的按钮。 -暂停/播放,停止,上一个,下一个和音量控制按钮。 -自动登录到添加到连接列表中的所有TS3MusicBots。 如果会话过期,则不再手动登录。 您没有TS3MusicBot吗? 托管解决方案(来自我们自己的官方托管):https://www.musicbot4you.net自己托管(在您自己Linux或Windows计算机上运行。获取软件和许可证):https://www.ts3musicbot.net (私人许可证最多包括6个正在运行的机器人!)或选择我们的托管合作伙伴之一:https://www.ts3musicbot.net/index.php?mode=hosterlist设置说明:TS3MusicBot用作接收服务器,它使用随机的免费TCP端口。 如果您的TS3MusicBot应该使用固定的TCP端口来打开路由器或防火墙中的端口,则可以使用例如来启动TS3MusicBot。 &#39;-streaming-port 9000&#39;,将流端口设置为TCP9000。更改日志:-------------------------------- --------- 1.1.4(26.08.2019):-------------------------------- ---------修复了缩小过程中破坏代码的问题。 ----------------------------------------- 1.1.1(25.08.2019): -----------------------------------------已更新网站商店的条款和条件。 ----------------------------------------- 1.1.0(17.02.2019): ----------------------------------------- *修复了机器人侧无法播放声音的问题如果WebStream在没有播放任何内容的情况下启动了,并且在WebStream开始后又开始了播放。 ----------------------------------------- 1.0.9(17.02.2019): ----------------------------------------- *新增了对暂停或静默标签流的支持。 *修复了播放暂停和恢复后的延迟问题。 ----------------------------------------- 1.0.8(15.02.2019): ----------------------------------------- * *时显示红色图标流媒体。 原来的黑色一会儿就不流了。 *在概述的右上角显示当前版本。 *修正不添加以/字符结尾的机器人网址的连接。 *如果添加了诸如“ http:// host:port / xxxxx.htm”之类的URL,则在添加连接之前,将删除“ /xxxxx.htm”。 *工具提示现在仅在鼠标悬停时显示,而不是在单击时保持打开状态。 *如果保存的密码不再起作用(在服务器端更改),则以橙色符号添加登录失败状态。 ----------------------------------------- 1.0.7(15.02.2019): ----------------------------------------- *首次公开发行。 支持语言:English
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值