#!/usr/bin/perl -w # launch a gst-launch pipeline for the supplied media file # use the extension to determine the gst-launch pipeline # make use of default output sinks ### packages use File::Basename; sub extension { my $path = shift; my $ext = (fileparse ($path, '\..*?'))[2]; $ext =~ s/^\.//; return $ext; } sub read_config { my $config_file = `echo -n ~`."/.gst"; if (-e $config_file) { open CONFIG, $config_file; while () { chomp; s/#.*//; s/\s+$//; next unless length; my ($var, $value) = split (/\s*=\s*/, $_, 2); $cfg{$var} = $value; } if (!($cfg{AUDIOSINK})) { print "Please add an AUDIOSINK to $config_file !\n"; } if (!($cfg{VIDEOSINK})) { print "Please add a VIDEOSINK to $config_file !\n"; } } else { print "No configuration file $config_file found. You might want to create one.\n"; } if (!defined $cfg{AUDIOSINK}) { $cfg{AUDIOSINK} = "osssink"; } if (!defined $cfg{VIDEOSINK}) { $cfg{VIDEOSINK} = "sdlvideosink"; } if (!defined $cfg{CVS_PATH}) { $cfg{CVS_PATH} = `echo -n ~`."/gst/cvs"; } } ### main read_config (); my %pipes = ( "mp3", "mad ! $cfg{AUDIOSINK}", "ogg", "vorbisdec ! $cfg{AUDIOSINK}", "mpg", "mpegdemux video_00! { queue ! mpeg2dec ! $cfg{VIDEOSINK} } mpegdemux0.audio_00! { queue ! mad ! $cfg{AUDIOSINK} }", "avi", "avidemux video_00! { queue ! windec ! $cfg{VIDEOSINK} }", "vob", "mpegdemux video_00! { queue ! mpeg2dec ! $cfg{VIDEOSINK} } mpegdemux0.audio_00! { queue ! a52dec ! $cfg{AUDIOSINK} }", "wav", "wavparse ! $cfg{AUDIOSINK}", ); my $file = shift @ARGV or die "Please give a file name !"; my $ext = extension ($file); if ($pipe = $pipes{$ext}) { $command = "gst-launch filesrc location=\"$file\" ! $pipe"; print "Running $command\n"; system ("PATH=\$PATH:".$cfg{CVS_PATH}."/gstreamer/tools $command"); } else { print "No suitable pipe found for extension $ext.\n"; }