Воспроизведение видео

Godot поддерживает воспроизведение видео с помощью узла VideoPlayer.

Supported playback formats

Единственный поддерживаемый формат в ядре - Ogg Theora (не путать с Ogg Vorbis audio). Расширения могут обеспечить поддержку дополнительных форматов, но по состоянию на июль 2022 года таких расширений пока не существует.

H.264 и H.265 не могут поддерживаться в ядре Godot, поскольку оба они обременены патентами на программное обеспечение. AV1 не требует авторских отчислений, но он по-прежнему медленно декодируется на CPU, а аппаратная поддержка декодирования пока доступна не на всех используемых GPU.

WebM поддерживается в ядре в Godot 3.x, но в 4.0 его поддержка будет прекращена, так как он оказался слишком глючным и сложным в обслуживании. Поэтому использование WebM не рекомендуется.

Примечание

Вы можете найти видео с расширениями .ogg или .ogx, которые являются общими расширениями для данных внутри контейнера Ogg.

Переименование расширений этих файлов в .ogv может позволить импортировать видео в Godot. Однако не все файлы с расширениями .ogg или .ogx являются видео - некоторые из них могут содержать только аудио.

Setting up VideoPlayer

  1. Создайте узел VideoPlayer с помощью диалогового окна Create New Node.

  2. Select the VideoPlayer node in the scene tree dock, go to the inspector and load an .ogv file in the Stream property.

  3. Если вы хотите, чтобы видео воспроизводилось сразу после загрузки сцены, установите флажок Autoplay в инспекторе. Если нет, оставьте Autoplay отключенным и вызовите play() на узле VideoPlayer в сценарии, чтобы начать воспроизведение, когда это необходимо.

Handling resizing and different aspect ratios

По-умолчанию в Godot 4.0 размер VideoPlayer автоматически изменяется в соответствии с разрешением видео. Вы можете заставить его следовать обычному размеру Control, включив Expand на узле VideoPlayer.

Чтобы настроить изменение размеров узла VideoPlayer в зависимости от размера окна, настройте якоря с помощью меню Layout в верхней части окна просмотра 2D-редактора. Однако эта настройка может оказаться недостаточно мощной для всех случаев использования, например, для воспроизведения полноэкранного видео без искажения видео (но с пустым пространством по краям). Для большего контроля вы можете использовать узел AspectRatioContainer, который предназначен для обработки такого рода случаев использования:

Добавьте узел AspectRatioContainer. Убедитесь, что он не является дочерним узлом какого-либо другого узла контейнера. Выберите узел AspectRatioContainer, затем установите для его Layout в верхней части 2D-редактора значение Full Rect. Установите Ratio в узле AspectRatioContainer в соответствии с соотношением сторон вашего видео. Вы можете использовать математические формулы в инспекторе, чтобы помочь себе. Не забудьте сделать один из операндов плавающей величиной. В противном случае результатом деления всегда будет целое число.

Изменение свойства Ratio контейнера AspectRatioContainer в инспекторе редактора

Это составит (приблизительно) 1,777778

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

См.также

See Multiple resolutions for more tips on supporting multiple aspect ratios in your project.

Отображение видео на 3D-поверхности

Using a VideoPlayer node as a child of a Viewport node, it's possible to display any 2D node on a 3D surface. For example, this can be used to display animated billboards when frame-by-frame animation would require too much memory.

This can be done with the following steps:

  1. Создайте узел Viewport. Установите его размер в соответствии с размером вашего видео в пикселях.

  2. Создайте узел VideoPlayer в качестве дочернего узла Viewport и укажите в нем путь к видео. Убедитесь, что Expand отключен, и включите Autoplay, если это необходимо.

  3. Создайте узел MeshInstance с ресурсом PlaneMesh или QuadMesh в свойстве Mesh. Измените размер сетки в соответствии с соотношением сторон видео (в противном случае она будет выглядеть искажённой).

  4. Создайте новый ресурс SpatialMaterial в свойстве Material Override в разделе GeometryInstance.

  5. Включите Local To Scene в разделе ресурсов SpatialMaterial's Resource (внизу). Это требуется перед тем, как вы сможете использовать ViewportTexture в его свойстве Albedo Texture.

  6. В SpatialMaterial установите свойство Albedo > Texture в New ViewportTexture. Отредактируйте новый ресурс, щелкнув его, затем укажите путь к узлу Viewport в свойстве Viewport Path.

  7. Включите Albedo Tex Force sRGB в SpatialMaterial, чтобы предотвратить размывание цветов.

  8. Если рекламный щит должен излучать собственный свет, включите Flags > Unshaded для повышения производительности рендеринга.

See Использование окон просмотра and the GUI in 3D demo for more information on setting this up.

Playback limitations

Текущая реализация воспроизведения видео в Godot имеет несколько ограничений:

  • Досмотр видео до определенной точки не поддерживается.

  • Изменение скорости воспроизведения не поддерживается. VideoPlayer также не будет следовать Engine.time_scale.

  • Зацикливание не поддерживается, но вы можете подключить сигнал VideoPlayer'а finished к функции, которая воспроизводит видео снова. Однако это приведет к тому, что при повторном запуске видео будет виден черный кадр. Это можно обойти, добавив в видеофайл затухание до черного цвета перед окончанием видео, или скрыв видео на один кадр и отобразив TextureRect со скриншотом первого кадра видео, пока видео не будет перезапущено.

  • Потоковая передача видео из URL-адреса не поддерживается.