虚幻引擎 C++ 实现bilibili直播获取弹幕

460 阅读1分钟

最近要实现在虚幻引擎中获取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信息如下图。

image.png

image.png

返回的结果如下图。

image.png

返回的json数据结构如下图 image.png