I did a little more playing around with this...

Here's my working example:

#!/usr/bin/perl -w

use strict;

use Glib;
use Gtk3 -init;

Gst::init();

my $play = Gst::ElementFactory->new("playbin","play");
my $fn = "http://www.csoft.co.uk/video/original/earth.avi";;
$play->set_uri($fn);
$play->set_state('playing');
my $bus = $play->get_bus;
my $int = $bus->add_watch(\&my_callback);

Gtk3::main;

sub my_callback
{
    my ($bus, $message) = @_;

    if ($message->type =~ /error/)
    {
        warn "error\n";
        Gtk3->main_quit;
        exit;
    }
    elsif ($message->type =~ /eos/)
    {
        warn "end\n";
        Gtk3->main_quit;
        exit;
    }

    return 1;
}

Accomplished by placing the following in my Gtk3.pm file (in their
respective portions of the file, left to the reader):

my $_GST_BASENAME = 'Gst';
my $_GST_VERSION = '1.0';
my $_GST_PACKAGE = 'Gst';


  Glib::Object::Introspection->setup (
    basename => $_GST_BASENAME,
    version => $_GST_VERSION,
    package => $_GST_PACKAGE);


sub Gst::init {
    Glib::Object::Introspection->invoke ($_GST_BASENAME, undef, 'init',
undef);
}

sub Gst::ElementFactory::new
{
    my ($self,$factory_name,$name) = @_;

    my $e = Gst::ElementFactory::make($factory_name,$name);
    my $package = 'Gst::Element';
    return bless $e, $package;
}
sub Gst::Element::set_uri
{
    my ($self,$uri) = @_;

    Glib::Object::set($self,'uri' => $uri);
}
sub Gst::Bus::add_watch
{
    my ($self,$callback,$data) = @_;

    my $int = Glib::Object::Introspection->invoke ('Gst', 'Bus',
'add_watch',$self,0,$callback,$data);

    return($int);
}

Not sure if that's of use to anyone, but, hey, it works :)


*Terence J. Ferraro*


On Sat, Apr 26, 2014 at 9:05 PM, Terence Ferraro
<terencejferr...@gmail.com>wrote:

> I knew nothing about GStreamer a couple hours ago, but, since I have had a
> lot of dealings with perl/introspection of late, I went ahead and did some
> digging. Compiled with gstreamer-1.2.4.
>
> So, first off, instead of: my $play = GStreamer::ElementFactory ->
> make("playbin", "play");
> It should be: my $play = GStreamer::ElementFactory::make("playbin",
> "play");
>
> Due to the class-static stuff.
>
> I was, however, running into the same issue. I first verified that this
> works:
>
> my $fake_factory = Glib::Object::Introspection->invoke ('Gst',
> 'ElementFactory', 'find', 'fakesrc');
> my $fake_element =
> GStreamer::ElementFactory::create($fake_factory,"source");
>
> After attempting a find on playbin, it would seem that the plugin simply
> isn't installed as the fakesrc is working. Looking at: plugins/elements/, I
> only see a handful of source files; playbin not being one of them.
>
> That's when I remembered seeing a number of plugin subdirectories in
> http://gstreamer.freedesktop.org/src/.
>
> It looks like gst-plugins-base provides playbin. After installing, now the
> aforementioned playbin call returns correctly.
>
>
>
> *Terence J. Ferraro*
>
>
> On Sat, Apr 26, 2014 at 6:13 PM, Steve Cookson <i...@sca-uk.com> wrote:
>
>> Hi Guys,
>>
>>
>> On 26/04/14 09:30, Steve Cookson wrote:
>> >
>> > > I'd suggest basing them on Glib::Object::Introspection.
>>
>> Well actually, it's amazing.  I've just been trying it.
>>
>> It's not so easy to install you have to install libgirepository1.0-dev
>> first (apt-get install libgirepository1.0-dev).
>>
>> This code:
>>
>> #!/usr/bin/perl -w
>>     use strict;
>>
>>     use Glib::Object::Introspection;
>>     Glib::Object::Introspection->setup (basename => 'Gst', version =>
>> '1.0', package => 'GStreamer');
>>     my @version=();
>>     @version = GStreamer::version();
>>     print "This program is linked against GStreamer @version\n";
>>     my $i = GStreamer::init ([$0, @ARGV]);
>>
>> Gave me "This program is linked against GStreamer 1 2 3 0".
>>
>> However, when I tried:
>>
>>     my $play = GStreamer::ElementFactory -> make("playbin", "play");
>>
>> I get:
>>
>> *** GStreamer::ElementFactory::make: passed too many parameters
>> (expected 2, got 3); ignoring excess at ~/test_code/GStreamer_test_4.pl
>> line 129.
>>
>> When I drop the final parameter, I get an empty string passed in $play.
>>
>> Any ideas?
>>
>> Regards
>>
>> Steve.
>>
>>
>> _______________________________________________
>> gtk-perl-list mailing list
>> gtk-perl-list@gnome.org
>> https://mail.gnome.org/mailman/listinfo/gtk-perl-list
>>
>
>
_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-perl-list

Reply via email to