Unity: звук видеофайла прерывистый при воспроизведении с Unity - PullRequest
0 голосов
/ 26 апреля 2018

Я сталкиваюсь с проблемой при воспроизведении некоторых видео в редакторе Unity или приложении Unity (автономное приложение Windows). Звук видеофайла прерывистый.

Если я воспроизведу записанный видеофайл в Windows с помощью любого плеера, проблема не появится.

После работы над этой проблемой мне кажется, что я понял проблему: продолжительность звука записанного видео больше, чем продолжительность самого видео.

Вы можете видеть детали обычного видео и записанного видео.

Обычные детали видео: https://drive.google.com/file/d/1qzKSr-Fb2ohb2W1xwooZum0xT3acQZM4/view?usp=sharing

Детали записанного видео: https://drive.google.com/file/d/1jpr2IJwtIByLsWh7itVfm0nhoprarNm4/view?usp=sharing

Мой вопрос состоит из 2 частей:

1- Может ли разница в продолжительности создать эту проблему.

2- Как исправить эту проблему в единстве?

private IEnumerator PlayVideo(string filePath)
{
    //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;
    _audioSource.Pause();

    //We want to play from video clip not from url

    //videoPlayer.source = VideoSource.VideoClip;

    // Vide clip from Url
    _videoPlayer.source = VideoSource.Url;
    _videoPlayer.url = filePath;


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

    //Assign the Audio from Video to AudioSource to be played
    _videoPlayer.controlledAudioTrackCount = 1;
    _videoPlayer.EnableAudioTrack(0, true);
    _videoPlayer.SetTargetAudioSource(0, _audioSource);

    //Set video To Play then prepare Audio to prevent Buffering
    //videoPlayer.clip = myVideoClip;
    _videoPlayer.Prepare();

    //Wait until video is prepared
    WaitForSeconds waitTime = new WaitForSeconds(1);
    _retryCount = 0;
    while (!_videoPlayer.isPrepared)
    {
        Debug.Log("Preparing Video");
        //Prepare/Wait for 15 sceonds only
        yield return waitTime;
        _retryCount++;
        if (_retryCount >= _maximumRetries)
        {
            break;
        }
    }

    _vidFrameLength = (int)_videoPlayer.frameCount;
    ProgressBar.maxValue = _vidFrameLength;

    Debug.Log("Done Preparing Video");
    VideoPlayerImage.texture = _videoPlayer.texture;

    _videoPlayer.Play();
    _audioSource.Play();
    ClipLength.text = StringHelper.ToTime((float)_videoPlayer.frameCount / _videoPlayer.frameRate, TimePreviewer.Minutes);

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

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Попробуйте изменить тип загрузки аудиоисточника на «парение» в инспекторе.

0 голосов
/ 07 мая 2018

На данный момент я нашел 2 библиотеки видеоплееров в магазине Unity, которые воспроизводят прерывистое видео без проблем.

Я использую один из них, пока Unity не исправит проблему с воспроизведением видео с переменной частотой кадров.

https://assetstore.unity.com/packages/tools/video/ump-win-mac-linux-webgl-49625 https://assetstore.unity.com/packages/tools/video/avpro-video-windows-57969

Я знаю, что это не решение вопроса, но пока кто-нибудь не даст хорошего ответа на вопрос, я буду использовать это.

0 голосов
/ 26 апреля 2018

Если вы используете компонент VideoPlayer, попробуйте изменить Режим вывода звука из AudioSource в Direct, наоборот, чтобы увидеть, если это что-то изменит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...