Proper Video Player Documentation

Changelog

Release history for Proper Video Player WebGL. The installed version appears in the Setup window and is available at runtime through ProperVideoPlayer.Version.

1.0.0 current#

Initial release.

Playback#

  • Added a native HTML <video> backend for WebGL. Texture uploads use requestVideoFrameCallback when available, with decoded-frame and continuous-upload fallbacks. The WebGL path uses texStorage2D and texSubImage2D when supported and remains compatible with WebGL 1.
  • Added native looping, single-operation seeking, automatic video-texture management, optional RawImage binding, and automatic WebGL UV orientation.
  • Added a UnityEngine.Video.VideoPlayer backend for the Editor, standalone players, and mobile builds behind the same ProperVideoPlayer API.
  • Added autoplay-policy handling that can begin playback muted and restore the requested mute state after playback starts.
  • Added a configurable playback watchdog for unexpected pauses and stalled decoders. Recovery escalates through replay, muted replay, pause-and-play, seek flush, and source reload, with stage identifiers reported through OnRecoveryAttempted.
  • Added independent multi-player support, including shared-RenderTexture validation, pause-when-disabled behavior, and domain-reload-safe registries.

Streaming and authentication#

  • Added HLS and DASH playback on WebGL with automatic .m3u8 and .mpd detection and explicit VideoSourceType selection for extensionless URLs.
  • Added native HLS on Safari and on-demand hls.js and dash.js integration over Media Source Extensions. WebGLVideoBridge.ConfigureStreamingLibraries can specify self-hosted library URLs.
  • Added streaming-aware watchdog reloads that rebuild HLS or DASH pipelines.
  • Added custom request headers for WebGL HLS and DASH playlist, segment, and key requests. Header values can be updated during playback for token rotation; HLS with headers uses hls.js rather than Safari's native HLS path.
  • Added credentialed CORS requests for cookie-protected sources through SetUseCredentials. Query-string tokens require no additional configuration. SupportsRequestHeaders reports whether the active platform provides the custom-header path.

API and diagnostics#

  • Added the public WebGLVideoBridge for integrations that require low-level control of the browser media element and texture-upload lifecycle.
  • Added metadata, readiness, buffering, seeking, playback, volume, rate, duration, resize, and error events. Component events are exposed as UnityEvent properties for Inspector and code subscriptions.
  • Added volume and playback-rate state, pitch preservation, network and ready state, fast seek, resolved source URL, codec capability probing, and buffered, seekable, and played time ranges.
  • Added presented, decoded, and dropped-frame counters; buffered-ahead duration; presented-frame media time; texture-upload timing; and upload-path reporting. Unsupported fallback metrics use documented sentinel values.
  • Added experimental Unity 6 WebGPU uploads through copyExternalImageToTexture, including texture resize and rebind handling. UploadViaWebGpu identifies the active path. This path was validated with Unity 6000.5 and Chrome.
  • Added ProperVideoPlayer.Version for version reporting.

Editor and examples#

  • Added a Setup window for installing and removing demo content, optional runtime/editor/UniTask assembly definitions, and UniTask support. The window opens once after the first import.
  • Added a custom component Inspector with a collapsible event section.
  • Added optional UniTask extensions: OpenAsync, SeekAsync, WaitForEndAsync, and PlayToEndAsync. The core runtime remains independent of UniTask.
  • Added seven UGUI-compatible effect shaders: WaveRipple, Bulge, CRT, Glitch, Lens, RippleTouch, and Spotlight. Interactive effects use the included MouseFXDriver.
  • Added a tabbed demo scene covering transport controls and diagnostics, four simultaneous players, shader effects, video on 3D geometry, and token-authenticated sources.