【问题标题】:How to play videos using Unity VideoPlayer and VideoClip API on Android in 5.6.0b1 [duplicate]如何在 5.6.0b1 的 Android 上使用 Unity VideoPlayer 和 VideoClip API 播放视频 [重复]
【发布时间】:2016-12-16 16:43:37
【问题描述】:

Unity 在 5.6.0b1 版本中引入了新功能,现在可以在 iPhone 和 Android 上播放视频。

我设法让它在 iphone 和 Windows 上运行,但在 Android 上它卡在“准备”视频。

这是我使用的代码

public VideoClip videoToPlay;

private VideoPlayer videoPlayer;
private VideoSource videoSource;

//Audio
private AudioSource audioSource;

// Use this for initialization
void Start()
{
    Application.runInBackground = true;
    StartCoroutine(playVideo());
}

IEnumerator playVideo()
{
    //Add VideoPlayer to the GameObject
    videoPlayer = gameObject.AddComponent<VideoPlayer>();

    //Add AudioSource
    audioSource = gameObject.AddComponent<AudioSource>();

    //Disable Play on Awake for both Video and Audio
    videoPlayer.playOnAwake = false;
    audioSource.playOnAwake = false;

    //We want to play from video clip not from url
    videoPlayer.source = VideoSource.VideoClip;

    //Set video To Play then prepare Audio to prevent Buffering
    // videoPlayer.clip = videoToPlay;
    videoPlayer.url = Application.streamingAssetsPath + "/TestVideo.MP4";
    videoPlayer.source = VideoSource.Url;
    VideoClip clip = new VideoClip();

    //Set Audio Output to AudioSource
    videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;

    //Assign the Audio from Video to AudioSource to be played
    videoPlayer.EnableAudioTrack(0, true);
    videoPlayer.SetTargetAudioSource(0, audioSource);

    videoPlayer.Prepare();

    //Wait until video is prepared
    while (!videoPlayer.isPrepared)
    {
        Debug.Log("Preparing Video");
        yield return null;
    }

    Debug.Log("Done Preparing Video");

    //Play Video
    videoPlayer.Play();

    //Play Sound
    audioSource.Play();

    Debug.Log("Playing Video");
    while (videoPlayer.isPlaying)
    {
         yield return null;
    }

    Debug.Log("Done Playing Video");
}

附言

在 Unity 文档中我发现在使用 android 时,我需要使用 WWW 类来检索文件。问题是只有 MovieTexture 可用,并且没有来自 WWW 对象的 VideoClip。有办法转换吗?

【问题讨论】:

    标签: c# unity3d unity5


    【解决方案1】:

    致你的“P.S.”问题,您可以使用 WWW www = new WWW(url) 而不是 LoadFromCacheOrDownload() 来检索视频,然后将 www.bytes 加载到字节数组,将其写入磁盘 (File.WriteAllBytes()),最后设置 VideoPlayer。你刚刚写的那个网址。

    对于主要问题..我面临同样的问题,它一直在准备(在 android 上)并且永远不会结束。作为一种解决方法,您可以跳过它,但视频可能会运行缓慢。

    【讨论】:

    • “作为一种解决方法,您可以跳过它,但视频可能会运行缓慢。”你做过吗?它奏效了还是你只是在猜测?
    • 是的,我做到了。就我而言,视频确实运行得很慢。我没有做的是尝试使用可能不会像我的那样运行缓慢的短视频或低质量视频。
    • 这是一个错误。我提交了大约 5 个关于 Android 上这个新 VideoPlayer 的错误报告。我建议您也这样做,以便在下一个版本中修复这些问题。在您的编辑器中,转到 Help->Report a Bug... 确保告诉他们您的 Android 型号和 Android 版本。至于您提到的WWW,这不是 VideoPlayer 应该工作的方式,甚至不应该这样做。假设可以播放 StreamingAssets 文件夹中的任何有效视频。再次,这是一个错误。当有修复时,我会更新重复的帖子。
    猜你喜欢
    • 1970-01-01
    相关资源
    最近更新 更多