I’ll also mention that one of the biggest bottlenecks when you start going over 2k is GPU memory bandwidth. I’ve been pushing 2 x 2k and 1 x 4k (which is equivalent to 1.5 x 4k) on a GTX970 at 24FPS, and I think that about saturates the bus. I think the 1080 Titans or something are the cards with bigger memory buses, and you might look at those if you’re still getting stuttering.
Also, if the stuttering is happening on loop, it sounds like an issue with seek speed. Which is largely affected by drive speed (and also encoding, but MJPEG is one of the best for random seek). Make sure your videos are on a local, high-speed SSD. If your software stack allows you, and your video is small enough, try loading the whole video into RAM.
Most video playback libraries don’t give you control over stuff like that, which–not to oversell myself–is why I like a libglvideo. It’s small and hackable.
Lastly, JPEG can be CPU intensive to decode at higher resolutions or framerates unless your playback lib provides GPU JPEG decoding. You might just check to see if your CPU is saturated, and upgrade it if it is. This is a big advantage of Hap, because it requires no CPU-side decoding, which also optimizes GPU memory bandwidth usage.
Feel free to hit me up on email/twitter if you want to discuss in more detail.