Unity 5.6-VideoPlayer无法播放AudioSource音频

时间:2019-02-07 12:15:53

标签: unity3d audio-source

我正在为Subnautica mod管理器开发更新,并且我引入了一个盗版检测器,如果检测到盗版,它会全屏播放you are a pirate歌曲并带有音频。

视频使用RawImageVideoPlayer正确播放,但我似乎无法使音频正常工作。

我已经搜索了互联网,发现了很多“修复程序”,但是没有一个起作用。
  以下是我尝试过的一些方法:

  • videoPlayer.controlledAudioTrackCount = 1;
  • gameObject.AddComponent<AudioListener>().enabled = true;
  • audioSource.volume = 1f;

研究之后,我偶然发现了this bug report,这似乎影响了Unity 5.6。

不幸的是,由于我正在改装,因此我无法更新Unity。

我已经尝试了错误报告中提供的解决方法,该报告是
 videoPlayer.renderMode = VideoRenderMode.MaterialOverride;
但这也不起作用。

注意:

  • videoPlayer.GetAudioChannelCount(0)始终返回2
  • audioSource.isPlaying始终返回false,即使我执行audioSource.Play();

这是我的代码:

private IEnumerator PlayVideo()
{
    VideoPlayer videoPlayer = gameObject.GetComponent<VideoPlayer>() ?? gameObject.AddComponent<VideoPlayer>();
    AudioSource audioSource = gameObject.GetComponent<AudioSource>() ?? gameObject.AddComponent<AudioSource>();

    videoPlayer.enabled = true;
    audioSource.enabled = true;

    videoPlayer.playOnAwake = false;
    audioSource.playOnAwake = false;

    videoPlayer.source = VideoSource.Url;
    videoPlayer.url = videoURL;

    videoPlayer.controlledAudioTrackCount = 1;
    videoPlayer.waitForFirstFrame = false;
    videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
    videoPlayer.SetTargetAudioSource(0, audioSource);
    videoPlayer.EnableAudioTrack(0, true);

    videoPlayer.Prepare();

    while (!videoPlayer.isPrepared)
    {
        yield return null;
    }

    GetComponent<RawImage>().texture = videoPlayer.texture;

    videoPlayer.Play();

    while (videoPlayer.isPlaying)
    {
        yield return null;
    }

    yield return StartCoroutine(PlayVideo());
}

您可以在GitHub

上看到完整的代码

编辑:这也不起作用

audioSource.bypassEffects = true;
audioSource.bypassListenerEffects = true;
audioSource.bypassReverbZones = true;
audioSource.dopplerLevel = 0;
audioSource.priority = 100000;
audioSource.ignoreListenerPause = true;
audioSource.ignoreListenerVolume = true;
audioSource.spatialBlend = 0;
audioSource.volume = 1f;

1 个答案:

答案 0 :(得分:0)

我发现了为什么它不起作用!

显然,游戏在项目设置中启用了“禁用Unity音频”设置。