I am using Unity 2022.3.15f and Vuforia 10.22.5
I am trying to create image targets by API in runtime and attach quad with video to each image targets
It works well in unity but when i build android version my video player works very bad
where can be misstake? i have simular app in unity 2019.4.0f but there i create targets by database downloaded from target manager in vuforia
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Video;
using Vuforia;
public class GetJson : MonoBehaviour
{
[SerializeField] private string url = "https://api.arstudio.kz/api/ar?groupId=82";
[SerializeField] private RootObject loadinfolist = new RootObject();
public GameObject Model;
public UnityEngine.UI.Image LoadingLogo;
private string path;
private float loadProgress = 0.0f;
private void Start()
{
path = Application.persistentDataPath; // Установка пути один раз
VuforiaApplication.Instance.OnVuforiaInitialized += OnVuforiaInitialized;
}
void OnVuforiaInitialized(VuforiaInitError error)
{
StartCoroutine(SendReq());
}
private IEnumerator SendReq()
{
using (UnityWebRequest request = UnityWebRequest.Get(url))
{
yield return request.SendWebRequest();
if (request.result != UnityWebRequest.Result.Success)
{
Debug.Log(request.error);
}
else
{
loadinfolist = JsonUtility.FromJson<RootObject>(request.downloadHandler.text);
StartCoroutine(WebAR());
}
}
}
private IEnumerator WebAR()
{
foreach (Datum data in loadinfolist.data)
{
yield return StartCoroutine(DownloadAndSetupContent(data));
}
}
private IEnumerator DownloadAndSetupContent(Datum data)
{
yield return StartCoroutine(DownloadVideo(data.video_path, data.id, data.group_id));
yield return StartCoroutine(DownloadImageAndCreateTarget(data.file_path, data.id, data.group_id));
}
private IEnumerator DownloadVideo(string videoPath, int id, int groupId)
{
string savePath = $"{path}/{id}_{groupId}.mp4";
using (UnityWebRequest uwr = UnityWebRequest.Get(videoPath))
{
yield return uwr.SendWebRequest();
if (uwr.result == UnityWebRequest.Result.Success)
{
System.IO.File.WriteAllBytes(savePath, uwr.downloadHandler.data);
loadProgress += 1.0f / loadinfolist.data.Length;
LoadingLogo.fillAmount = loadProgress;
Debug.Log("Video downloaded to: " + savePath);
}
else
{
Debug.Log(uwr.error);
}
}
}
private IEnumerator DownloadImageAndCreateTarget(string imagePath, int id, int groupId)
{
using (UnityWebRequest uwr = UnityWebRequestTexture.GetTexture(imagePath))
{
yield return uwr.SendWebRequest();
if (uwr.result == UnityWebRequest.Result.Success)
{
Texture2D texture = DownloadHandlerTexture.GetContent(uwr);
CreateImageTargetFromDownloadedTexture(id, $"{path}/{id}_{groupId}.mp4", texture);
}
else
{
Debug.Log(uwr.error);
}
}
}
void CreateImageTargetFromDownloadedTexture(int id, string videoUrl, Texture2D img)
{
var mTarget = VuforiaBehaviour.Instance.ObserverFactory.CreateImageTarget(img, 1.0f, id.ToString());
mTarget.gameObject.AddComponent<DefaultObserverEventHandler>();
GameObject cube = Instantiate(Model, mTarget.transform);
cube.transform.localScale = new Vector3(mTarget.GetSize().x, mTarget.GetSize().y, 1.0f);
VideoPlayer player = cube.GetComponent<VideoPlayer>();
player.url = videoUrl;
EventHandler eventHandler = mTarget.gameObject.AddComponent<EventHandler>();
Debug.Log("Target with video player created for: " + id);
}
}
[System.Serializable]
public class Group
{
[SerializeField] public int id;
[SerializeField] public string name;
[SerializeField] public string created_at;
[SerializeField] public string updated_at;
[SerializeField] public int user_id;
}
[System.Serializable]
public class Datum
{
[SerializeField] public int id ;
[SerializeField] public int group_id ;
[SerializeField] public int user_id ;
[SerializeField] public string file_path ;
[SerializeField] public string video_path ;
[SerializeField] public string mind_file_path ;
[SerializeField] public string status ;
[SerializeField] public int is_deleted ;
[SerializeField] public string created_at ;
[SerializeField] public string updated_at ;
[SerializeField] public int width ;
[SerializeField] public int height ;
}
New contributor
Сакен Карленов is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.