I had to do something similar to this. Unfortunately, there is really no way to get an on demand thumbnail image without waiting at least a few seconds due to the latency introduced by pulling a stream and waiting to encode an image. If you are okay with the user waiting 5-10 seconds to see the thumbnail image then FFMPeg is a possible solution. But if you use FFMPeg then every on demand thumbnail will fire a process on the server unless you come up with a scheme that only opens one process per stream. I ended up with a solution that did this as well as a refresher job that refreshed all the streams’ thumbnails every two minutes. This way the user will get a thumbnail instantly and then if they continue to hover over an icon, the on-demand thumbnailer process kicks in and they will be able to get new thumbnails every second.