One thought I have is why you can’t “buffer” the videos, where instead of loading the entire video, instead you load only, say, the first 15 seconds, and then while those 15 seconds play, you load the next 15 seconds, and so on and so forth. I think this would help loading times a ton.
Wow! That’s really cool. I feel this is going to be used alot!
I think you got confused while reading the script. That’s literally what it does. It loads the first 400 frames of the video at once, then it starts playing them and once the frames start to become low, for example there are only 100 more frames loaded, the script will load the next frames 200, because it uses :Destroy()
, the old frames are no longer rendered on the screen, so it doesn’t create more lag. Also I’m sorry for the big delay, I’m currently experiencing issues with my internet provider and there hasn’t been internet for the past few days. I will get the update done once I solve that issue. If you know Python then you won’t have an issue completing the script yourself, the hardest part was to make the new loading function work since you need to do it on the server.
I’m going to provide a small tutorial for this. I’ve got a website for getting the frames and a script that adds them to a dictionary automatically (may work on it more to skip frames that have the same id in case you accidentally inserted 2 of the same frame)
Update: turned the script into a small module. Things you can do: choose the path of the folder/model/container or whatever
Choose if you’d like to use getchildren or getdescendants.
Oh also you have access to the table, just do Module.FrameTable or something like that.
im trying to add more features since there’s barely anything i can add, but I’m thinking of adding an optional boolean that adds the table to an “universal” module that holds all of the dictionaries.
Also it no longer works because I’m the best at coding, especially modules
edit: module is fully done. I will provide a community resource post soon
Here’s my module for making your life a little easier: Asset dictionary
also here’s the website: https://www.onlineconverter.com/
(By the way, my module works on any type of downloadable asset, aka animation, decal, texture, mesh, image label, image button, shirt (not crap keyboard) and pants)
I am glad to hear that you have made this module. I hope more people will find it useful.
News on Update v1.1!
News on Update v1.1!
I’m almost done finishing up some stuff. Expect the update pretty soon (in a few hours or tomorrow).
What changed?
- A full guide with a video on how to use the module and import the frames (with the new Python script).
- Improved loading times and performance on the low end. Automated some calculations so you don’t have to go around the module yourself.
- Added subtitles, which you will be able to code yourself. They depend on their own format, just like real subtitles. You will need to sync them with the music manually; of course, if you don’t like them or don’t need them, you don’t have to use them. Once again, they are customizable; you can pick the container to play them in. More features to the formatting will come soon. I’m planning to add some features like being able to pick the color or even add a gradient. I also might make it word-for-word with animations in the future, but I still don’t know how to realize that, so I don’t guarantee it.
- Many more things are subject to change; if you have suggestions, don’t hesitate to leave a reply.
The update is not out; it will be in a few hours or tomorrow as of writing this.
Oh, I thought it was loading the whole video. When I went to the demo place and opened the Shift+F3 menu, it appears to be trying to pre-load about ~1300 frames, which I assumed was the whole video.
Update v1.1 is out!
Video Player | v1.1
2023-06-23T21:00:00Z
New Features
Embedded a subtitle code reader into the module.
Implemented a solution for uploading a large number of assets. Use the script here.
Changes
Changed the resample mode of each frame to Pixelated (configure it in the module)
also changed the scale type to fit, both of these changes are optional, you can remove them if the scale adds gray lines and cuts on the screen or if the resample mode makes it too pixelated or low quality on your screen
Image.ResampleMode = Enum.ResamplerMode.Pixelated --// Improves quality on larger screen resolutions. (rarely makes it worse looking)
Image.ScaleType = Enum.ScaleType.Fit --// Adds gray lines if the video does't fit t
Imrpoved documentation.
Better performance.
Added a FPS argument to the function to easily change it.
Removed some useless stuff that caused lag and rearranged some parts to improve readability and performance.
Merged the “Usages” and “Showcase” parts together.
I removed most details from the post so it’s easier to read.
The IDs as in a dictionary? I’ve made a module for getting a type of asset’s IDs into a dictionary. It’s hard to explain lol. Asset dictionary
Hey so it’s me again lol, first of all, great job on the update, the video plays way smooth now, but theres now an issue that I don’t know if it has to do with the frame dimesions or something, basically the videos now have some weird gray frames at the edges like if the video gets cropped instead of filling the entire frame like it did in the 1.0 version, something like this:
It doesn’t seem that you had added something like that hence why I’m asking, overall the module improved quite a lot in smoothness, good job!
That is a small change. I forgot to add, thanks for reminding me. Basically, I set the frame’s resample mode to Pixelated so it looks a little better on bigger screens, and I set the mode to Fit, which creates those lines. To fix it, simply change the size of the container to “fit” exactly the resolution of the video or change it to Image.ScaleType = Enum.ScaleType.Stretch
inside local function loadGroup(framesToLoad)
. I will edit the post to add this change in a few minutes. Both of these changes are optional, and you can remove them completely. Roblox, by default, should set it to stretched. Fit actually makes it fit. I don’t really know how to do UI, but all I know is that the size of the container should be as big as the size of your image to avoid any stretch effects or weird stuff on devices with irregular screen sizes.
- New Code:
local function loadGroup(framesToLoad)
for i=1, framesToLoad do
if FrameTable[#Images + 1] == nil then break end
local Image = Instance.new("ImageLabel")
Image.ZIndex = #Images == 0 and Container.ZIndex or 1 - #Images
Image.AnchorPoint = Vector2.new(.5, .5)
Image.Size = Container.Size
Image.Position = Container.Position
Image.Image = FrameTable[#Images + 1]
Image.ResampleMode = Enum.ResamplerMode.Pixelated
Image.ScaleType = Enum.ScaleType.Stretch
Image.Parent = Container
table.insert(Images, Image)
task.wait()
end
end
- Old Code:
local function loadGroup(framesToLoad)
for i=1, framesToLoad do
if FrameTable[#Images + 1] == nil then break end
local Image = Instance.new("ImageLabel")
local result
if #Images == 0 then
result = Container.ZIndex
else
result = 1 - #Images
end
Image.ZIndex = result
--// Before I used an if statement, but I changed it to a ternary statement to remove that useless variable and just make it more readable.
Image.AnchorPoint = Vector2.new(.5, .5)
Image.Size = Container.Size
Image.Position = Container.Position
Image.Image = FrameTable[#Images + 1]
Image.Parent = Container
table.insert(Images, Image)
task.wait()
end
end
Came back after I released an update to my module (why? I don’t know tbh lol) and I played the game. It wasn’t the right screen size (although you addressed it, you didn’t patch that in the game lol) and sometimes there were ghost frames (mostly at the start and one at the end)
That response was quick lmao
I haven’t been on the forum for a few weeks, I haven’t played Roblox in like a month, thanks for telling me, I’ll check onto it right now.
(Yes I was quick because finally after 3 years my browser notifications work)
Update:
I was able to re create it, also suffered an issue I thought shouldn’t be present.
This may mean 3 stuff:
- I have forgot to add the new patches and messed up something which can be fixed in 2 clicks.
- There was a recent change that broke it and can be fixed, or a recent change that can not be fixed. The “issue” I suffered was a really slow loading time, which I very well remember was not present. On my laptop which I tested everything I never had the issue and it always loaded instant. Yes, also the whole video was ghost frames. I got that screenshot after I played the video once, reset my character so it plays again. My script simply got outdated a little bit and I must update it if the change is fixable.
- It’s simply a Roblox issue that was either present before or started happening recently. I haven’t been on Roblox for about a month or two and I haven’t read any news, I hope it, it’s simply bad code or a recent update that has a fix.
To sum it up:
The sizing issue is my mistake and it will be fixed in the showcase place.
The sudden change in loading times and the whole video being ghost frames when you try to play it for the first time is either one of those 3:
- Recent Roblox update that changed something and can be fixed
- Recent Roblox update that change something and can not be fixed (only very short videos that don’t put a lot of stress)
- Issue that was present before, but haven’t ever seen it/started happening now.
I will make an investigation to see what happened and read news for the past few months to see for any changes that might break it.
For the best if there were changes then a rewrite of the whole module would be a way to do it, but I think that the module itself is completely fine, it’s just the loading part that needs to be done, but on the latest update I made it slightly better by adding chunks and multi threading for each chunk, but I don’t know, I will check again.
this is kind of unrelated but i found a funny bug. after loading delete the cache files and watch roblox seize out and the script erroring “attempt to index nil with Destroy”
you can’t fix this and the user has to intentionally trigger this but it’s funny and may even skip cutscenes lmao
So idk what’s wrong with your showcase place but when I join it and it finishes loading it starts flashbanging all over the place and then proceeds to make the screen grey with the subtitles still going…
me when roblox preloadasync doesn’t actually preload gasp
that’s a ghost frame.
It does it like every second idk. After I resetted it does work fine might’ve just been something not loading correctly
Preloadasync never preloads i swear. the images were cached. that’s why.
The problem is that Roblox can’t load that much at a time, the subtitles run in their own thread so they are not affected by the video. The video plays alongside the audio thread (in simple words the current frame is a timestamp from the audio), the video does play, but the frames have not loaded yet, so Roblox replaces it with that gray background. I’m still looking for a fix or update. This topic was discussed before on the forum, yes with actual staff members, this is surely only a Roblox problem and a limitation that can’t be went around. As of making this module and testing, the Roblox Asset Delivery and Marketplace literally crashed at least 3 times (talking about this status page).
It’s sad to say, but as stated this is only a “proof of concept” and this will never be reliable or good to use in a game. Unless Roblox does something this will be the best you can do. I don’t think that making a pixel screen will do it better. I think it will actually be worse, but who knows, might try it someday.