[PLUGIN] - VideoJS Advanced + YouTube, Vimeo, Wistia, HLS, DASH, MUX, Pre-roll Ads (plus more)

Hey Paul!

Looks like you’re a night owl too. (Scratch that, didn’t see you were in the UK! Morning to you!)

It works perfectly in all browsers, it’s only when you download the app from the App Store that I run into the issue. Here is the link to the App if you’d like to download it. It requires a login, but I’ll just give you the one I gave to the App Store Connect and Google for review.

When you log in and you get to the home page, Click the menu icon in the top right, and select the link from the floating menu that says “Earn Points.” You’ll see what I mean as soon as the video loads and you hit the play button.

email: JimKillen12@hotmail.com
PW: AppleTester.0401

Ok I’ll take a look, thanks. I can’t make any promises here because it could be an app setting causing it, or even overriding some of the web stuff but will try and find out. I suspect the playsinline option could be the culprit. If that’s a setting you have control over through the app process, make sure it’s being set.

1 Like

You may not be able to access it, because I have it set right now for only the United States. I did a screen recording, here is the Google Drive link.

https://drive.google.com/file/d/1FJVralRTa8sVtEVyzIjW2xG0yPQO64PH/view?usp=drivesdk

1 Like

Yep I reakon that’s definitley an iOS setting there. So how are uploading the app to the app store? I’m unfamiliar with Code Academy but in the past I’ve done a similiar thing using Xcode and I’ve found that the allowsInlineMediaPlayback value needs to be set to true.

That goes along with what I’ve been researching in the meantime. They did the XCode build, I’m a PC guy and certainly lower than novice with respect to code. I’ll reach out to the Code Academy folks and see what I can do about a rebuild noting the “allowsInlineMediaPlayback” value being set to true.

I appreciate your hard work, Paul, thank you!

~James

Your welcome, hopefully the guys will get it fixed. It will be something they can fix for sure so all good :slight_smile:

MUX Update

New actions and API endpoints have been added to support the upload of assets into a MUX environment. For anyone interested in this and for the purpose of documentation, details are below.


NEW STATES

  • MUX upload progress
    Shows the file upload progress value when uploading a media file to MUX.
    The value can be used with a progress bar.

  • MUX upload error
    Shows the error message of a MUX upload.

  • MUX upload attempt failure
    Shows the attempt failure message of a MUX upload.

  • MUX upload completed
    Shows true when a MUX upload has completed.

  • MUX selected file size
    Shows the file size for a selected file (in bytes) to be uploaded to MUX.

  • MUX selected file name
    Shows the file name for a selected video file to be uploaded to MUX.

  • MUX selected file duration
    Shows the duration (in seconds) for a selected video file to be uploaded to MUX.

  • MUX selected file poster
    Shows the poster for a selected video file to be uploaded to MUX.

  • MUX upload paused
    Shows Yes when the upload process to a MUX account has been paused.


NEW EVENTS

  • MUX upload has errored
    Fired when a MUX upload has errored.

  • MUX upload has completed
    Fired when a MUX upload has completed.

  • Fired when a MUX upload has completed.
    Fired when a MUX upload has started.


NEW ACTIONS

  • Upload media to MUX
    This action uploads a media file to MUX.
    -Endpoint URL
    This needs to be the result of running the "Create upload URL (MUX)" endpoint. You need the URL in this field.
    -Chunk size
    This is the chunk size (in bytes) which determines how much data to upload (in chunks) which is better suited for handling large media files. The default is 10mb.

Splits the file into chunks that are a multiple of 256KB (256 1024 bytes). For example, if you wanted to have 20MB chunks, you’d want each one to be 20,971,520 bytes (20 1024 * 1024). The exception is the final chunk, which can just be the remainder of the file. Bigger chunks will be a faster upload, but think about each one as its own upload in the sense of needing to restart that one if it fails, but needing to upload fewer chunks can be faster.

  • Pause MUX upload
    Pauses the upload process to MUX.

  • Resume MUX upload
    Resumes the upload process to MUX if paused.


NEW DATA CELLS - (API endpoints)

These requests require Basic authorization to connect. To generate the correct base64 authorization key, you’ll need your Token ID and Token Secret which you get through MUX, and then you will probably need to follow this…

http://paul-testing-4.bubbleapps.io/base64_authorization

  • Create upload URL (MUX)
    Creates an authenticated MUX URL which is required before uploading any video files, or more specifically before running the new upload action above since you need to supply the endpoint URL.
    Create Direct Upload reference | Mux

  • Check asset status (MUX)
    Returns various information on assets. Typically used to return playback ID's, duration and other information. Requires an asset ID
    Get Asset reference | Mux

  • Check upload URL (MUX)
    Can be used to check the progress of the create upload URL. Most of the time you won't need this as a new URL is created straight away. This requires the ID in the response from running the upload URL above.
    Get Direct Upload reference | Mux


