Comments (15)
我遇到同样的问题,debug后了一下发现了问题,修改后成功运行 原因:SendMessageAsyncTask.cpp发送客户端音频数据线程初始化时
T->IsValidLowLevel()
的问题void FSendMessageAsyncTask::DoWork() { UClientGameInstance* T = Cast<UClientGameInstance>(Owner); while (!bStop) { FPlatformProcess::Sleep(0.5); if (T->IsValidLowLevel() || Socket == nullptr || T->StopSocket) { break; } if (T->ClientBuffData.Num() == 0) { continue; } BuffSize = 0; #if NO_PROTOBUF if (T->BuffDataSize > 3) { if (T->ClientBuffData[T->BuffDataSize - 1] == '!' && T->ClientBuffData[T->BuffDataSize - 2] == '?') { Buff = T->ClientBuffData; BuffSize = Buff.Num(); } } #else if (T->BuffDataSize > 3) { if (T->ClientBuffData[T->BuffDataSize - 1] == '!' && T->ClientBuffData[T->BuffDataSize - 2] == '?') { T->ClientBuffData.RemoveAt(T->ClientBuffData.Num() - 1); T->ClientBuffData.RemoveAt(T->ClientBuffData.Num() - 1); Buff = T->ClientBuffData; BuffSize = Buff.Num(); } } #endif if (BuffSize != 0) { int32 NowSize; if (!Socket->Send(Buff.GetData(), BuffSize, NowSize)) { AsyncTask(ENamedThreads::GameThread, [=] { UE_LOG(SendMessageTaskLog, Error, TEXT("发送消息失败")); }); } AsyncTask(ENamedThreads::GameThread, [=] { UE_LOG(SendMessageTaskLog, Error, TEXT("发送数据量:%d"), NowSize); GEngine->AddOnScreenDebugMessage(-1, 1000.f, FColor::Red, FString(TEXT("发送数据量:")) + FString::FromInt(NowSize)); T->CloseBuff(); }); } } }
debug发现IsValidLowLevel()方法返回了True,直接跳出了循环导致发送音频文件的线程中断,网上查了下该方法的作用:
IsValidLowLevel是UE5引擎中的一个函数,它的作用是检查一个UObject对象是否有效。在UE5游戏中,UObject是所有实例对象的基类,因此这个函数可以用来检查任何类型的对象是否有效。如果使用无效的对象指针,很可能会导致游戏崩溃或出现其他异常情况。
此处返回True说明该对象有效,所以不应该break,反之对象无效时break,所以只需要将该方法值取反即可,如下:if (!(T->IsValidLowLevel()) || Socket == nullptr || T->StopSocket) { break; }
@kxylxx @QSWWLTN @zzz-xxx123 @Wuduo1234 希望可以帮到大家
66666 有用
from digitallife.
用网盘发布的打包版本是可以连上服务器的,而且可以正常发送。这个没打包的版本能连上但是没法发送音频数据,也没有错误日志
from digitallife.
用网盘发布的打包版本是可以连上服务器的,而且可以正常发送。这个没打包的版本能连上但是没法发送音频数据,也没有错误日志
是的,我也有同样的情况
from digitallife.
我运行运行文件,生成了一个TEST的wav就没下文了,连个报错都没给
from digitallife.
我运行运行文件,生成了一个TEST的wav就没下文了,连个报错都没给
是的我也是这样,估计是他代码还没上传完整
from digitallife.
执行这个SendWavFile是正常的,你可以开启游戏窗口后看有没有出现Log,最好把Log信息和服务器Log一起截图给我
from digitallife.
如果出现了发送数据的Log的话,请检查下服务器是否是正常连接上
from digitallife.
如果出现了发送数据的Log的话,请检查下服务器是否是正常连接上
是有连接服务器的,但是没有发送数据的log
from digitallife.
这个是连接成功,以及保存了Test.wav的日志,但是没有发送
from digitallife.
遇到同样问题,请教一下,这个问题解决了吗?
from digitallife.
问一下 这个项目的 启动器要怎么和服务器端关联
from digitallife.
客户端有出现一个红色的发送数据量:xxxx之类的消息嘛?
from digitallife.
问一下 这个项目的 启动器要怎么和服务器端关联
编辑器模式下可以手动输入IP地址和服务器端连接
from digitallife.
客户端有出现一个红色的发送数据量:xxxx之类的消息嘛?
没有。像上面说的,生成完Test.wav之后就什么都没发生了
from digitallife.
我遇到同样的问题,debug后了一下发现了问题,修改后成功运行
原因:SendMessageAsyncTask.cpp发送客户端音频数据线程初始化时T->IsValidLowLevel()
的问题
void FSendMessageAsyncTask::DoWork() {
UClientGameInstance* T = Cast<UClientGameInstance>(Owner);
while (!bStop) {
FPlatformProcess::Sleep(0.5);
if (T->IsValidLowLevel() || Socket == nullptr || T->StopSocket) {
break;
}
if (T->ClientBuffData.Num() == 0) {
continue;
}
BuffSize = 0;
#if NO_PROTOBUF
if (T->BuffDataSize > 3) {
if (T->ClientBuffData[T->BuffDataSize - 1] == '!' && T->ClientBuffData[T->BuffDataSize - 2] == '?') {
Buff = T->ClientBuffData;
BuffSize = Buff.Num();
}
}
#else
if (T->BuffDataSize > 3) {
if (T->ClientBuffData[T->BuffDataSize - 1] == '!' && T->ClientBuffData[T->BuffDataSize - 2] == '?') {
T->ClientBuffData.RemoveAt(T->ClientBuffData.Num() - 1);
T->ClientBuffData.RemoveAt(T->ClientBuffData.Num() - 1);
Buff = T->ClientBuffData;
BuffSize = Buff.Num();
}
}
#endif
if (BuffSize != 0) {
int32 NowSize;
if (!Socket->Send(Buff.GetData(), BuffSize, NowSize)) {
AsyncTask(ENamedThreads::GameThread, [=] {
UE_LOG(SendMessageTaskLog, Error, TEXT("发送消息失败"));
});
}
AsyncTask(ENamedThreads::GameThread, [=] {
UE_LOG(SendMessageTaskLog, Error, TEXT("发送数据量:%d"), NowSize);
GEngine->AddOnScreenDebugMessage(-1, 1000.f, FColor::Red, FString(TEXT("发送数据量:")) + FString::FromInt(NowSize));
T->CloseBuff();
});
}
}
}
debug发现IsValidLowLevel()方法返回了True,直接跳出了循环导致发送音频文件的线程中断,网上查了下该方法的作用:IsValidLowLevel是UE5引擎中的一个函数,它的作用是检查一个UObject对象是否有效。在UE5游戏中,UObject是所有实例对象的基类,因此这个函数可以用来检查任何类型的对象是否有效。如果使用无效的对象指针,很可能会导致游戏崩溃或出现其他异常情况。
此处返回True说明该对象有效,所以不应该break,反之对象无效时break,所以只需要将该方法值取反即可,如下:
if (!(T->IsValidLowLevel()) || Socket == nullptr || T->StopSocket) {
break;
}
@kxylxx @QSWWLTN @zzz-xxx123 @Wuduo1234 希望可以帮到大家
from digitallife.
Related Issues (18)
- 各位有能编译成功跑起来的吗 HOT 2
- 探究一些报错和告警的原因 HOT 6
- 在对话过程中有回音的问题 HOT 11
- 请问android的怎么打包,我打包出来的怎么跟他对话,没得声音 HOT 5
- 这个APP图标怎么换啊 HOT 1
- 基础知识相关 HOT 3
- 拉下来编译就错误,是什么原因呢? HOT 7
- 编译的APK放大屏手机安装了,填IP端口后没有画面 HOT 2
- 放在这种大屏安卓系统上,点麦克风为啥不能录音,有时候程序运行了对话能收到第一条录音,后面再说就不行了
- 模型問題 HOT 3
- 什么报错都没有就 就在Temp/Test.wav倒出了音频就没下文了 HOT 14
- 想请教一下大佬是用什么工具建模的呀 HOT 2
- 状态机怎么设置,求助 HOT 1
- UE5怎么打包成windows应用程序啊 HOT 7
- 怎么在UE5 蓝图里操作,将派蒙换成云飞,或者其他自己制作的数字人 HOT 9
- 想请教一下ExpressionTable里面的变量是在哪里定义的
- 调试的时候提示未加载UnrealEditor-SkeletalMeshUtilitiesCommon.pdb HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from digitallife.