最近要实现在虚幻引擎中获取bilibili直播弹幕的功能,在网上搜了一圈,很少有使用虚幻实现该功能的文章,于是参考文章 bilibili直播间接收监听和发送弹幕api_b站弹幕api_NPC_P的博客-CSDN博客用两种方法实现了该功能。
获取弹幕的关键在向api.live.bilibili.com/ajax/msg?ro… 发出请求,会获取到最近10条弹幕的回复。 一、在虚幻引擎C++代码中实现
DanMuGet.h
UFUNCTION(BlueprintCallable)
void GetDanmu(FString RoomID);
DanMuGet.cpp
void ADanMuGet::GetDanmu(FString RoomID)
{
/**json 数据**/
FString Serverdata;
TSharedRef<IHttpRequest> HttpRequest=FHttpModule::Get().CreateRequest();
HttpRequest->SetVerb("GET");//设置为Get方法
HttpRequest->SetURL("http://api.live.bilibili.com/ajax/msg?roomid="+RoomID);//设置链接
HttpRequest->SetContentAsString(Serverdata);
HttpRequest->OnProcessRequestComplete().BindUObject(this,&ADanMuGet::ProcessRequestComplete);//绑定到该函数
HttpRequest->ProcessRequest();//发送请求
}
void ADanMuGet::ProcessRequestComplete(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded)
{
if (!HttpRequest.IsValid() || !HttpResponse.IsValid()) {
return;
}
int32 responseCode = HttpResponse->GetResponseCode();
FString MessageBody = HttpResponse->GetContentAsString();
if(bSucceeded&&EHttpResponseCodes::IsOk(responseCode))
{
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(MessageBody);
TSharedPtr<FJsonObject> JsonObject;
if(FJsonSerializer::Deserialize(Reader,JsonObject))
{
TArray<TSharedPtr<FJsonValue>> TempObject=JsonObject->GetObjectField("data")->GetArrayField("room");
for(auto room:TempObject)
{
FString nickname=room->AsObject()->GetStringField("nickname")+":";
FString text=room->AsObject()->GetStringField("text");
GetDanmus(nickname+text);
}
}
}
}
二、使用蓝图实现
具体流程参照UE4中调用HTTP接口获取JSON数据 - 简书 (jianshu.com),使用VaRest插件来实现。发送请求和解析json信息如下图。
返回的结果如下图。
返回的json数据结构如下图