I am developing OpenVidu using Unity.
Creating a session in Unity and doing JoinRoom
PublishVideo throws a Java.lang.NullException error.
If you look at the API documentation, all parameters are normally entered.
What’s the problem?
Below is the source code.
private IEnumerator Connect()
{
UnityWebRequest SessionRequest = UnityWebRequest.Get($“https://{Server}/api/sessions/” + Room);
SessionRequest.SetRequestHeader(“Authorization”, "Basic " + EncodedSecret);
SessionRequest.certificateHandler = new AcceptAllCertificatesSignedWithASpecificKeyPublicKey();
yield return SessionRequest.SendWebRequest();
bool sessionOk = false;
string token = "";
if (SessionRequest.isNetworkError)
{
Debug.Log("Error While Sending: " + SessionRequest.error);
}
else
{
Debug.Log($"Received{SessionRequest.responseCode}: {SessionRequest.downloadHandler.text}");
session = JsonConvert.DeserializeObject<OpenViduSessionInfo>(SessionRequest.downloadHandler.text);
sessionOk = true;
}
if (SessionRequest.responseCode == 404)
{
Debug.Log("Creating Session");
SessionRequest = new UnityWebRequest($"https://{Server}/api/sessions", "POST");
byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes("{\"customSessionId\": \"" + Room + "\"}");
SessionRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(jsonToSend);
SessionRequest.SetRequestHeader("Authorization", "Basic " + EncodedSecret);
SessionRequest.SetRequestHeader("Content-Type", "application/json");
SessionRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
SessionRequest.certificateHandler = new AcceptAllCertificatesSignedWithASpecificKeyPublicKey();
yield return SessionRequest.SendWebRequest();
if (SessionRequest.isNetworkError)
{
Debug.Log("Error While Sending: " + SessionRequest.error);
}
else
{
Debug.Log($"Received{SessionRequest.responseCode}: {SessionRequest.downloadHandler.text}");
sessionOk = true;
}
}
if (sessionOk)
{
string strSession1 = "{\"session\": \"" + Room + "\"}"; //"{\"session\": \"TestWebcam\"}";
byte[] json1 = new UTF8Encoding().GetBytes(strSession1);
Debug.Log("Asking for a token");
SessionRequest = new UnityWebRequest($"https://{Server}/openvidu/api/tokens", "POST");
SessionRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(json1);
SessionRequest.SetRequestHeader("Authorization", "Basic " + EncodedSecret);
SessionRequest.SetRequestHeader("Content-Type", "application/json");
SessionRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
SessionRequest.certificateHandler = new AcceptAllCertificatesSignedWithASpecificKeyPublicKey();
yield return SessionRequest.SendWebRequest();
if (SessionRequest.isNetworkError)
{
Debug.Log("Error While Sending: " + SessionRequest.error);
}
else
{
Debug.Log($"Received{SessionRequest.responseCode}: {SessionRequest.downloadHandler.text}");
var t = JsonConvert.DeserializeObject<OpenViduToken>(SessionRequest.downloadHandler.text);
token = t.token;
Debug.Log($"Token :{token}");
}
}
// Connection
if (sessionOk)
{
SessionRequest = new UnityWebRequest($"https://{Server}/openvidu/api/sessions/{Room}/connection", "POST");
string uploadBody = "{\"type\": \"WEBRTC\"," +
"\"data\": \"My Server Data\"," +
"\"record\": false," +
"\"role\": \"PUBLISHER\"," +
"\"kurentoOptions\": {" +
"\"videoMaxRecvBandwidth\": 1000," +
"\"videoMinRecvBandwidth\": 300," +
"\"videoMaxSendBandwidth\": 1000," +
"\"videoMinSendBandwidth\": 300," +
"\"allowedFilters\": [" +
"\"GStreamerFilter\"," +
"\"ZBarFilter\"" +
"]" +
"}" +
"}";
byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(uploadBody);
SessionRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(jsonToSend);
SessionRequest.SetRequestHeader("Authorization", "Basic " + EncodedSecret);
SessionRequest.SetRequestHeader("Content-Type", "application/json");
SessionRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
SessionRequest.certificateHandler = new AcceptAllCertificatesSignedWithASpecificKeyPublicKey();
yield return SessionRequest.SendWebRequest();
if (SessionRequest.isNetworkError)
{
Debug.Log("Error While Sending: " + SessionRequest.error);
}
else
{
Debug.Log($"Received{SessionRequest.responseCode}: {SessionRequest.downloadHandler.text}");
string LocalTempName = SessionRequest.downloadHandler.text.Substring(7, 14);
// Connection
SessionRequest = UnityWebRequest.Get($"https://{Server}/openvidu/api/sessions/{Room}/connection/{LocalTempName}");
SessionRequest.SetRequestHeader("Authorization", "Basic " + EncodedSecret);
SessionRequest.certificateHandler = new AcceptAllCertificatesSignedWithASpecificKeyPublicKey();
yield return SessionRequest.SendWebRequest();
if (SessionRequest.isNetworkError)
{
Debug.Log("Error While Sending: " + SessionRequest.error);
}
else
{
Debug.Log($"Received{SessionRequest.responseCode}: {SessionRequest.downloadHandler.text}");
}
}
}
// connect WebSocket
webSocket = gameObject.GetComponent<UnityWebSocket>();
webSocket.Connect();
yield return new WaitForSeconds(1f);
long i = idMessage++;
webSocket.SendText("{\"jsonrpc\": \"2.0\"," +
"\"method\": \"joinRoom\"," +
"\"params\": {" +
"\"token\": \"" + token + "\"," +
"\"session\": \"" + Room + "\"," +
//"\"platform\": \"Chrome 76.0.3809.132 on Linux 64-bit\"," +
"\"platform\": \"Chrome 99.0.4844.51 on Windows 10 64-bit\"," +
"\"metadata\": \"{clientData: TestClient}\"," +
"\"secret\": \"" + Secret + "\", " +
"\"recorder\": false }," +
"\"id\": " + i + " }");
messages.Add(i, OpenViduType.JoinRoom);
}