[已编辑]我正在为OculusGo=Android准备一个应用程序在该场景中,有4个角色由视频片段表示。视频大小在10mb-30mb之间。
所有视频都使用着色器GoogleVR/Unlet/TransparentOverlay视频使用Adobe编码器编码为WebM/VP9/keep-alpha。视频进一步统一转码为Android,VP8(再次(。
在场景开始时从资源文件夹加载的视频,然后在播放它们的时候调用VideoPlayer.play((,最后它们一起播放。(一个接一个地开始,然后一起继续(。
问题是:当第三个视频应该播放时,我的应用程序崩溃了。当我";准备";视频,但仅在";VideoPlayer.Play((;
这是我当前的代码:
public float waiting;
public AudioSource characterAudio;
VideoPlayer videoPlayer;
bool videoStarted = true;
void Awake () {
videoPlayer = GetComponent<VideoPlayer>();
}
private void Update()
{
if (characterAudio != null)
{
if (characterAudio.isPlaying && videoStarted)
{
StartCoroutine(StartVideo());
videoStarted = false;
Debug.Log(characterAudio.name + " called once from update");
}
}
}
IEnumerator StartVideo()
{
yield return new WaitForSeconds(waiting);
videoPlayer.enabled = true;
videoPlayer.Prepare();
while(!videoPlayer.isPrepared)
{
Debug.Log("video is preparing");
yield return null;
}
videoPlayer.Play();
Debug.Log("videoStarted, char name is: " + characterAudio.name);
}
这是我从logcat(使用命令:logcat | grep-I unity(中得到的错误
ActivityManager:强制删除ActivityRecord
消费者关闭输入通道或发生错误。事件=0x9
通道已不可恢复地断开,将被处理!
InputDispatcher:试图注销已注销的输入通道
请帮忙,我已经试了两周让这些视频同时运行。
此外,我在这里阅读了关于使用不同线程的内容:https://gamedev.stackexchange.com/questions/113096/how-to-not-freeze-the-main-thread-in-unity关于视频在这里同时播放:Unity应用程序在同一场景上加载多个视频时冻结
我运行了logcat(不是统一一(,这是我在视频准备结束后得到的:
终端屏幕截图
我解决这个问题的方法是通过以下步骤:
- 我没有同时播放4个不同的视频并使用四个视频的内存,而是使用了一个视频-由4划分-每个角色都得到一个";槽";在将要运行的一个视频上
- 我用了一种材料——不是用4种材料,而是用一种材料播放视频。此材质显示所有4个角色的视频,因此为了正确显示角色,我偏移了材质渲染纹理的x、y位置和偏移量,因此只有一个角色显示在场景中的四个不同位置
因此,为了总结,我在1个材料上播放了1个视频,而不是加载和播放4个不同材料的4个视频,并在系统上造成过载。应用程序运行平稳。