У меня проблемы с трансляцией рендеринга Unity3D. Я все это настроил, и кажется, что он транслируется, но изображение, которое я получаю, неправильного цвета и растянуто по вертикали.
Вот - некоторые примеры.
и вот код, который я использую:
using UnityEngine.UI;
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
using agora_gaming_rtc;
public class AgoraScript : MonoBehaviour
{
public InputField Inpt_ChannelName;
static VideoChatCallbacks app = null;
private string HomeSceneName = "SceneHome";
private string PlaySceneName = "SceneHelloVideo";
private string AppID = "db1e101520084a2aabdda11454379bca";
public GameObject Btn_Join_Obj;
public GameObject Btn_Leave_Obj;
public Texture2D mTexture;
public RenderTexture MyRTTexture;
public Texture2D Kitten;
int i = 100;
public void Btn_Join_Fun()
{
if (ReferenceEquals(app, null))
{
app = new VideoChatCallbacks(); // create app
app.loadEngine(AppID); // load engine
}
app.join(Inpt_ChannelName.text);
mTexture = new Texture2D((int)MyRTTexture.width, (int)MyRTTexture.height, TextureFormat.ARGB32, false);
Btn_Join_Obj.SetActive(false);
Btn_Leave_Obj.SetActive(true);
}
public void Btn_Leave_Fun()
{
if (!ReferenceEquals(app, null))
{
app.leave(); // leave channel
app.unloadEngine(); // delete engine
app = null; // delete app
}
Btn_Join_Obj.SetActive(true);
Btn_Leave_Obj.SetActive(false);
}
void OnApplicationPause(bool paused)
{
if (!ReferenceEquals(app, null))
{
app.EnableVideo(paused);
}
}
public void Btn_DisableChatVideo()
{
app.DisableChatVideo();
}
public void Btn_EnableChatVideo()
{
app.EnableChatVideo();
}
void OnApplicationQuit()
{
if (!ReferenceEquals(app, null))
{
Debug.Log("OnApplicationQuit");
app.unloadEngine();
}
}
IEnumerator shareScreen()
{
yield return new WaitForEndOfFrame();
RenderTexture.active = MyRTTexture;
mTexture.ReadPixels(new Rect(0, 0, MyRTTexture.width, MyRTTexture.height), 0, 0);
mTexture.Apply();
byte[] bytes = mTexture.GetRawTextureData();
int size = Marshal.SizeOf(bytes[0]) * bytes.Length;
IRtcEngine rtc = IRtcEngine.QueryEngine();
if (rtc != null)
{
ExternalVideoFrame externalVideoFrame = new ExternalVideoFrame();
externalVideoFrame.type = ExternalVideoFrame.VIDEO_BUFFER_TYPE.VIDEO_BUFFER_RAW_DATA;
externalVideoFrame.format = ExternalVideoFrame.VIDEO_PIXEL_FORMAT.VIDEO_PIXEL_BGRA;
externalVideoFrame.buffer = bytes;
externalVideoFrame.stride = MyRTTexture.width;
externalVideoFrame.height = MyRTTexture.height;
//externalVideoFrame.cropLeft = 10;
//externalVideoFrame.cropTop = 10;
//externalVideoFrame.cropRight = 10;
//externalVideoFrame.cropBottom = 10;
//externalVideoFrame.rotation = 90;
externalVideoFrame.timestamp = i++;
int a = rtc.PushVideoFrame(externalVideoFrame);
Debug.Log(" pushVideoFrame = " + a);
}
}
void Update()
{
if (Btn_Leave_Obj.activeSelf == true)
{
StartCoroutine(shareScreen());
}
}
}
Я не думаю, что делаю что-то настолько странное. Соединение - это другой сценарий, но он содержит mRtcEngine.SetExternalVideoSource(true, false);
.
Как я уже сказал, на самом деле он транслирует видео просто неправильно.
Любая помощь с этим будет очень признательна. Уже 2 дня пытаюсь разобраться.
Всего наилучшего !!