World/Udon Bugs & Feature Requests

Post about current World or Udon bugs feature requests. One item per post!
Non-constructive and off-topic posts will be moved or deleted.
[1896] VRCJson.TryDeserializeFromJson may incorrectly parse braces in strings inside nested objects
Tested with VRChat client build 1896. I would like to report an issue with VRCJson.TryDeserializeFromJson. There appear to be cases where valid JSON fails to deserialize when an object is nested two or more levels deep and a string inside the nested object contains a brace character ( { or } ). The exact behavior appears to depend on the nesting depth and the brace character. It is not the case that every brace inside every nested object fails. For example, a closing brace ( } ) inside a string at the third nesting level can deserialize successfully. Braces inside JSON strings should always be treated as ordinary string characters and should not affect the surrounding object structure. The following valid JSON objects fail to deserialize: { "x": { "y": "{" } } { "x": { "y": "}" } } { "x": { "y": { "z": "{" } } } Reproduction code: string json1 = @"{ ""x"": { ""y"": ""{"" } }"; bool success1 = VRCJson.TryDeserializeFromJson(json1, out DataToken result1); Debug.Log(success1); Debug.Log(result1.ToString()); // Expected: true // Actual: false // // UnableToParse: Unable to Deserialize from Json: // Found end of string before finishing object string json2 = @"{ ""x"": { ""y"": ""}"" } }"; bool success2 = VRCJson.TryDeserializeFromJson(json2, out DataToken result2); Debug.Log(success2); Debug.Log(result2.ToString()); // Expected: true // Actual: false // // UnableToParse: Unable to Deserialize from Json: // Found unexpected character '"' while looking for character ',' string json3 = @"{ ""x"": { ""y"": { ""z"": ""{"" } } }"; bool success3 = VRCJson.TryDeserializeFromJson(json3, out DataToken result3); Debug.Log(success3); Debug.Log(result3.ToString()); // Expected: true // Actual: false // // UnableToParse: Unable to Deserialize from Json: // Found end of string before finishing object // Control case: this valid JSON deserializes successfully. string control = @"{ ""x"": { ""y"": { ""z"": ""}"" } } }"; bool controlSuccess = VRCJson.TryDeserializeFromJson(control, out DataToken controlResult); Debug.Log(controlSuccess); Debug.Log(controlResult.ToString()); // Expected: true // Actual: true This may be related to the previously reported issue: "VRCJson.TryDeserializeFromJson may still incorrectly parse arrays when strings contain brackets" ( https://feedback.vrchat.com/udon/p/vrcjsontrydeserializefromjson-may-still-incorrectly-parse-arrays-when-strings-co ) That report is marked complete, but similar parsing failures remain reproducible with braces inside string values in nested JSON objects in client build 1896.
0
·
Bug Reports
Expose multi-audio track selection for VRCAVProVideoPlayer to Udon
## Problem Media files can contain multiple audio tracks (for example Spanish, English and Japanese), but worlds using VRCAVProVideoPlayer cannot enumerate or select those tracks from Udon. The player chooses one track and world authors have no supported way to change it. This prevents proper multilingual cinema, anime, karaoke, event and accessibility experiences. Current workarounds require duplicating the full video, transcoding variants on a server, or running a second audio player and fighting synchronization. AVPro itself has audio-track APIs, but the VRChat wrapper does not expose equivalent functionality to Udon: https://www.renderheads.com/content/docs/AVProVideo-v3/api/RenderHeads.Media.AVProVideo.VideoPlayer_AVPro.html VRChat video-player documentation: https://creators.vrchat.com/worlds/udon/video-players/ ## Requested API Please expose a small, local API on VRCAVProVideoPlayer, with names similar to: int GetAudioTrackCount() string GetAudioTrackLanguage(int trackIndex) string GetAudioTrackName(int trackIndex) int GetSelectedAudioTrack() bool SetAudioTrack(int trackIndex) An event indicating that track metadata is available would also be useful. The exact API names are not important. The important requirements are that Udon can enumerate the available tracks, show their language/name, and select one. ## Behaviour Audio-track selection should be local by default, so different users in the same instance can listen to different languages while watching the same synchronized video. Changing track should not change the shared URL, playback state or time for other users. Switching during playback should preserve the current playback position. If the backend must pause or reopen the media, the SDK could handle that internally or document the required sequence. A capability check is acceptable when a platform or media backend does not support track switching. PC-only support initially would still be useful if cross-platform parity is not immediately possible. ## Acceptance example A world plays one media URL containing Spanish, English and Japanese audio tracks. Two users watch the same synchronized video at the same timestamp. User A selects Spanish locally. User B selects Japanese locally. The video remains synchronized and neither user's choice changes the other user's audio. This would enable true multilingual playback without storing or streaming duplicate copies of the video.
0
·
Feature Requests
Load More