Best solution for multiple video players
Hi all,
I am preparing a show with many video players and I am wondering which is the best solution for smooth playback.
Some videos will have an overlay and I have chosen to work on the textures so as not to overload the cpu.I will develop the overlays and crossfades in jit.gl.pix.
The videos are currently encoded in H264 Full Hd. I will use external graphics card (AMD Radeon Rx 570) with macbook pro 15 inch 2.7 Ghz i7, Max 8.3.1.
I ask for advice on three different methods:
1 Jit.playlist (with output_texture on)
2 jit.gl.polymovie
3 individual instances of jit.movie@engine viddll.
looking at the jit.gl.polymovie js code I noticed that it can use the avf or viddll engines. So if I set viddll in Max preferences jit.gl.polymovie will play videos with that codec, is that correct ?
In this case option 3 makes no sense
I have in total 16 videos + 6 overlays.
What could be the best solution in your experience?
Thanx,
Rd
Hi Riccardo, I would go with jit.gl.polymovie.
If you then have problems with it I'll be happy to look into it.
Thanks Federico,
it is what I am currently testing and it looks promising. Solid 25-30 fps
Hi all,
I want to share my conclusions. Last night I did the show : Three Full HD H264 video streams plus two interactive graphic scenes (OSC Driven). Jit.gl.polymovie was rock solid (30 fps stable for a total duration of 50 minutes, plus six days rehearsals). Fully reliable!
Thank you guys for the work!
cool, really appreciate you sharing your results. just for completeness, which video engine did you go with?
viddll, played out with AMD Radeon Rx 570, as in my previous post. Output HDMI, converted in SDI, with a huge theatrical projector.
Excuse me, I am attempting 4 video outputs from a Macbook. There will be 4 separate monitors each with a different video. I understand that the AMD Radeon Rx 570 as described here could help. My question is does this card require its own enclosure of some sort? That information does not appear as clear here. Thank for all the help.
Yes, I used a Sonnet eGPU Breakaway Box, that has 4 video out (1 HDMI and 3 Displayport) each with Full HD resolution. But you must be aware that the use of an external GPU is possible only on an Intel Mac. The new M1 don't allow the use of an external GPU. Anyway I guess that the M1 with a bunch of adaptors could support 4 outputs. For sure I tried successfully with two
I have my eyes set on a Blackmagic eGPU, which includes a AMD Radeon Pro 580. In name this would appear similar to the card you used. This is not a Blackmagic Pro so I could only power 3 displays rather than 4. This eGPU might send a signal to 1 display via HDMI and the remaining 2 by Thunderbolt as I understand. Could I send HDMI out of an existing port on my computer to bring the amount of displays to 4? This isn't to power any displays, but as I understand it is only to send signals to CRT TVs, which would be independently powered. Is this possible?
Which Mac will you use? as I wrote before, you can connect an HDMI display to each thunderbolt port with an adapter. Now Apple has restored the HDMI on the new M1, so in case of M1 you can connect 1 display to HDMI port, and the other three with adapters. I think that the maximum resolution allowed is 4K each port. On Intel Mac you'll need adapters on each port or a eGPU (each port 1 cable).
I think we will be using 2015 Macbook Pro. We need 4 displays so would like to consider eGPU and the existing HDMI on the right side of the machine. Thanks for all your help.
Anyway, give it a try. I guess if you use an eGPU the internal GPU is disabled, so I don't know if you can use the built-in HDMI port.
Excuse me, This is news to me that eGPU disables the internal GPU. That changes a lot.
Something I want to ask is how difficult is it to have multiple videos playing on 3-4 different monitors (this is regarding objects to be utilized)? I am pretty savvy when it comes to this software, but I am unsure of how to setup multiple videos. Strange, in 20 years I have never done a multiple monitor installation.
Any direction would be great.
I'm not sure about the eGPU. I remember that when I used the external eGPU you had to choose which card to use. I think you need to do some tests.
As for videos on 4 different displays with Max it's quite easy, you have to use 4 jit.world (with @shared 1 attribute).
But the problems can be:
a loss of frames if the GPU cannot handle the 4 streams well
playback is not smooth if you use a hard disk that is not fast enough.
In any case it is better to use textures for video playback, and also it depends on the machine
Thanks for all your help! We have decided to use 2 computers (MAC) rather than one and as a result control 2 displays from each laptop (without having to worry about an eGPU). The idea is to use Midi Studio to synchronize data between the 2 machines. Because school WiFi doesn't allow Midi Studio protocol, we will use ethernet cable between the computers for the connection. Its been over a year since I used MAX so, I am unsure of what data will synchronize the videos between machines. Frankly I need to remember how to use Midi Studio for that matter. We have run into issues finding a thunderbolt 2 to HDMI adapter since Apple has seemingly stopped producing them (and we need 2 of these). I can't discern whether thunderbolt 2 and mini displayport are synonymous? Whatever the case this is definitely the cheaper option. I am glad this posting led me down the right path!
Why not use Osc if you connect computers with an ethernet cable? What do you need to sync? start/ stop or other things?
Thanks for the reply. Yes I will need to synchronize start and stop of 4 videos on different monitors. I don't recall Osc, and suspect you don't mean oscillator. Regarding the sync of it all, I imagine when I connect the machines it will occur to me. Can you please elaborate on the jit.world @shared? Does a number after @shared correspond with the coinciding display? I didn't find much on this in the literature.
jit.world is shared by default.
if communicating between instances of max, there is no need to use osc messages, udpsend and udpreceive and your own simple protocol will be enough
Can someone please clarify how jit.world can be deployed to one of two existing, different displays. I apologize but I don't understand. Thanks for relaying objects udpsend and udpreceive. There is sufficient literature on these. Thanks for everyone's help.
either drag the window onto the display and hit escape to go fullscreen, or use jit.displays to grab the display coordinates and send those to the rect attribute of jit.world
@Rob
I noticed that to go fullscreen on the Mac with one or more external displays I need to enable "display have separated spaces" otherwise fullscreen applies to all screens. Is it a bug? It seems like the opposite of what happens to others.
Mac OS 13.6.5, M1 macbookPro, Max 8.6.1
I believe this might have changed with 8.5 or 8.3, but it is now in line with how fullscreening works on other apps. The alternative is to use the rect message with the max messages hidemenubar and showmenubar
I am having to run MAX 8.3.3 because of some non-functioning objects in the current MAX version on my system. Because of this I imagine I might have to use the second approach you described. I see in the literature:
"rect [4 ints] The window rectangle is specified in pixels giving the left, top, right, and bottom coordinates of the window from the upper left corner."
So "rect" is an attribute that I input these pixel values. Again, I would be specifying two different displays on two different machines. I don't understand how hidemenubar and showmenubar come in. Are these messages which are sent from boxes to the jit.world object?
unless you have a particular reason not to, I would just re-enable Displays have separate spaces, then you'll get the same behavior with 8.3.* and 8.5+
but otherwise, yes, something like this does the trick programmatically
Excuse me Rob, I would appreciate any help on this. We have an updated patch that is not maximizing in the individual screen spaces. The escape function worked initially but stopped working. I was wondering if you could help me decipher how we an get this to work. We have largely kept your patch in tact. Thanks for all the direction so far just a little more troubleshooting. Please see the patch we have.
you'll have to let me know first of all what's not working? what are you seeing? What's the display configuration? Is "Displays have separate spaces" enabled or disabled? What OS? What version of Max?
if you are on a version of Max between I believe 8.3 and 8.5 this patch might not work as expected. I believe there was a bug where a black bar was left across the top. In that case I'd recommend either updating to 8.6, or using the "native" fullscreen and setting DHSS to on.
I have "Displays have separate spaces" enabled. We are using MAX 8.3.3. I can get back to you on the OSX version because I don't have access to that machine at the moment. The problem was that the video was not maximizing as expected even when the video was moved on top of the relevant display. Can you tell me how use "native" fullscreen? I don't know how to set DHSS to on. Can you explain anymore? Sorry for my ignorance. Thanks for all of your help.
DHSS = displays have separate spaces, having that enabled is what you want. Ok, if using 8.3.3 I think you'll simply want to use "native" fullscreen. this means sending fullscreen 1 to jit.world rather than using the rect message. you can use the rect message to position the window on the proper display, and then send fullscreen 1 and it should fill the display as expected. So either drag the window to the proper display, or use jit.displays as in the patch above to place the window on the proper display, then send fullscreen 1
Thanks very much for this fix. Sending jit.world "fullscreen 1" does the trick. This is a dependable way of maximizing a viewer in a display space.