Note 1: There is an API request for uploading files which isn’t included at the moment. The reason for creating an Action to do this was because it handles large media files in a better way. If the connection goes offline for a period of time, the upload will not stop, instead it will pause and then resume when the connection comes online again. Attempting to upload potentially large media files through their API request is doable but if it fails the process needs to restart.

Note 2: For anyone interested in generating thumbnails, it’s an area being worked on now. There is now a new action called “Generating thumbnails” which does everything that my original CodePen does. It’s being worked on at the moment to improve it but it is included.

Demo: Paul-testing-4 | Bubble Editor

Paul

1 Like

Incredible work, @pork1977gm !!!

Thanks :slight_smile:

One more feature included, it enables a scrubber on top of the video, which when hovered does as shown below. It requires a sprite sheet (image) to be loaded into the video player with the correct settings to work.

screen_recording

In order to create the sprite image, you can run the action called “Generate video thumbnails” then either save the output as a file download so you can upload to your database perhaps, or see the resulting image within the custom state called “Thumbnails sprite sheet”. This is more of an admin type of action since it can take some time to run.

It’s been a bit, hit and miss with various formats so it may need further work in the future, but for now, it seems to work well with MP4 and other standard web formats of videos. If you can get the sprite file generated then you should be fine loading it.

Image widths and heights when generated need to match the size of your video player if you’re going to use this. It’s not really a feature designed to be dynamic at the moment. The video player should be at a fixed with since the images within the sprite sheet are loaded but not resized (yet)…

Awesome plugin. Been great so far. Is it possible to somehow expose a property/state that shows whether the video is buffering?

Also, it looks like there’s a bug where the playback rate button shows up in the player even if it is turned off in the video js control settings.

Great thanks very much.
I spotted that control bug the other day, I’ll put a fix in place for it soon. In the meantime you can make that playback rate control disappear by putting the controls action into a workflow like this…

It should only run once when the loaded meta data is available. I’ll create a state for buffering and let you know once done.

1 Like

Great, thanks for the quick reply. Will implement this workflow for now.

Looking forward to it!

I’ve added a buffering percentage value into the demo as seen in the following image. Do you just want to check it against a few videos first before I publish the update? I’ve run a few tests and it seems to do the job fine.

image

Hi all,
@pork1977gm awesome work with the plugin!

I’m currently using the plugin, it’s great! But i can’t seem to work out how to Show/Hide Text/Button when the Video Player reaches a specific time.
For example:
at 0:03 show button
at 0:05 hide button
Here’s a screenshot of my workflow

I can Show/Hide the Button/Text when I click Play and Pause only. I’m quite new to Bubble, still trying to figure things out. I’ve looked through the Bubble forum but can’t seem to figure it out :sweat_smile:

Hey @venetics
Thanks!

So it will probably be because the “current time” state is something like a 5 or 6 point decimal number and you’re referencing it at exactly 3 which I doubt will be caught in time to satsfy the condition.

Try making it a round number like this and see if it works.

image

1 Like

Awesome! Worked like a charm. Thanks @pork1977gm !

1 Like

Greetings, @pork1977gm. Just noticed you added all kinds of new Mux interactions. Sorry for my delayed response before regarding Cloudinary. Been trying to research viable solutions but am thinking Mux looks more appealing now.

Out of curiosity, does your plugin support any sort of restrictions from the Bubble side on playback of Mux content? To clarify, I’m needing that private video scenario we discovered previously where I want to “expire” access to Mux videos after X number of days in Bubble. Basically, I’m needing a solution that securely prevents users from accessing Mux URLs directly unless approved via my app.

Does that make sense?

Hi @eLPDev

I know MUX have a ‘Secure video playback’ section which involves using Signed URL’s that can control how long a video can be played back for (and expiration I think). I’ve not implemented any of this into the plugin yet, it only deals with ‘public’ playback methods.

Take a read through this, Secure video playback | Mux

I could take a look at that feature and figure out what’s needed.

@pork1977gm,

Makes sense, and thanks for the prompt response. I’m definitely interested in that and am trying to get it to work on my end. Really wanting to use your plugin; just need to figure out how to make videos private before investing.

Currently, trying to figure out how to incorporate the Mux SDK into Bubble, which is the “gateway” to private access: Forum Link

Hoping this brings some answers.

Ok, replied on the other post. I’ll make a start on implementing it.

1 Like