Unity3d 为什么在unity中从服务器获取视频到原始图像组件不';不行?
我正试图从我的“Json”文件中获取一个视频,我将其上传到azure服务器上unity中的原始图像组件,但它看起来是这样的: 要获得图片,它可以正常工作,但对于视频mp4,它不能正常工作,代码如下:Unity3d 为什么在unity中从服务器获取视频到原始图像组件不';不行?,unity3d,httpwebrequest,video-player,rawimage,Unity3d,Httpwebrequest,Video Player,Rawimage,我正试图从我的“Json”文件中获取一个视频,我将其上传到azure服务器上unity中的原始图像组件,但它看起来是这样的: 要获得图片,它可以正常工作,但对于视频mp4,它不能正常工作,代码如下: using UnityEngine ; using UnityEngine.Networking ; using UnityEngine.UI ; using System.Collections ; // Json data format /* { "Na
using UnityEngine ;
using UnityEngine.Networking ;
using UnityEngine.UI ;
using System.Collections ;
// Json data format
/*
{
"Name" : "..." ,
"VideoURL" : "..."
}
*/
public struct Data {
public string Name ;
public string VideoURL ;
}
public class Demo : MonoBehaviour {
[SerializeField] Text uiNameText ;
[SerializeField] RawImage uiRawImage ;
string jsonURL = "https://myserver..." ;
void Start () {
StartCoroutine (GetData (jsonURL)) ;
}
IEnumerator GetData (string url) {
UnityWebRequest request = UnityWebRequest.Get (url) ;
yield return request.SendWebRequest() ;
if (request.isNetworkError || request.isHttpError) {
// error ...
} else {
// success...
Data data = JsonUtility.FromJson<Data> (request.downloadHandler.text) ;
// print data in UI
uiNameText.text = data.Name ;
// Load video:
StartCoroutine (GetVideo (data.VideoURL)) ;
}
// Clean up any resources it is using.
request.Dispose () ;
}
IEnumerator GetVideo (string url) {
UnityWebRequest request = UnityWebRequest.GetTexture (url) ;
yield return request.SendWebRequest() ;
if (request.isNetworkError || request.isHttpError) {
// error ...
} else {
//success...
uiRawImage.texture = ((DownloadHandlerTexture)request.downloadHandler).texture ;
}
// Clean up any resources it is using.
request.Dispose () ;
}
}
使用UnityEngine;
使用UnityEngine。联网;
使用UnityEngine.UI;
使用系统集合;
//Json数据格式
/*
{
“姓名”:“…”,
“视频URL”:“…”
}
*/
公共结构数据{
公共字符串名称;
公共字符串VideoURL;
}
公共课堂演示:单行为{
[SerializeField]文本为文本;
[SerializeField]RawImage uiRawImage;
字符串jsonURL=”https://myserver..." ;
无效开始(){
start例程(GetData(jsonURL));
}
IEnumerator获取数据(字符串url){
UnityWebRequest=UnityWebRequest.Get(url);
生成返回请求。SendWebRequest();
if(request.isNetworkError | | request.isHttpError){
//错误。。。
}否则{
//成功。。。
Data=JsonUtility.FromJson(request.downloadHandler.text);
//在UI中打印数据
uiNameText.text=data.Name;
//加载视频:
start例程(GetVideo(data.VideoURL));
}
//清理它正在使用的任何资源。
request.Dispose();
}
IEnumerator GetVideo(字符串url){
UnityWebRequest=UnityWebRequest.GetTexture(url);
生成返回请求。SendWebRequest();
if(request.isNetworkError | | request.isHttpError){
//错误。。。
}否则{
//成功。。。
uiRawImage.texture=((DownloadHandlerTexture)request.downloadHandler).texture;
}
//清理它正在使用的任何资源。
request.Dispose();
}
}
所以这段代码很好地将图像加载到我的unity中,但对于视频,它没有,我尝试获取unity支持的所有类型的视频,但都是一样的。所以对于原始图像组件,我添加了视频播放器组件,我添加了渲染纹理到它和图像原始,但也是一样的东西。我的unity版本是2019.4.26f1。这可能是因为统一的版本?我真的希望有人能帮我。原因很简单:
- 图像==纹理->是
- 视频==纹理->不强>
UnityWevRequestTexture.GetTexture
你基本上是在告诉自己你必须做什么:
- 有组件
- 将a指定给,以便视频播放器将视频渲染到该纹理中
- 请参考中的
RenderTexture
[SerializeField]私人视频播放器\u视频播放器;
[SerializeField]私有RenderTexture\u RenderTexture;
[SerializeField]私有RawImage\u RawImage;
私人空间()
{
_rawImage.texture=\u renderTexture;
_videoPlayer.targetTexture=\u renderTexture;
}
然后在运行时
- 将接收到的视频URL分配给
//是的,如果您将Start-return设置为IEnumerator,那么Unity会自动将其作为协同程序运行
IEnumerator启动()
{
//使用“using”而不是手动调用“Dispose”
使用(var-request=UnityWebRequest.Get(jsonUrl))
{
生成返回请求。SendWebRequest();
if(request.isNetworkError | | request.isHttpError)
{
//错误。。。
}
其他的
{
//成功。。。
Data=JsonUtility.FromJson(request.downloadHandler.text);
//在UI中打印数据
uiNameText.text=data.Name;
//视频播放器将自行负责加载视频剪辑!
videoPlayer.url=data.VideoURL;
视频播放器;
}
}
}
现在它可以工作,但只播放声音:(