Build on @Samuel's answer, according to the official ffmpeg documentation you should be able to keep it pretty cross platform if you make the file
parameter passed to the FFmpegFrameGrabber
(which is really an input
parameter that gets passed down as the -i
option to ffmpeg) adhere to the different formats each device
expects.
ie:
for Windows: dshow
expects -i video="screen-capture-recorder"
for OSX: avfoundation
expects -i "<screen device index>:"
and for Linux: x11grab
expects -i :<display id>+<x>,<y>
.
So just passing those values (arguments to -i
) to the constructor and setting the format (via setFormat
) accordingly should do the trick:
Examples:
for Windows:
new FFmpegFrameGrabber("video=\"screen-capture-recorder\"")
.setFormat("dshow");
for OSX:
new FFmpegFrameGrabber("\"<screen device index>:\"")
.setFormat("avfoundation");
for Linux:
new FFmpegFrameGrabber(":<display id>+<x>,<y>")
.setFormat("x11grab");
PS: Haven't tested this fully so not sure if the quotes are actually necessary.