| GStreamer documentation | Contained in the GStreamer distribution. |
GStreamer - Perl interface to the GStreamer library
use GStreamer -init;
my $loop = Glib::MainLoop -> new();
# set up
my $play = GStreamer::ElementFactory -> make("playbin", "play");
$play -> set(uri => Glib::filename_to_uri $file, "localhost");
$play -> get_bus() -> add_watch(\&my_bus_callback, $loop);
$play -> set_state("playing");
# run
$loop -> run();
# clean up
$play -> set_state("null");
sub my_bus_callback {
my ($bus, $message, $loop) = @_;
if ($message -> type & "error") {
warn $message -> error;
$loop -> quit();
}
elsif ($message -> type & "eos") {
$loop -> quit();
}
# remove message from the queue
return TRUE;
}
GStreamer makes everybody dance like crazy. It provides the means to play, stream, and convert nearly any type of media -- be it audio or video. GStreamer wraps the GStreamer library in a nice and Perlish way, freeing the programmer from any memory management and object casting hassles.
Initializes GStreamer. Automatically parses @ARGV, stripping any options known to GStreamer.
Checks if initialization is possible. Returns TRUE if so.
When importing GStreamer, you can pass the -init option to have
GStreamer->init automatically called for you. If you need to know if
initialization is possible without actually doing it, use
GStreamer->init_check.
Returns TRUE if the GStreamer library version GStreamer was compiled against is newer than the one specified by the three arguments.
Returns the version information of the GStreamer library GStreamer was compiled against.
Returns the version information of the GStreamer library GStreamer is currently running against.
Lists the automatically generated API documentation pages.
GStreamer's website has much useful information, including a good tutorial and of course the API reference, which is canonical for GStreamer as well.
Just like Gtk2, GStreamer tries to stick closely to the C API, deviating from it only when it makes things easier and/or more Perlish. Gtk2::api gives general rules for how to map from the C API to Perl, most of which also apply to GStreamer.
Glib is the foundation this binding is built upon. If you look for information on basic stuff like signals or object properties, this is what you should read.
Copyright (C) 2005-2011 by the gtk2-perl team
| GStreamer documentation | Contained in the GStreamer distribution. |
package GStreamer; # $Id$ use 5.008; use strict; use warnings; use Glib; require Exporter; require DynaLoader; our @ISA = qw(Exporter DynaLoader); our @EXPORT_OK = qw( GST_SECOND GST_MSECOND GST_USECOND GST_NSECOND GST_TIME_FORMAT GST_TIME_ARGS GST_RANK_NONE GST_RANK_MARGINAL GST_RANK_SECONDARY GST_RANK_PRIMARY ); # --------------------------------------------------------------------------- # our $VERSION = '0.16'; sub import { my ($self) = @_; my @symbols = (); foreach (@_) { if (/^-?init$/) { $self -> init(); } else { push @symbols, $_; } } GStreamer -> export_to_level(1, @symbols); } sub dl_load_flags { $^O eq 'darwin' ? 0x00 : 0x01 } GStreamer -> bootstrap($VERSION); # --------------------------------------------------------------------------- # use constant GST_SECOND => 1_000_000 * 1_000; use constant GST_MSECOND => GST_SECOND / 1_000; use constant GST_USECOND => GST_SECOND / 1_000_000; use constant GST_NSECOND => GST_SECOND / 1_000_000_000; use constant GST_TIME_FORMAT => "u:%02u:%02u.%09u"; sub GST_TIME_ARGS { my ($t) = @_; return ( ($t / (GST_SECOND * 60 * 60)), ($t / (GST_SECOND * 60)) % 60, ($t / GST_SECOND) % 60, ($t % GST_SECOND) ); } use constant GST_RANK_NONE => 0; use constant GST_RANK_MARGINAL => 64; use constant GST_RANK_SECONDARY => 128; use constant GST_RANK_PRIMARY => 256; # --------------------------------------------------------------------------- # package GStreamer::Caps; use overload '+' => \&__append, '-' => \&__subtract, '&' => \&__intersect, '|' => \&__union, '<=' => \&__is_subset, '>=' => \&__is_superset, '==' => \&__is_equal, '""' => \&__to_string, fallback => 1; sub __append { my ($a, $b, $swap) = @_; my $tmp = GStreamer::Caps::Empty -> new(); unless ($swap) { $tmp -> append($a); $tmp -> append($b); } else { $tmp -> append($b); $tmp -> append($a); } return $tmp; } sub __subtract { my ($a, $b, $swap) = @_; return $swap ? $b -> subtract($a) : $a -> subtract($b); } sub __intersect { my ($a, $b, $swap) = @_; return $swap ? $b -> intersect($a) : $a -> intersect($b); } sub __union { my ($a, $b, $swap) = @_; return $swap ? $b -> union($a) : $a -> union($b); } sub __is_subset { my ($a, $b, $swap) = @_; return $swap ? $b -> is_subset($a) : $a -> is_subset($b); } sub __is_superset { my ($a, $b, $swap) = @_; return $swap ? $a -> is_subset($b) : $b -> is_subset($a); } sub __is_equal { my ($a, $b, $swap) = @_; return $swap ? $b -> is_equal($a) : $a -> is_equal($b); } sub __to_string { my ($a) = @_; return $a -> to_string(); } # --------------------------------------------------------------------------- # package GStreamer; 1; __END__