Git Product home page Git Product logo

vvmw's Introduction

VizVid

Banner

Welcome! VizVid is a general-purpose video player frontend for use in VRChat. It aims to cover many use cases, from watch-together video/live stream player in lounges, to large event venue for music performances, or even booths for exhibitions or showcases. Due to its target customers, it has a flexible architecture, just like a factory made electronic but with a easy to open back lid, make it easier to let users mess them around for their needs.

Features

  • Basic playback, seeking controls
  • Pre-defined playlists & user queue list
  • Playback history for user inputed URLs (since v1.0.32)
  • Quest (Android) client specific URLs (only available on pre-defined URLs, play lists and API)
  • Low latency mode, (tested with RTSP/RTMP streams)
  • Local mode (toggleable syncing with other users within instance before uploading)
  • Modulized screen, audio & UI architecture, support multiple instances
  • Both on-screen & separated interfaces available
  • (Almost) one-click to change interface colors
  • Supports both legacy UI and TextMeshPro setup (since v1.0.32)
  • Local pickupable & scaleable screen
  • Wrist band (VR) / keyboard (desktop) resync button & volume controls
  • Auto plays when local user steps into specific region
  • Auto fades out background music when video is playing
  • Custom shader with various display modes built-in (Stretch, Contain, Cover, Stereographic Video Source), can be configurated on material options
  • Localization system with auto language detection (English, Chinese, Japanese & Korean)
  • Locked UI with Udon Auth.
  • Basic Audio Link support, which will auto switch audio source when playing, also reports player state (playback progress, volume, loop, shuffle, etc.) on newer version (1.0.0+).
  • Basic LTCGI integration, provided CustomRenderTexture for use.
  • Bundled a modified version of YTTL to display video title from known sources.
  • Simple API for [your own udons] integration.

Demo

Please visit the official demo world!

Documentation

Please refer to another readme for details.

Installation

You may use following methods:

  • Via VCC (Recommend):
    1. Ensure you have installed VRChat Creator Companion, if not, download here.
    2. Go to my package listings landing page, click "Add to VCC" button under the banner and follow instructions.
    3. You can then go to "Manage Project" of your own world project, click on the "+" button to add the player component.
    4. Enjoy!
  • Via Booth: Click here.
  • Via GitHub Releases: Click here.

Issues

For any issues, please contact me on Discord server or file an issue on GitHub if you believe there is a bug.

Credits

Special Thanks

  • LR163 / Cross - Early Stage Functionality & (Live Streaming) Latency Test
  • HsiaoTzuOWO - UI & Implementation Test
  • Yan-K - UI / UX Consultant
  • 六森 - Advertisement Materials & Demo World
  • 水鳥waterbird - Naming

License

MIT


Made with ❤️ in 🇭🇰 🇹🇼.

vvmw's People

Contributors

jlchntoz avatar narazaka avatar sonic853 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

vvmw's Issues

video stuck and loop in a 1-second short clip

when there are several person watching, the video alway stuck somewhere and loop in a 1-second short clip, I have to drag the progress bar to bypass the looping part, sometimes it works and sometime it doesn't, totally have no idea what happened. The video is just fine when I play it using Chrome. Would someone help or give me some advices? Thanks so much.

Queue list doesn't syncronize, causes UdonException

VizVid 1.0.6 player is added to worlds project via VCC package with SDK 3.4.0

Repro Steps:

  1. User 1 enters a URL and it shows up in the queue locally.
  2. User 2 sees user1's entry show as a glitched blank entry in the queue list.
  3. User 2 enters a URL and it shows up in the queue locally.
  4. User 2 sees user1's entry show as a glitched blank entry in the queue list.
  5. User 1 or 2 presses skip button to go to next track.
  6. VizVid hits exception trying to play track that isn't there and the script is halted on both sides.
  7. The display is black and VizVid is no longer responsive.

Side note that VizVid works fine if only tested with one user in the instance, but as soon as the queue fails to synchronize between more than one user, it breaks.

Attached is the exception log, it is the same for both users. Let me know if there's anything else I can provide to help.
log-excerpt.txt

UdonException From Locale Manger after update to 1.0.13+

