GStreamer optional video playback support on Windows

Just wanted to bring to the attention of people here that there is a fresh PR that adds support for GStreamer video playback under Windows and its in need of some testing. You can find it here .

Important details are attached to the PR so have a look there on how to proceed with this if you would like to give it a try.

Happy New Year to everyone!
Petros

4 Likes

That’s awesome. Just out of curiosity, is this hardware accelerated video playback? How would performance compare to the MediaFoundation + WGL_NV_DX_interop2 method?

Thanks for the hard work!

1 Like

There is HW acceleration support in parts of the GStreamer pipeline but it’s not a complete ‘zero-copy’ path in the sense that the MediaFoundation + WGL_NV_DX_interop2 does AFAIK.

That said, the GStreamer player utilizes the gst-gl plugins which internally use a far more performant path than the traditional CPU one ( i.e PBO’s for uploading/downloading, GPU based color space conversion etc. )

I suppose only benchmarking would show what the actual difference is. As noted on the PR I had the chance to only try this under a Windows 10 VM running on a MBP so I would also love to see how it performs natively to be honest. The player has been extensively used under Linux where it is the default video player and I ve been quite happy with the way it has performed so far so I can only hope that the Windows version matches similar performance.

If that is the case then I could imagine the GStreamer player to be a good drop-in option on Windows for projects with mid-high range video playback requirements. For more exotic situations ( e.g multiple 4K streams ) there might still be a need for more experimental approaches like the interop extension :slight_smile:

I m gonna have a decent Windows machine available at some point during the next two weeks where I would like to try this out again but till then any results, impressions would be great in order to see if we would like to keep this option for Windows.

Cheers,
Petros

That’s really great, thanks for such a comprehensive response. Video on windows is the bane of my existence and I’m not really happy with my MF implementation so a slightly less performant but more stable video solution would be fantastic.

I’m only just back at work from the break so I have a few little fires to put out, but I have my windows dev box sitting here so hopefully I can find some time to give it a go and get back to you. Is there a specific test app you’ve been using?

@lithium

I have pushed two new PR’s ( #1951 and #1952 ) that should be applied before trying out this. Details can be found in my comments on the original PR. The first one is a fix for streaming sources and the second one makes the test app ( located under Cinder/test/Linux/GstPlayerRefactorTest ) I have used for Linux / macOS, also compatible with Windows ( note that it depends on the streaming fix in order to run properly since it plays back http(s) streams ).

For local disk tests I just used the QuickTimeBasic example, so nothing fancier to add here.

EDIT: #1951 has been merged into master and #1952 has been applied on top of the initial PR so no need to manually apply these two beforehand anymore.

Cheers,
Petros

Thanks petros!

Sorry, if this seems like a dumb question, but what is MSW 64bit? :slight_smile:

Hi lithium!

Can you please provide a link to where I can find more information to MediaFoundation + WGL_NV_DX_interop2 method? I assume this is working in Windows, right?

p.s. sorry if this seems like hijacking a thread.

Thanks!
Mitja

@petros Client work has been a nightmare so i still haven’t gotten around to testing, but now that the PR situation is a bit simpler i might be able to squeeze it in over lunch. Sorry for flaking.

@mitjaprelovsek
Yes, it uses an nvidia extension (though intel supports it and a few amd cards too) to share textures between directx and opengl, which means you can use windows’ hardware accelerated MediaFoundation api and then just squirt the textures over to OpenGL. Unfortunately I can’t share my implementation, but the Cinder-WMFVideo block has a pretty* solid implementation you can use.

* It’s been a long time since i’ve looked at it so it’s probably rock solid now, it was just early in development when I first came across it and had a couple of little foibles.

Hi Mitja,

Just a shortcut for Microsoft Windows 64bit :slight_smile:

Cheers,
Petros

No worries, I feel you :slight_smile:

Good luck!

Cheers,
Petros