Это старый вопрос, но я добавил бы что-то потенциально полезное:
Я знаю, что вы написали свой пример в сырых списках Python, но если вы решили вместо этого использовать numpy
массивы (что было бы прекрасно законным в вашем примере, потому что вы, похоже, имеете дело с массивами чисел), есть (почти точно) эта команда, которую вы сказали, что вы составили:
import numpy as np
np.set_printoptions(precision=2)
Или еще лучше в вашем случае, если вы все еще хотите видеть все десятичные числа действительно точных чисел, но, например, избавиться от конечных нулей, используйте строку форматирования %g
:
np.set_printoptions(formatter={"float_kind": lambda x: "%g" % x})
Для однократной печати и изменения глобального поведения используйте np.array2string
с теми же аргументами, что и выше.
Нашел проблему. Ниже приведен код FIXED, в котором воспроизводятся видео и аудио:
//Raw Image to Show Video Images [Assign from the Editor]
public RawImage image;
//Video To Play [Assign from the Editor]
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 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);
//Set video To Play then prepare Audio to prevent Buffering
videoPlayer.clip = videoToPlay;
videoPlayer.Prepare();
//Wait until video is prepared
while (!videoPlayer.isPrepared)
{
Debug.Log("Preparing Video");
yield return null;
}
Debug.Log("Done Preparing Video");
//Assign the Texture from Video to RawImage to be displayed
image.texture = videoPlayer.texture;
//Play Video
videoPlayer.Play();
//Play Sound
audioSource.Play();
Debug.Log("Playing Video");
while (videoPlayer.isPlaying)
{
Debug.LogWarning("Video Time: " + Mathf.FloorToInt((float)videoPlayer.time));
yield return null;
}
Debug.Log("Done Playing Video");
}
Почему звук не воспроизводится:
//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();
не после него. Это потребовало нескольких часов эксперимента, чтобы обнаружить, что это была проблема, с которой я столкнулся.
Застрял в «Подготовка видео»?
Подождите 5 секунд после вызова videoPlayer.Prepare();
затем выйдите из цикла while.
Заменить:
while (!videoPlayer.isPrepared)
{
Debug.Log("Preparing Video");
yield return null;
}
с:
//Wait until video is prepared
WaitForSeconds waitTime = new WaitForSeconds(5);
while (!videoPlayer.isPrepared)
{
Debug.Log("Preparing Video");
//Prepare/Wait for 5 sceonds only
yield return waitTime;
//Break out of the while loop after 5 seconds wait
break;
}
Это должно работать, но при загрузке видео может возникнуть буферизация. При использовании этого временного исправления мое предложение состоит в том, чтобы файл для ошибки с названием «videoPlayer.isPrepared always true», потому что это ошибка.
Некоторые люди также исправили его изменение:
videoPlayer.playOnAwake = false;
audioSource.playOnAwake = false;
-
videoPlayer.playOnAwake = true;
audioSource.playOnAwake = true;
Воспроизвести видео из URL:
Заменить:
//We want to play from video clip not from url
videoPlayer.source = VideoSource.VideoClip;
с:
//We want to play from url
videoPlayer.source = VideoSource.Url;
videoPlayer.url = "http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4";
, а затем Удалить :
public VideoClip videoToPlay;
и videoPlayer.clip = videoToPlay;
, поскольку они больше не нужны.
Воспроизвести видео из папки StreamingAssets:
string url = "file://" + Application.streamingAssetsPath + "/" + "VideoName.mp4";
if !UNITY_EDITOR && UNITY_ANDROID
url = Application.streamingAssetsPath + "/" + "VideoName.mp4";
#endif
//We want to play from url
videoPlayer.source = VideoSource.Url;
videoPlayer.url = url;
Все поддерживаемые видеоформаты:
Дополнительные поддерживаемые видеоформаты в Windows:
Некоторые из этих форматов не работают на некоторых платформах. См. этот пост для получения дополнительной информации о поддерживаемых форматах видео.
Как и другие ответы. Вы можете использовать обратные вызовы при подготовке и завершении состояний видео. Вместо использования сопрограмм и возврата возврата.
videoPlayer.loopPointReached += EndReached;
videoPlayer.prepareCompleted += PrepareCompleted;
void PrepareCompleted(VideoPlayer vp) {
vp.Play();
}
void EndReached(VideoPlayer vp) {
// do something
}
К настоящему времени VideoPlayer должен быть обновлен достаточно, вам не нужно писать код, чтобы нормально работать. Вот настройки, которые, как мне показалось, имеют наиболее желательный эффект:
Эти настройки:
Видеоплеер:
Источник звука:
Не забудьте иметь VideoClip для VideoPlayer и AudioClip для AudioSource. Форматы файлов, которые, как я считаю, работают лучше всего: .ogv для видео и .wav для аудио.
Prepare()
, которая может быть выполнена только из кода.
– Programmer
12 December 2017 в 09:13
Я использовал ответ @Programmer, чтобы воспроизводить видео с URL-адреса, но я не мог получить никакого звука. В конце концов я нашел ответ в комментариях учебника YouTube.
Чтобы получить звук для воспроизведения фильма, загруженного по URL-адресу, перед вызовом вам нужно добавить следующую строку к EnableAudioTrack
:
videoPlayer.controlledAudioTrackCount = 1;
videoPlayer.playOnAwake = false; audioSource.playOnAwake = false;
я изменил значения наtrue
. Я понял, теперь мне нужно разработать скрипт для управления воспроизведением и паузой для видео. – Luzan Baral 8 March 2017 в 13:09VideoPlayer
должен работать на любой платформе. – Programmer 1 December 2017 в 10:02