I updated from 1.0.10 to 1.015 and now I get an Udon Exception from languangeManager.cs. I rolled back one version at a time and the issue seems to exist in versions 1.0.13 and greater. 1.0.12 and older behave fine.

Full error log:
  [UdonBehaviour] An exception occurred during Udon execution, this UdonBehaviour will be halted.
VRC.Udon.VM.UdonVMException: The VM encountered an error!
Exception Message:
  An exception occurred during EXTERN to 'UnityEngineTextAsset.__get_text__SystemString'.
      Parameter Addresses: 0x00000005, 0x00000040
  
  Object reference not set to an instance of an object
----------------------
Program Counter was at: 1328
----------------------
Stack Dump:
  0: 0x0000000C
----------------------
Heap Dump:
  0x00000000: 3438611338955145008
  0x00000001: JLChnToZ.VRC.VVMW.I18N.LanguageManager
  0x00000002: System.Int64[]
  0x00000003: 4294967295
  0x00000004: UnityEngine.Component[]
  0x00000005: null
  0x00000006: null
  0x00000007: null
  0x00000008: EN
  0x00000009: null
  0x0000000A: null
  0x0000000B: Placeholder (VRC.Udon.UdonBehaviour)
  0x0000000C: 4294967295
  0x0000000D: null
  0x0000000E: 1
  0x0000000F: 0
  0x00000010: null
  0x00000011: [{0}] Send Event {1}
  0x00000012: 684
  0x00000013: null
  0x00000014: null
  0x00000015: Locale (VRC.Udon.UdonBehaviour)
  0x00000016: null
  0x00000017: null
  0x00000018: null
  0x00000019: null
  0x0000001A: null
  0x0000001B: 1284
  0x0000001C: DataDictionary
  0x0000001D: 2
  0x0000001E: _vrclang
  0x0000001F: 12
  0x00000020: 13
  0x00000021: _timezone
  0x00000022: _name
  0x00000023: String
  0x00000024: 3328
  0x00000025: URLInput
  0x00000026: URLInput
  0x00000027: 3820
  0x00000028: _OnLanguageChanged
  0x00000029: __refl_typename
  0x0000002A: Placeholder (VRC.Udon.UdonBehaviour)
  0x0000002B: null
  0x0000002C: False
  0x0000002D: False
  0x0000002E: 1
  0x0000002F: True
  0x00000030: UnityEngine.Component[]
  0x00000031: 13
  0x00000032: 14
  0x00000033: 13
  0x00000034: 13
  0x00000035: False
  0x00000036: null
  0x00000037: 0
  0x00000038: 0
  0x00000039: False
  0x0000003A: null
  0x0000003B: null
  0x0000003C: null
  0x0000003D: False
  0x0000003E: null
  0x0000003F: False
  0x00000040: null
  0x00000041: Null
  0x00000042: Null
  0x00000043: null
  0x00000044: 0
  0x00000045: 0
  0x00000046: null
  0x00000047: null
  0x00000048: null
  0x00000049: 0
  0x0000004A: 0
  0x0000004B: 0
  0x0000004C: False
  0x0000004D: null
  0x0000004E: Null
  0x0000004F: Null
  0x00000050: Null
  0x00000051: False
  0x00000052: False
  0x00000053: null
  0x00000054: Null
  0x00000055: Null
  0x00000056: False
  0x00000057: null
  0x00000058: Null
  0x00000059: Null
  0x0000005A: Null
  0x0000005B: 0
  0x0000005C: null
  0x0000005D: Null
  0x0000005E: Null
  0x0000005F: False
  0x00000060: null
  0x00000061: False
  0x00000062: null
  0x00000063: False
  0x00000064: False
  0x00000065: True
  0x00000066: Null
  0x00000067: Null
  0x00000068: False
  0x00000069: Null
  0x0000006A: Null
  0x0000006B: False
  0x0000006C: null
  0x0000006D: UnityEngineObject.__op_Equality__UnityEngineObject_UnityEngineObject__SystemBoolean
  0x0000006E: SystemObject.__op_Equality__SystemObject_SystemObject__SystemBoolean
  0x0000006F: UnityEngineComponentArray.__ctor__SystemInt32__UnityEngineComponentArray
  0x00000070: SystemObjectArray.__Set__SystemInt32_SystemObject__SystemVoid
  0x00000071: SystemArray.__IndexOf__SystemArray_SystemObject__SystemInt32
  0x00000072: SystemInt32.__op_GreaterThanOrEqual__SystemInt32_SystemInt32__SystemBoolean
  0x00000073: SystemArray.__get_Length__SystemInt32
  0x00000074: SystemInt32.__op_Addition__SystemInt32_SystemInt32__SystemInt32
  0x00000075: SystemArray.__Copy__SystemArray_SystemArray_SystemInt32__SystemVoid
  0x00000076: SystemString.__Format__SystemString_SystemObject_SystemObject__SystemString
  0x00000077: UnityEngineDebug.__Log__SystemObject__SystemVoid
  0x00000078: SystemInt32.__op_LessThan__SystemInt32_SystemInt32__SystemBoolean
  0x00000079: SystemObjectArray.__Get__SystemInt32__SystemObject
  0x0000007A: UnityEngineObject.__op_Inequality__UnityEngineObject_UnityEngineObject__SystemBoolean
  0x0000007B: VRCUdonCommonInterfacesIUdonEventReceiver.__SendCustomEvent__SystemString__SystemVoid
  0x0000007C: UnityEngineTextAsset.__get_text__SystemString
  0x0000007D: VRCSDK3DataVRCJson.__TryDeserializeFromJson__SystemString_VRCSDK3DataDataTokenRef__SystemBoolean
  0x0000007E: VRCSDK3DataDataToken.__get_TokenType__VRCSDK3DataTokenType
  0x0000007F: SystemObject.__Equals__SystemObject__SystemBoolean
  0x00000080: VRCSDKBaseVRCPlayerApi.__GetCurrentLanguage__SystemString
  0x00000081: VRCSDK3DataDataToken.__get_DataDictionary__VRCSDK3DataDataDictionary
  0x00000082: VRCSDK3DataDataDictionary.__get_Count__SystemInt32
  0x00000083: SystemStringArray.__ctor__SystemInt32__SystemStringArray
  0x00000084: VRCSDK3DataDataDictionary.__GetKeys__VRCSDK3DataDataList
  0x00000085: SystemTimeZoneInfo.__get_Local__SystemTimeZoneInfo
  0x00000086: SystemTimeZoneInfo.__get_Id__SystemString
  0x00000087: VRCSDK3DataDataList.__get_Count__SystemInt32
  0x00000088: VRCSDK3DataDataList.__get_Item__SystemInt32__VRCSDK3DataDataToken
  0x00000089: VRCSDK3DataDataToken.__get_String__SystemString
  0x0000008A: SystemStringArray.__Set__SystemInt32_SystemString__SystemVoid
  0x0000008B: VRCSDK3DataDataToken.__op_Implicit__SystemString__VRCSDK3DataDataToken
  0x0000008C: VRCSDK3DataDataDictionary.__TryGetValue__VRCSDK3DataDataToken_VRCSDK3DataTokenType_VRCSDK3DataDataTokenRef__SystemBoolean
  0x0000008D: VRCSDK3DataDataDictionary.__TryGetValue__VRCSDK3DataDataToken_VRCSDK3DataDataTokenRef__SystemBoolean
  0x0000008E: SystemConvert.__ToByte__SystemObject__SystemByte
  0x0000008F: SystemByte.__op_Equality__SystemByte_SystemByte__SystemBoolean
  0x00000090: SystemString.__op_Equality__SystemString_SystemString__SystemBoolean
  0x00000091: VRCSDK3DataDataToken.__get_DataList__VRCSDK3DataDataList
  0x00000092: VRCSDK3DataDataList.__Contains__VRCSDK3DataDataToken__SystemBoolean
  0x00000093: VRCUdonCommonInterfacesIUdonEventReceiver.__GetProgramVariable__SystemString__SystemObject
