TVManager Settings
This is a breakdown of all the options available on the TVManager component and what they are used for.
Autoplay Settings
Autoplay Main URL
Pretty straight forward. This field is a place to put a media url that you wish to automatically start upon first load into the world. This only is true for the instance owner (aka master) upon first visit of a new instance (which is then synced to any late-joiners). Leave empty to not have any autoplay.Autoplay Alternate URL
This field is the complementary url field to the above one. Quest users default to using the alternate url, but will fall back to the main url if it's not present. Leave both this and the above field empty to not have any autoplay.Autoplay Title
If you want your autoplay urls to not display the domain name, you can specify a custom text to be made available to UIs instead.Autoplay Loop
Makes the autoplay URL implicitly loop. This is equivalent to adding#loop
to the end of the autoplay URL.
Default TV Settings
Default Manager
This is a dropdown of the video managers from which to pick the manager that the TV starts off selected with.Default Volume
Pretty straight forward. This specifies what the volume should be for the TV at load time between 0% and 100% (represented as a 0.0 to 1.0 decimal)Start With 2D Audio
Flag to specify if the TV should initialize with stereo audio mode or full spatial audio mode.Start with Video Disabled
Flag to specify if the TV should, well, start with the video disabled. This halts the blit process thus affects all Rendering Options.Start with Audio Muted
Flag to specify if the TV should, well, start with the audio muted. This requires calling the_UnMute
action to hear audio.
Sync Options
Sync To Owner
This setting determines whether the TV will sync with the data that the owner delivers. Untick if you want the TV to be local only (like for a music player or something).Automatic Resync Interval
This option defines how many seconds to wait before attempting to resync. This affects two separate things.- First is the Audio/Video sync. This particularly affects AVPro for long form videos (like movies) where after some time or excessive CPU hitching (such as repeated alt-tabbing) can cause the audio to eventually become out-of-sync with the video (usually it's the video that falls behind).
- Second is the Owner sync. This is where the owner of the current video determines the target timestamp that everyone should be at. ProTV has a loose owner sync mechanism where it will only try to enforce sync at critical points (like switching videos, the owner seeks to a new time in the video, owner pauses the video for everyone, etc).
The default value of 300 seconds is usually good enough for most cases, and shouldn't need to be changed unless for a specific need.
Play Drift Threshold
This value determines how far away from the tv owner that non-owners are allowed to drift (aka de-sync). When this delta threshold is exceeded, the non-owner will be forcefully seek'd to the owner's timestamp. If you don't want to have a forced resync threshold, set this value toInfinity
(yes the actual word) to disable the automated enforcement.Pause Drift Threshold
This is more so a visual feedback feature where if the video is paused locally but the video owner is still playing, the video will update the current playback timestamp every some number of seconds determined by this option. If you don't want the video to resync while paused, set this value toInfinity
(yes the actual word) to have it never update until the user resumes the video. One way to view it is as a live slideshow of what is currently playing. This is intended to allow people to see what is visible on the TV without actually having the media actively running. Can be useful for moderators to see what is playing without having the actual video running.
Sync Tweaks
Enforce Sync Tweaks
When this setting is disabled (by default) any of the other sync tweak settings will update allow non-owners to still modify tweaks that are synced.
When this is enabled, all non-owners will not be allowed to change any of the tweaks that are synced. For example, without the setting ifSync Volume Control
is enabled, when the owner volume changes, it will update for all players but they can still change their volume locally. With the setting enabled, non-owners won't be allowed to change the volume slider at all.Sync Manager Selection
This setting, when combined withSync To Owner
will sync the active video player selection to other users.Sync Volume Control
This setting, when combined withSync To Owner
will sync the owner's volume to other users.Sync Audio Mode
This setting, when combined withSync To Owner
will sync the owner's audio mode to other users.Sync Video 3D Mode
This setting, when combined withSync To Owner
will sync the owner's current 3D video settings to other users.
Media Load Options
Play Video After Load
This setting determines whether or not the media that has been loaded will automatically start to play, or require manually clicking the play button to start it. This affects all video loads, including any autoplay media.Buffer Delay After Load
If you wish to have the TV implicitly wait some period of time before allowing the media to play (eg: give the media extra time to buffer)
Note: There will always be a minimum of 0.5 seconds of buffer delay to ensure necessary continuity of the TV's internals.Implicit Replay Duration
Media will implicitly loop once, if no explicit loop was specified, when the duration of the media is less than this value.
This is useful for things like short memes or clips where the video loading might be slower for other users and they missed most of the video.Max Allowed Loading Time
This specifies the maximum time that a media should be allowed to take to load. If this time is exceeded, the media error event will be triggered with aVideoError.PlayerError
.Live Media Reload Interval
This specifies how often (in minutes) a livestream should automatically reload. If set to 0, no auto-reload will occur. The recommended value is 10-15 minutes.Prefer Alternate Url For Quest
This setting makes the quest/android platform prioritize the Alternate Urls over the Main Urls. If no alternate url is provided, it will gracefully fallback to the main url. If you wish to repurpose the dichotomy of the main/alt for whatever reason (such as a sub/dub or some other dichotomy), you will very likely want to disable this settingEnable Reload Keybind
This setting enables the keybind to reload the current video. Equivalent to clicking the reload button on a UI. Defaults to F5, but can be changed.
Security Options
Auth Plugin
You may optionally provide an instance of a TVAuthPlugin to the TV for running security checks through. ProTV comes with an useful auth plugin:TVManagedWhitelist
.
If you want to learn about implementing your own authentication plugin, check out the Auth Plugin DocumentationAllow Master Control
This is a setting that specifies whether or not the instance master is allowed to lock down the TV to master use only. This will prevent all other users from being able to tell the TV to play something else. This is enabled by default. NOTE: The instance owner will always have access to take control no matter what.Locked By Default
This is a setting that specifies whether or not the TV is master locked from the start. This only affects when the first user joins the instance as master. The locked state is synced for non-owners/late-joiners after that point. This is disabled by default.
Security Tweaks
Allow First Master Control
When this setting is enabled, the TV will remember the first user to join the instance and treat that person as an implicit authorized user for the lifetime of the instance. This setting is helpful for group instances or public instances where there is no Udon recognizable instance owner. (The VRChat UI may specify a group or world author as owning the instance, but Udon itself does not acknowledge them as the actual instance owner). This is enabled by default.First Master Super User
Combine this withAllow First Master Control
to grant the first user in the instance Super User status instead of just Authorized status. This is disabled by default.Instance Owner Super User
Determines whether the instance owner (aka instance creator of an invite or friends instance) should be treated as a Super user or just a regular authorized user. This is enable by default.Super User Lock Override
This setting determines whether a Super user can lock out regular authorized users from the TV. When this is enabled and a Super user activates the TV lock, all non-super users will be unable to activate the TV lock. This is effectively an "admin override" of sorts and can be helpful for when authorized users are doing undesired shenanigans with the TV. When this is disabled, super users can still take ownership of the TV by activating the TV lock, but it will not prevent other authorized users from taking ownership back. This is disabled by default.Disallow Unauthorized Users
When this setting is enabled, all non-authorized users will be unable to take control of the TV, even when the TV's lock state is unlocked. This setting is not necessary under some scenarios. Each world creator will need to determine the necessity of this option. This is disabled by default.PlayState Change Takes Ownership
This option makes the Play/Pause/Stop actions initiated by a user to immediately take ownership if they are authorized to do so. This effectively turns those buttons into a "Global" action where anyone (who meets the authorization requirements) can change the play state of the video for anyone else by taking ownership and syncing the play state to everyone else.[Experimental] Enable Auto-Ownership
This experimental feature is intended to deal with auto-transfer of ownership to a properly authorized user when the current owner is NOT considered authorized. For example, if the TV is locked and allow master control is disabled, when someone who passes the IsAuthorized checks is found in the instance, that player will automatically attempt to take ownership of the TV game object to ensure a valid authorized user is always in control of the TV.
There are known issues with this, it is currently not advised to use unless you know what you are doing.Authorized Users Log Trace
This option forces all authorized users to set the logging level to Trace (most detailed logs) for the TV.
This is helpful for post-mortem auditing when things go unexpectedly awry and is enabled by default.Super Users Log Trace
This is similar to theAuthorized Users Log Trace
option, but applies only to super users.
If the previous setting is enabled, this setting doesn't do anything, as super users are considered authorized implicitly.
Domain Whitelist
Enable Domain Whitelist
A flag for whether to enforce the domain whitelist check. This is disabled by default.Domain Whitelist
This is a list of domains for urls which, when the prior flag is enabled, the TV will adhere to and will only allow playing urls from said domains. This is very similar to VRChat's canonical URL Whitelist, except that it is handled on a per TV basis. The default list consists of VRChat's url whitelist domains plus a few additional ones. You can add and remove the entries as you see fit for each TV instance you have.
The domains are searched using an 'ends with' fuzzy check. This enables subdomain passthrough for urls. For example:bandcamp.com
enables the passthrough of all subdomains of bandcamp likestessie.bandcamp.com
, which is necessary due to bandcamp creating a subdomain for every artist on the site. Similarlyyoutube.com
enables the passthrough ofwww.youtube.com
.
Error/Retry Options
Default Retry Count
This is the number of times a URL should be implicitly reloaded if the media fails to load. If the URL specifies an explicitretry=X
hash param value, it will be used instead.Repeating Retry Delay
This value specifies how long to wait between each retry when a URL fails to load. This only applies to multiple sequential failures after the first retry attempt.Retry Using Alternate Url
This flag makes the TV attempt to load the alternate (or main if on quest) URL if the main (or alternate if on quest) URL fails to load the first time. It will only attempt it if the other URL is present and different than the current one. Because it has graceful fallback logic, this feature is enabled by default.
Rendering Options
Internal Texture Settings
Custom Materials
Material
This material will receive the currently rendered texture and the data matrix of the TV's internal state. This is compatible with any shader.Texture Property
This is used in conjunction with the respective Material to declare which texture variable of the shader you wish to assign the data to. By default it is_VideoTex
, but for custom shaders you may want to use_MainTex
or_Emission
depending on the need. There is no need to worry about the texture flip correction as that is handled internally during the TV's Blit operation.
Custom Gamma Zone Settings
Texture Transform Mode
This dropdown determines which mode should be applied for choosing where to run the AVPro gamma correction. Most of the time you won't need to modify this. If you have special shader data embedded into parts of the video that you do not want to be modified from source (color corrected), you will need to choose a valid mode to exclude that area from the gamma correction. NOTE: The values determine where the gamma correction SHOULD apply, meaning you need to make sure that your shader data area is OUTSIDE of the resulting transform zone.As-Is
This is the default value which is effectively a noop. It is equivalent toNormalized
with the default (1,1,0,0) values.Normalized
This mode uses the common tiling/offset values that are typically seen in shader inspectors.By Pixels
This mode calculates the zone based on provided number of pixels. If you know the exact pixel size of your media, you can set these to the desired values.
There are some special values you can use with this mode.- If either of the
Pixel Size
axis are set to zero , they will implicitly use the full width or height.
eg: size 0x300y for a 1280x720y video will result in the gamma zone being 1280x300y. - If either of the
Pixel Size
axis are set to less than zero, they will be calculated from the opposite edge of the width or height.
eg: size -208x0y for a 1920x1080y video will result in the gamma zone being 1712x1080y.
Zero and Negative values are useful for dealing with unusual video dimensions.
- If either of the
VRSL Presets
These are a collection ofBy Pixels
options specifically calculated for VRSL's use-case. If you are using ProTV with VRSL, you should choose one of these options.
Standby Texture Settings
Show Standby On Media End
When the TV has detected the media as finished, if enabled, it will display the standby texture instead of the last frame of the media.Show Standby On Media Pause
When the TV has been paused, if enabled, it will display the standby texture instead of the current frame of the media.3D Mode For Standby Textures
When enabled and a standby texture is being rendered, this 3d mode will be used instead of the normal internal mode. This is specifically used for standby textures that are 3D. Generally not a common thing.3D Mode Width For Standby Textures
When 3D Mode is enabled, this setting determines whether the 3D texture is full width or half width. Read more on this in the Video Guide DocsDefault Standby
This is the primary texture that will be displayed, if present, when the TV is in a non-operating or halted state.Sound Only
When the TV has active media, but no video is detected (eg: soundcloud.com), this texture will be displayed instead if present.Video Error
When the TV enters a failure state (not a blocked URL nor a temporary retry state), this texture will be displayed instead if present.Loading Media
While the TV is loading a video, this texture will be displayed if present. This includes the momentary few frames that show up between videos when swapping to a new one while another one is still currently playing.
Custom Texture Settings
RenderTexture Target
A RenderTexture that will receive the current frame of the TV's active VPManager. Automatically uses ProTV's internal Blit material for handling the texture transfer operation. If an explicit RenderTexture object is not provided, one will be created implicitly during runtime.
RenderTexture Update Settings
Allow Texture Resizing
This flag specifies whether the user provided RenderTexture Target should be allowed to be resized or not. This is usually left enabled, but if an explicit sized texture is required, you can disable this to preserve the pixel integrity of the texture.Texture Aspect Ratio
The value to use as the aspect ratio. This is not a declaration of the ratio of the video content, but rather declaring what the expected ratio is needed to confirm to your mesh's expected physical shape or requirements. This information is passed into the shaders for them to make the ratio adjustments to the UV as needed.Apply Aspect to Resize
When Texture Resizing is enabled, this flag causes the resized texture to be enforced as having the aspect ratio specified. For example: if a source video was phone height1080x1920 (9:16)
and the texture aspect ratio was set to0.5 (1:2)
, the resize would retain the smaller dimension and expand the larger one to fit the aspect ratio, resulting in the texture being resized to1080x2160
. Remember, this affects the physical pixel size of the texture before the actual blit happens.Apply Aspect to Blit
This flag tells the blit shader to resize the source image to account for the given aspect ratio. This means that with our above example having the physical texture size ends up being larger than the original texture size, the actual video texture will be placed in the middle and the video will be letter boxed (black pixels above and below the video). This is typically called 'Fit-Inside'.
Combining these two Apply Aspect settings ensures that the end result texture is true to the source pixels, no matter the desired aspect ratio.Match Gamma Zone
This flag tells whether to trim theRenderTexture Target
to exclude content outside of theCustom Gamma Zone
setting in theInternal Texture Settings
section. This is useful for handling multiple video systems like LTCGI, VRSL or ShaderMotion, notably it helps prevent VRSL video data from leaking into the LTCGI rendering.Brightness Multiplier
Allows you to control the brightness of the texture during baking if needed. Defaults to 1.
Global Texture Settings
[Avatar Support] Global Video Texture
Also called the Global Shader Variable.
Once you have a blit texture assigned, you can click this button to enable this TV to write to the_Udon_VideoTex
global shader variables. This enables avatars to sample the video texture. Only one TV in your scene can have this active at a time.
You can call_[Enable/Disable/Toggle]GlobalTexture
on the TVs to control which one is active.Texture Transform Mode
This group of settings (only available when the[Avatar Support]
option is enabled) defines the value of the_Udon_VideoTex_ST
vector, which shall be used by shaders to trim the video texture based on the world's specification.
The purpose of this feature to to handle situations where the video has a special section of it that should be used only for avatars, or if there is additional embedded data in the video that needs to be hidden (eg: DMX data for VRSL).As-Is
mode does not transform the texture at all. It's there mainly to signify that the transform logic should be skipped.Normalized
mode is effectively the same as what you'd see in a shader inspector with theTiling
andOffset
values.By Pixels
mode allows you to specify, in pixels, the portion of the global texture to be visible viaPixel Origin
andPixel Size
values.- Internally the values get converted into a Normalized format, relative to the source video texture size.
- The
Pixel Origin
value is calculated from the Top-Left corner of the texture. - If you set a
Pixel Size
value to zero or a negative number, it will calculate the size by subtracting the value from the width of the original size of the respective axis.
VRSL Presets
modes are pre-made selection ofBy Pixels
options. You should used these if you are integrating ProTV with VR Stage Lighting.
Bake Global Texture
If you absolutely need to keep a portion of the texture off of avatars (some shaders don't implement the _ST vector correctly), you will need to enable this flag. This causes the internal texture to be Blit'ed into a second internal render texture with the portion trimmed as desired.- WARNING: The baking the texture will involve an additional RenderTexture, costing some performance and memory space. Be aware of this when using the feature.
- If you bake the texture, the
_Udon_VideoTex_ST
property will be set to the default value of(1, 1, 0, 0)
. - Baking is disabled when using the
As-Is
Texture Transform mode.
Show Texture Previews
ONLY AVAILABLE DURING PLAY-MODE
This play-mode setting will display all the active render textures for the currently selected TVManager in the inspector below the setting. Above each texture will be the respective name and the physical texture dimensions for reference.
Misc Options
Start Disabled
This toggle makes it so the TV disables itself (via SetActive) after it has completed all initialization. Will disable the game object after the _TvReady event has fired for listeners.Stop Media When Disabled
This toggle makes the TV call the stop logic for the media when the TV game object itself becomes disabled.Enable Local Pause
This toggle allows the TV to be paused locally without affecting other users. Only applies to non-owners. IfPlay State Takes Ownership
is enabled and the user has permissions to control the TV, they take ownership and pause for all instead of just locally.
Detected Plugins
This section will display all TVPlugins in the scene and display their relation in the scene.
- If there is a disabled checkmark, that plugin is already connected to the selected TV.
- If there is a plus symbol, that plugin is not connected to the selected TV. You can click the plus button to connect it.
- For plugins that are already connected to another TV, they will be listed in the
Connected to Other TVs
foldout. Open that to view the rest and which TV the are connected to.
To read about how to interface with the TV programmatically, check out the TVManager API Documentation page.