OculusGo 上的多个视频,Android - 应用崩溃
multiple videos on OculusGo, Android - app is crashing
[编辑]
我正在准备 OculusGo 的应用程序 = Android
在场景中有 4 个字符由视频剪辑表示。
每个视频大小在 10mb - 30mb 之间。
所有视频都带有着色器GoogleVR/Unlit/TransparentOverlay
这些视频使用 Adobe 编码器编码为 WebM/VP9/keep alpha。
视频进一步 t运行 统一编码为 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: Force removing ActivityRecord
Consumer closed input channel or an error occurred. events=0x9
Channel is unrecoverably broken and will be disposed!
InputDispatcher: Attempted to unregister already unregistered input channel
请帮忙,我已经尝试 两周 以同时将这些视频发送到 运行。
我还在这里阅读了有关使用不同线程的信息:https://gamedev.stackexchange.com/questions/113096/how-to-not-freeze-the-main-thread-in-unity
关于同时播放的视频:
我运行logcat(不是unity one),这是我在视频准备结束后得到的:
Screenshot from terminal
我通过以下步骤解决了这个问题:
- 我没有同时播放 4 个不同的视频并使用四个视频的内存,而是使用一个视频 - 除以 4 - 每个角色在一个视频上都有一个 运行 的“插槽”。
- 我用了一个 material - 而不是使用 4 material 秒,一个 material 来播放视频。 material 显示所有 4 个字符的视频,因此为了正确显示字符,我偏移了 material 渲染纹理 x、y 位置和偏移量,因此在四个不同的位置只显示一个字符场景。
所以为了总结而不是用四个不同的 material 加载和播放 4 个视频并在系统上造成过载,我在 1 个 material 上播放了 1 个视频。
申请运行顺利。
[编辑] 我正在准备 OculusGo 的应用程序 = Android 在场景中有 4 个字符由视频剪辑表示。 每个视频大小在 10mb - 30mb 之间。
所有视频都带有着色器GoogleVR/Unlit/TransparentOverlay 这些视频使用 Adobe 编码器编码为 WebM/VP9/keep alpha。 视频进一步 t运行 统一编码为 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: Force removing ActivityRecord
Consumer closed input channel or an error occurred. events=0x9
Channel is unrecoverably broken and will be disposed!
InputDispatcher: Attempted to unregister already unregistered input channel
请帮忙,我已经尝试 两周 以同时将这些视频发送到 运行。
我还在这里阅读了有关使用不同线程的信息:https://gamedev.stackexchange.com/questions/113096/how-to-not-freeze-the-main-thread-in-unity
关于同时播放的视频:
我运行logcat(不是unity one),这是我在视频准备结束后得到的:
Screenshot from terminal
我通过以下步骤解决了这个问题:
- 我没有同时播放 4 个不同的视频并使用四个视频的内存,而是使用一个视频 - 除以 4 - 每个角色在一个视频上都有一个 运行 的“插槽”。
- 我用了一个 material - 而不是使用 4 material 秒,一个 material 来播放视频。 material 显示所有 4 个字符的视频,因此为了正确显示字符,我偏移了 material 渲染纹理 x、y 位置和偏移量,因此在四个不同的位置只显示一个字符场景。
所以为了总结而不是用四个不同的 material 加载和播放 4 个视频并在系统上造成过载,我在 1 个 material 上播放了 1 个视频。 申请运行顺利。