0

[編集済み] OculusGo = Android 用のアプリケーションを準備中です シーンには、ビデオ クリップで表される 4 人のキャラクターがいます。動画のサイズはそれぞれ 10 MB ~ 30 MB です。

すべての動画はシェーダー GoogleVR/Unlit/TransparentOverlay で動画は WebM/VP9/キープ アルファに Adob​​e エンコーダーでエンコードされています。ビデオは、Android の VP8 (再び) に統一されてさらにトランスコードされました。

ビデオはシーンの開始時にリソース フォルダからロードされ、再生するときに VideoPlayer.Play() が各ビデオから呼び出され、最後にすべて一緒に再生されます。(次々に開始し、一緒に続行します)。

問題は次のとおりです。3 番目のビデオが再生されるはずのときに、アプリがクラッシュします。ビデオを「準備」してもクラッシュしませんが、「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: すでに未登録の入力チャネルを登録解除しようとしました

助けてください、私はこれらのビデオを同時に実行できるように2 週間試みてきました。

また、ここで別のスレッドの使用について読みました: https://gamedev.stackexchange.com/questions/113096/how-to-not-freeze-the-main-thread-in-unity とここで同時に再生されるビデオについて: Unity アプリがフリーズします複数のビデオを同じシーンにロードする場合

logcat (unity one ではない) を実行したところ、ビデオの準備が終了した直後に得られたものです。

端末からのスクリーンショット

4

1 に答える 1