增加 OnStartCall 方法
//VideoCallWidget.h
...
UCLASS()
class AGORAVIDEOCALL_API UVideoCallWidget : public UUserWidget
{
GENERATED_BODY()
public:
...
void OnStartCall( const FString& ChannelName, const FString& EncryptionKey, const FString& EncryptionType );
...
};
//VideoCallWidget.cpp
void UVideoCallWidget::OnStartCall(
const FString& ChannelName,
const FString& EncryptionKey,
const FString& EncryptionType)
{
if (!VideoCallPtr)
{
return;
}
auto OnLocalFrameCallback = [this](
std::uint8_t* Buffer,
std::uint32_t Width,
std::uint32_t Height,
std::uint32_t Size)
{
VideoCallViewWidget->UpdateAdditionalVideoBuffer(Buffer, Width, Height, Size);
};
VideoCallPtr->RegisterOnLocalFrameCallback(OnLocalFrameCallback);
auto OnRemoteFrameCallback = [this](
std::uint8_t* Buffer,
std::uint32_t Width,
std::uint32_t Height,
std::uint32_t Size)
{
VideoCallViewWidget->UpdateMainVideoBuffer(Buffer, Width, Height, Size);
};
VideoCallPtr->RegisterOnRemoteFrameCallback(OnRemoteFrameCallback);
VideoCallPtr->StartCall(ChannelName, EncryptionKey, EncryptionType);
}
增加 OnEndCall方法
//VideoCallWidget.h
...
UCLASS()
class AGORAVIDEOCALL_API UVideoCallWidget : public UUserWidget
{
GENERATED_BODY()
public:
...
UFUNCTION(BlueprintCallable)
void OnEndCall();
...
};
//VideoCallWidget.cpp
void UVideoCallWidget::OnEndCall()
{
if (VideoCallPtr)
{
VideoCallPtr->StopCall();
}
if (VideoCallViewWidget)
{
VideoCallViewWidget->ResetBuffers();
}
if (PlayerController)
{
SetVisibility(ESlateVisibility::Collapsed);
PlayerController->EndCall(std::move(VideoCallPtr));
}
}
增加 OnMuteLocalAudio 方法
//VideoCallWidget.h
...
UCLASS()
class AGORAVIDEOCALL_API UVideoCallWidget : public UUserWidget
{
GENERATED_BODY()
public:
...
UFUNCTION(BlueprintCallable)
void OnMuteLocalAudio();
...
};
//VideoCallWidget.cpp
void UVideoCallWidget::OnMuteLocalAudio()
{
if (!VideoCallPtr)
{
return;
}
if (VideoCallPtr->IsLocalAudioMuted())
{
VideoCallPtr->MuteLocalAudio(false);
SetAudioButtonToMute();
}
else
{
VideoCallPtr->MuteLocalAudio(true);
SetAudioButtonToUnMute();
}
}
增加 OnChangeVideoMode方法
//VideoCallWidget.h
...
UCLASS()
class AGORAVIDEOCALL_API UVideoCallWidget : public UUserWidget
{
GENERATED_BODY()
public:
...
UFUNCTION(BlueprintCallable)
void OnChangeVideoMode();
...
};
//VideoCallWidget.cpp
void UVideoCallWidget::OnChangeVideoMode()
{
if (!VideoCallPtr)
{
return;
}
if (!VideoCallPtr->IsLocalVideoMuted())
{
VideoCallPtr->MuteLocalVideo(true);
SetVideoModeButtonToCameraOn();
}
else
{
VideoCallPtr->EnableVideo(true);
VideoCallPtr->MuteLocalVideo(false);
SetVideoModeButtonToCameraOff();
}
}
增加 Blueprint 类
确保C++代码正确编译。没有成功编译的项目,你将无法进行下一步的操作。如果你已经成功地编译了C++代码,但在虚幻编辑器中仍然没有看到所需的类,请尝试重新打开项目。










