[MPlayer-cygwin] Java GUI to invoke Mplayer

Swapnil Shinde swapnil at gmail.com
Mon Jun 27 01:12:00 CEST 2005


Hi Jake,
Thanks a lot for this code. I tried this code on my machine and it works 
fine. Basically using this code we can give input commands to MPlayer while 
playing it in the slave mode. But, the only problem is that it opens up it's 
own window. Isn't there any way to tell the maplyer to play in a window in 
my Swing application itself ? So that we can start the Mplayer in the some 
part of the Swing GUI itself. ?

It would be great if you could throw some light on this. Isn't there anyway 
in which we can stream the videa streams coming out of the Mplayer and 
display it in any window which we like ? Let me know.

Thanks,
S

On 6/26/05, Jake Benilov <benilov at gmail.com> wrote:
> 
> It's going to be very difficult for you to integrate MPlayer with any
> Java graphics libraries (Swing, AWT, SWT), i.e. it's not currently
> possible to get MPlayer working in a Java window. The best you can
> hope for is (as the previous poster mentioned) is to start mplayer
> from within java as a Process and send commands to it.
> 
> I have code here that can help you get a start (for Mplayer
> programming under windows, that is):
> (you'll obviously have to change the hardcoded mplayer path, and the
> media clip paths)
> ==========================================
> 
> import java.awt.FlowLayout;
> import java.awt.event.ActionEvent;
> import java.awt.event.WindowAdapter;
> import java.awt.event.WindowEvent;
> import java.io.BufferedReader;
> import java.io.IOException;
> import java.io.InputStream;
> import java.io.InputStreamReader;
> import java.io.PrintStream;
> import java.util.Timer;
> import java.util.TimerTask;
> import java.util.Vector;
> 
> import javax.swing.AbstractAction;
> import javax.swing.Action;
> import javax.swing.JButton;
> import javax.swing.JFrame;
> import javax.swing.WindowConstants;
> 
> public class MplayerDemo extends WindowAdapter {
> private static final String mplayerPath =
> "c:\\programs\\mplayer\\mplayer.exe";
> JFrame frame;
> 
> private static final String[] flags = {"-slave",
> "-playlist",
> ""
> };
> 
> private static final String[] mediaPath = {
> "C:\\back\\songs\\Demos\\demo4.mp3",
> "c:\\programs\\lame\\output.wav.mp3",
> "f:\\snl-camerondiaz-4-9-05.rm"
> };
> 
> private static final String space = " ";
> 
> Process playerPrc;
> 
> Thread mplayerThread;
> 
> static BufferedReader stdout, stderr;
> 
> static Vector<String> outputLines;
> 
> private boolean paused = false;
> private boolean outputAllowed = false;
> 
> public Action pauseToggleAction = new AbstractAction("||") {
> 
> public void actionPerformed(ActionEvent arg0) {
> // TODO Auto-generated method stub
> PrintStream s = new PrintStream(playerPrc.getOutputStream());
> s.print("pause\n");
> paused = !paused;
> s.flush();
> }
> 
> };
> 
> public Action quitAction = new AbstractAction("quit") {
> 
> public void actionPerformed(ActionEvent arg0) {
> // TODO Auto-generated method stub
> PrintStream s = new PrintStream(playerPrc.getOutputStream());
> s.print("quit\n");
> s.flush();
> System.exit(0);
> }
> 
> };
> 
> public Action randomPositionAction = new AbstractAction("random") {
> 
> public void actionPerformed(ActionEvent arg0) {
> // TODO Auto-generated method stub
> PrintStream s = new PrintStream(playerPrc.getOutputStream());
> int randomPercent =
> Float.valueOf(""+Math.floor(Math.random()*100)).intValue();
> String command = "seek "+randomPercent+" 1\n";
> System.out.print(command);
> s.print(command);
> s.flush();
> }
> };
> 
> public Action timelengthAction = new AbstractAction("test") {
> 
> public void actionPerformed(ActionEvent arg0) {
> // TODO Auto-generated method stub
> PrintStream s = new PrintStream(playerPrc.getOutputStream());
> String command = "speed_incr 1\n";
> s.print(command);
> s.flush();
> }
> };
> 
> public Action pcdoneAction = new AbstractAction("%") {
> 
> public void actionPerformed(ActionEvent arg0) {
> // TODO Auto-generated method stub
> PrintStream s = new PrintStream(playerPrc.getOutputStream());
> String command = "get_percent_pos\n";
> s.print(command);
> s.flush();
> }
> };
> 
> public Action muteToggleAction = new AbstractAction("Mute") {
> 
> public void actionPerformed(ActionEvent arg0) {
> // TODO Auto-generated method stub
> PrintStream s = new PrintStream(playerPrc.getOutputStream());
> if (paused) {
> s.print("pausing mute\n");
> }
> else {
> s.print("mute\n");
> }
> s.flush();
> }
> 
> };
> 
> public MplayerDemo() {
> final String cmd = "mplayer" + space + flags[0] + space + mediaPath[4];
> showGUI();
> 
> try {
> playerPrc = Runtime.getRuntime().exec(cmd);
> //System.out.println("!");
> 
> //StringBuffer sb = new StringBuffer();
> //StringBuffer s2 = new StringBuffer();
> InputStream is = playerPrc.getInputStream();
> stdout = new BufferedReader(new InputStreamReader(is));
> //is = playerPrc.getErrorStream();
> //stderr = new BufferedReader(new InputStreamReader(is));
> outputLines = new Vector<String>();
> Thread stdoutThread = new Thread() {
> public void run() {
> try {
> int l;
> String line;
> for (l = 0; (line = stdout.readLine()) != null;) {
> if (line.length() > 0) {
> l++;
> outputLines.addElement(line);
> if (line.matches("Starting playback...")) {
> outputAllowed = true;
> }
> }
> System.out.print(outputAllowed ? line +"\n": ".");
> }
> System.out.println("\nRead " + l
> + " lines from stdout.");
> stdout.close();
> for (Object o: outputLines) {
> System.out.println(o);
> }
> } catch (IOException ie) {
> System.out.println("IO exception on stdout: " + ie);
> }
> //TODO
> windowClosing(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
> }
> };
> stdoutThread.start();
> // Thread stderrThread = new Thread() {
> // public void run() {
> // try {
> // int l;
> // String line;
> // for (l = 0; (line = stderr.readLine()) != null;) {
> // if (line.length() > 0)
> // l++;
> // System.out.print(",");
> // }
> // System.out.println("\nRead " + l
> // + " lines from stderr.");
> // stderr.close();
> // } catch (IOException ie) {
> // System.out.println("IO exception on stderr: " + ie);
> // }
> // }
> // };
> // stderrThread.start();
> 
> System.out.println("About to waitfor");
> try {
> playerPrc.waitFor();
> } catch (InterruptedException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
> System.out.println("Done.");
> 
> } catch (IOException e) {
> e.printStackTrace();
> System.out.println("Dean! Exec failed. Exiting");
> System.exit(0);
> }
> }
> 
> private void showGUI() {
> frame = new JFrame();
> frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
> frame.setLayout(new FlowLayout());
> frame.add(new JButton(pauseToggleAction));
> frame.add(new JButton(muteToggleAction));
> frame.add(new JButton(randomPositionAction));
> frame.add(new JButton(timelengthAction));
> frame.add(new JButton(pcdoneAction));
> 
> frame.addWindowListener(this);
> frame.pack();
> frame.setVisible(true);
> }
> 
> public class Reminder {
> Timer timer;
> 
> public Reminder(int seconds) {
> timer = new Timer();
> timer.schedule(new RemindTask(), seconds * 1000);
> }
> 
> class RemindTask extends TimerTask {
> public void run() {
> // System.out.println("Time's up!");
> timer.cancel(); // Terminate the timer thread
> }
> }
> }
> 
> /**
> * @param args
> */
> public static void main(String[] args) {
> // TODO Auto-generated method stub
> new MplayerDemo();
> }
> 
> @Override
> public void windowClosing(WindowEvent e) {
> quitAction.actionPerformed(new ActionEvent(this, 0, null));
> }
> }
> 
> 
> On 6/26/05, Sascha Sommer <saschasommer at freenet.de> wrote:
> > Hi,
> >
> > On Friday 24 June 2005 08:19, Swapnil Shinde wrote:
> > > Hi guys,
> > > I want to invoke MPlayer from a Java GUI such that the video that 
> Mplayer
> > > will play will be shown in the Java GUI. I know that MPlayer has a 
> SLAVE
> > > mode which might help me here (though I am not sure about this). I am
> > > really new to this MPlayer world. It would be great if anyone of you 
> can
> > > help me as to how to invoke MPlayer from a Jaba GUI application. Do 
> let me
> > > know.
> > >
> >
> > As noone answered so far...
> > I don't know java but the only thing you need to do is to create an 
> MPlayer
> > process with an additional -slave commandline switch and redirect stdin 
> to a
> > pipe. Then you can control mplayer by sending commands to this pipe.
> >
> > Sascha
> >
> > _______________________________________________
> > MPlayer-cygwin mailing list
> > MPlayer-cygwin at mplayerhq.hu
> > http://mplayerhq.hu/mailman/listinfo/mplayer-cygwin
> >
> 
> _______________________________________________
> MPlayer-cygwin mailing list
> MPlayer-cygwin at mplayerhq.hu
> http://mplayerhq.hu/mailman/listinfo/mplayer-cygwin
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mplayerhq.hu/pipermail/mplayer-cygwin/attachments/20050626/ad56ad41/attachment.htm>


More information about the MPlayer-cygwin mailing list