----------------------
Inner Exception:
 ---> VRC.Udon.VM.UdonVMException: An exception occurred during EXTERN to 'UnityEngineTextAsset.__get_text__SystemString'.
    Parameter Addresses: 0x00000005, 0x00000040
 ---> System.NullReferenceException: Object reference not set to an instance of an object
  at VRC.Udon.Wrapper.Modules.ExternUnityEngineTextAsset.__get_text__SystemString (VRC.Udon.Common.Interfaces.IUdonHeap heap, System.Span`1[T] parameterAddresses) [0x0001d] in <579c294b07644bb9a9d5ea02012a6229>:0 
  at VRC.Udon.VM.UdonVM.Interpret () [0x00273] in <db185df8d66b4e718f71323dcd2335ed>:0 
   --- End of inner exception stack trace ---
  at VRC.Udon.VM.UdonVM.Interpret () [0x0033c] in <db185df8d66b4e718f71323dcd2335ed>:0 
   --- End of inner exception stack trace ---
  at VRC.Udon.VM.UdonVM.Interpret () [0x00436] in <db185df8d66b4e718f71323dcd2335ed>:0 
  at VRC.Udon.UdonBehaviour.RunProgram (System.UInt32 entryPoint) [0x0006d] in D:\Unity Projects\Lookout World VizVid VCC\Packages\com.vrchat.worlds\Runtime\Udon\UdonBehaviour.cs:1029 
UnityEngine.Debug:LogError (object,UnityEngine.Object)
VRC.Core.Logger:LogError (string,int,UnityEngine.Object)
VRC.Udon.UdonBehaviour:RunProgram (uint) (at Packages/com.vrchat.worlds/Runtime/Udon/UdonBehaviour.cs:1043)
VRC.Udon.UdonBehaviour:RunEvent (string) (at Packages/com.vrchat.worlds/Runtime/Udon/UdonBehaviour.cs:1232)
VRC.Udon.UdonBehaviour:ManagedUpdate () (at Packages/com.vrchat.worlds/Runtime/Udon/UdonBehaviour.cs:528)
VRC.Udon.UdonManager:Update () (at Packages/com.vrchat.worlds/Runtime/Udon/UdonManager.cs:268)

Playlist scroll

inconvenient for long playlists

maybe...?

  • increase Deceleration Rate
  • add scrollbar
  • scroll by VR stick or mouse wheel (Scroll Sensitivity)

Controls did not update for non-owner players

Require investigation. Seems like non-owner players didn't get the controls update until they change the language or other operations that will updates the control panel.

This issue seems appears randomly since version 1.0.11, and more frequent for version 1.0.12.

asc Playlist / QueueList

Playlist / QueueList is currently displayed in descending order, but I would like an option to make it ascending.

Confusing behavior when entering URL when Auto Play List is QueueList and Default Url is specified.

When a player specifies a URL while Auto Play List is QueueList and Default Url is specified, the URL is added to the queue while the current video is still playing and will not play unless the Play Next button is pressed.
While this is understandable as a queue list behavior, however, it is difficult for players to understand that the video that is playing by default is treated as a queue list.

Potential Workaround for AVPro Screen Flickering

Got suggestion in my Discord server, uses a RenderTeture as a buffer may potentially avoids screen flickering.

As observed, this issue was caused by AVPro, not VIzVid. It happens when AVPro's video frame output does not in sync on user's camera view (either with headset or monitor)-- in more particular, at the point where an object (screen mesh) was rendering but the next video frame data was not sent to graphics card yet, thus leaving it a short blank.

The title of the previous video is displayed (non-owner)

on VizVid VCC 1.0.9
without Yttl
1 core / 3 Screen With Overlay / 1 Default Screen & Default UI (Narrow)

When a video is played from a playlist, the title of the previous video is displayed on all screens except the one who operated the playback.

Add instruction UI for desktop mode overlay

As discussed in IN/Unreal internal meeting, it would be better to have an instruction UI for desktop mode, it could be placed in-place of VR options panel (that one for selecting hands) while not in VR.

screens in canvas did not work

I placed a Default Screen prefab in the world custom left hand menu (VRC Hand Menu https://booth.pm/ja/items/4201369 ) and set the Video Screen Target, but the video was not rendered.
I tried other settings, but they did not seem to work in the Canvas.
I tried assigning the same material to a UI Image and setting the material as Video Screen Target, but it did not work as well.
What should I do to draw the video in the Canvas?

(In addition, I was able to get the desired behavior by using a means to make the Default Screen prefab outside the Canvas follow the Canvas by using Parent Constraint, etc.)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.