need help about my first video test application

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

need help about my first video test application

Favor Tang
hi.

    sorry for this question of a newbie. I am a beginner into
gstreamer, and wanna write a application for video playing. I didn't
found a simple example about video.
I modified the audio play example. I can't get the video on screen,
what's the problem? I doubt if I create the pipeline correctly.

I got error like below:

Running....
Dynamic pad created, linking demuxer/decoder
Dynamic pad created, linking demuxer/decoder
Error: Internal data streame error.
Retured, stopping playback
deleting pipeline

and I attached my source file, hope this can help you to figure out
what I am doing wrong.
besides, can you give me an example about how to write program for
video playing?

any help is highly appreciated!

thanks

--
~~~~~~~~~~~~~~~~~
 /favor
~~~~~~~~~~~~~~~~~

------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, &
iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com 
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel

videotest.c (5K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: need help about my first video test application

Andoni Morales
2009/5/31 Favor Tang <[hidden email]>:
> hi.
>
>    sorry for this question of a newbie. I am a beginner into
> gstreamer, and wanna write a application for video playing. I didn't
> found a simple example about video.
> I modified the audio play example. I can't get the video on screen,
> what's the problem? I doubt if I create the pipeline correctly.

You are linking both the audio stream and the video stream to the
'decoder' element wich is an audio decoder.
In the 'on_pad_added' callback you need to read the caps of the new
pad and link it to the correct element. If it's a video stream you
will link it to the video decoder and if it's an audio stream you need
to link it to the audio decoder. This example shows you how to check
from the caps the media type and link the demuxer new pad to the
appropiate element:

GstCaps *caps=NULL;
GstStructure *str =NULL;
GstPad *newpad=NULL;


 /* check media type */
caps = gst_pad_get_caps (pad);
str = gst_caps_get_structure (caps, 0);
       
if (g_strrstr (gst_structure_get_name (str), "video")){

        newpad = gst_element_get_compatible_pad (videodec, pad, NULL);
        /* only link once */
        if (GST_PAD_IS_LINKED (newpad)) {
    g_object_unref (newpad);
    gst_caps_unref (caps);
    return;
  }
 
  /* link 'n play*/
  GST_INFO ("Found video stream.");
    gst_pad_link (pad,newpad);    
        g_object_unref (newpad);
}
if (g_strrstr (gst_structure_get_name (str), "audio")){

        newpad = gst_element_get_compatible_pad (decoder, pad, NULL);
        /* only link once */
        if (GST_PAD_IS_LINKED (newpad)) {
    g_object_unref (newpad);
    gst_caps_unref (caps);
    return;
  }
 
  /* link 'n play*/
  GST_INFO ("Found audio stream.");
    gst_pad_link (pad,newpad);    
        g_object_unref (newpad);
}


BTW, you can also use the playbin element.


>
> I got error like below:
>
> Running....
> Dynamic pad created, linking demuxer/decoder
> Dynamic pad created, linking demuxer/decoder
> Error: Internal data streame error.
> Retured, stopping playback
> deleting pipeline
>
> and I attached my source file, hope this can help you to figure out
> what I am doing wrong.
> besides, can you give me an example about how to write program for
> video playing?
>
> any help is highly appreciated!
>
> thanks
>
> --
> ~~~~~~~~~~~~~~~~~
>  /favor
> ~~~~~~~~~~~~~~~~~
>
> ------------------------------------------------------------------------------
> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
> is a gathering of tech-side developers & brand creativity professionals. Meet
> the minds behind Google Creative Lab, Visual Complexity, Processing, &
> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
>

------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, &
iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com 
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: need help about my first video test application

Favor Tang
Hi, Andoni
    It's taken me some time to understand you code, meanwhile,
according to your advice I changed my code to link to correct element
respectively In the 'on_pad_added' callback. In the callback function,
I add new elements to pipeline and link them according to if it's
audio or video. I think I still not get the right clue of this
example. I know some applications use playbin or decodebin, I'd prefer
to use it later on.

please check my code in attachment.

I would highly appreciate your help.

thanks

On Mon, Jun 1, 2009 at 8:02 AM, Andoni Morales <[hidden email]> wrote:

> 2009/5/31 Favor Tang <[hidden email]>:
>> hi.
>>
>>    sorry for this question of a newbie. I am a beginner into
>> gstreamer, and wanna write a application for video playing. I didn't
>> found a simple example about video.
>> I modified the audio play example. I can't get the video on screen,
>> what's the problem? I doubt if I create the pipeline correctly.
>
> You are linking both the audio stream and the video stream to the
> 'decoder' element wich is an audio decoder.
> In the 'on_pad_added' callback you need to read the caps of the new
> pad and link it to the correct element. If it's a video stream you
> will link it to the video decoder and if it's an audio stream you need
> to link it to the audio decoder. This example shows you how to check
> from the caps the media type and link the demuxer new pad to the
> appropiate element:
>
> GstCaps *caps=NULL;
> GstStructure *str =NULL;
> GstPad *newpad=NULL;
>
>
>  /* check media type */
> caps = gst_pad_get_caps (pad);
> str = gst_caps_get_structure (caps, 0);
>
> if (g_strrstr (gst_structure_get_name (str), "video")){
>
>        newpad = gst_element_get_compatible_pad (videodec, pad, NULL);
>        /* only link once */
>        if (GST_PAD_IS_LINKED (newpad)) {
>                g_object_unref (newpad);
>                gst_caps_unref (caps);
>                return;
>        }
>
>        /* link 'n play*/
>        GST_INFO ("Found video stream.");
>        gst_pad_link (pad,newpad);
>        g_object_unref (newpad);
> }
> if (g_strrstr (gst_structure_get_name (str), "audio")){
>
>        newpad = gst_element_get_compatible_pad (decoder, pad, NULL);
>        /* only link once */
>        if (GST_PAD_IS_LINKED (newpad)) {
>                g_object_unref (newpad);
>                gst_caps_unref (caps);
>                return;
>        }
>
>        /* link 'n play*/
>        GST_INFO ("Found audio stream.");
>        gst_pad_link (pad,newpad);
>        g_object_unref (newpad);
> }
>
>
> BTW, you can also use the playbin element.
>
>
>>
>> I got error like below:
>>
>> Running....
>> Dynamic pad created, linking demuxer/decoder
>> Dynamic pad created, linking demuxer/decoder
>> Error: Internal data streame error.
>> Retured, stopping playback
>> deleting pipeline
>>
>> and I attached my source file, hope this can help you to figure out
>> what I am doing wrong.
>> besides, can you give me an example about how to write program for
>> video playing?
>>
>> any help is highly appreciated!
>>
>> thanks
>>
>> --
>> ~~~~~~~~~~~~~~~~~
>>  /favor
>> ~~~~~~~~~~~~~~~~~
>>
>> ------------------------------------------------------------------------------
>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>> is a gathering of tech-side developers & brand creativity professionals. Meet
>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>> _______________________________________________
>> gstreamer-devel mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>
>>
>
> ------------------------------------------------------------------------------
> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
> is a gathering of tech-side developers & brand creativity professionals. Meet
> the minds behind Google Creative Lab, Visual Complexity, Processing, &
> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>


--
~~~~~~~~~~~~~~~~~
 /favor
~~~~~~~~~~~~~~~~~

------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, &
iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com 
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel

videotest.c (7K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: need help about my first video test application

Andoni Morales
2009/6/1 Favor Tang <[hidden email]>:
> Hi, Andoni
>    It's taken me some time to understand you code, meanwhile,
> according to your advice I changed my code to link to correct element
> respectively In the 'on_pad_added' callback. In the callback function,
> I add new elements to pipeline and link them according to if it's
> audio or video. I think I still not get the right clue of this
> example. I know some applications use playbin or decodebin, I'd prefer
> to use it later on.
>
 This is not the way a I would implement this, but as it's just an
example... After linking all the element in the 'on_pad_added'
callback, set the pipeline to PLAYING, because the new added elements
are not aware of the previous change. I have tested it and it works
for me.

/* link 'n play*/

GST_INFO ("Found video stream.\n");

gst_pad_link (pad,newpad);

gst_element_link_many (videodec, colorspace, videosink, NULL);
gst_element_set_state (pipeline, GST_STATE_PLAYING);

g_object_unref (newpad);




>
> I would highly appreciate your help.
>
> thanks
>
> On Mon, Jun 1, 2009 at 8:02 AM, Andoni Morales <[hidden email]> wrote:
>> 2009/5/31 Favor Tang <[hidden email]>:
>>> hi.
>>>
>>>    sorry for this question of a newbie. I am a beginner into
>>> gstreamer, and wanna write a application for video playing. I didn't
>>> found a simple example about video.
>>> I modified the audio play example. I can't get the video on screen,
>>> what's the problem? I doubt if I create the pipeline correctly.
>>
>> You are linking both the audio stream and the video stream to the
>> 'decoder' element wich is an audio decoder.
>> In the 'on_pad_added' callback you need to read the caps of the new
>> pad and link it to the correct element. If it's a video stream you
>> will link it to the video decoder and if it's an audio stream you need
>> to link it to the audio decoder. This example shows you how to check
>> from the caps the media type and link the demuxer new pad to the
>> appropiate element:
>>
>> GstCaps *caps=NULL;
>> GstStructure *str =NULL;
>> GstPad *newpad=NULL;
>>
>>
>>  /* check media type */
>> caps = gst_pad_get_caps (pad);
>> str = gst_caps_get_structure (caps, 0);
>>
>> if (g_strrstr (gst_structure_get_name (str), "video")){
>>
>>        newpad = gst_element_get_compatible_pad (videodec, pad, NULL);
>>        /* only link once */
>>        if (GST_PAD_IS_LINKED (newpad)) {
>>                g_object_unref (newpad);
>>                gst_caps_unref (caps);
>>                return;
>>        }
>>
>>        /* link 'n play*/
>>        GST_INFO ("Found video stream.");
>>        gst_pad_link (pad,newpad);
>>        g_object_unref (newpad);
>> }
>> if (g_strrstr (gst_structure_get_name (str), "audio")){
>>
>>        newpad = gst_element_get_compatible_pad (decoder, pad, NULL);
>>        /* only link once */
>>        if (GST_PAD_IS_LINKED (newpad)) {
>>                g_object_unref (newpad);
>>                gst_caps_unref (caps);
>>                return;
>>        }
>>
>>        /* link 'n play*/
>>        GST_INFO ("Found audio stream.");
>>        gst_pad_link (pad,newpad);
>>        g_object_unref (newpad);
>> }
>>
>>
>> BTW, you can also use the playbin element.
>>
>>
>>>
>>> I got error like below:
>>>
>>> Running....
>>> Dynamic pad created, linking demuxer/decoder
>>> Dynamic pad created, linking demuxer/decoder
>>> Error: Internal data streame error.
>>> Retured, stopping playback
>>> deleting pipeline
>>>
>>> and I attached my source file, hope this can help you to figure out
>>> what I am doing wrong.
>>> besides, can you give me an example about how to write program for
>>> video playing?
>>>
>>> any help is highly appreciated!
>>>
>>> thanks
>>>
>>> --
>>> ~~~~~~~~~~~~~~~~~
>>>  /favor
>>> ~~~~~~~~~~~~~~~~~
>>>
>>> ------------------------------------------------------------------------------
>>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>>> is a gathering of tech-side developers & brand creativity professionals. Meet
>>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>>> _______________________________________________
>>> gstreamer-devel mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>
>>>
>>
>> ------------------------------------------------------------------------------
>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>> is a gathering of tech-side developers & brand creativity professionals. Meet
>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>> _______________________________________________
>> gstreamer-devel mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>
>
>
>
> --
> ~~~~~~~~~~~~~~~~~
>  /favor
> ~~~~~~~~~~~~~~~~~
>
> ------------------------------------------------------------------------------
> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
> is a gathering of tech-side developers & brand creativity professionals. Meet
> the minds behind Google Creative Lab, Visual Complexity, Processing, &
> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
>

------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, &
iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com 
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: need help about my first video test application

Favor Tang
hi.

does it work for you?

In my pc running ubuntu linux on vmware, I tested a ogg video file, I
don't get the video or the sound, even I don't get any error output.
I can't give you any help output infomation except the example code,
because I don't get any error.

code snippet:
           /* link 'n play*/
                   GST_INFO ("Found video stream.\n");
                   g_print ("Found video stream.\n");
                   gst_pad_link (pad,newpad);
                   gst_element_link_many (videodec, colorspace, videosink, NULL);
                   gst_element_set_state (pipeline, GST_STATE_PLAYING);
               
                   /* link 'n play*/
                   GST_INFO ("Found audio stream.\n");
                   g_print ("Found audio stream.\n");
                   gst_pad_link (pad,newpad);
                   gst_element_link_many (decoder, conv, sink, NULL);
                   gst_element_set_state (pipeline, GST_STATE_PLAYING);

Except for in main function, I added gst_element_set_state to set
pipeline to PLAYING in the 'on_pad_added" callback after it found
audio or video respectively, so that it can be aware of the new pad
had been added. or, should I add this "gst_element_set_state
(pipeline, GST_STATE_PLAYING);" to the end of the callback function?

Could you test it again, and see if you can  watch the video output or
hear the sound. or should you give me the example code which works on
your pc.

if it were you, how would you implement this example application? I
doubt it is an good example, though.


thanks.

On Mon, Jun 1, 2009 at 6:40 PM, Andoni Morales <[hidden email]> wrote:

> 2009/6/1 Favor Tang <[hidden email]>:
>> Hi, Andoni
>>    It's taken me some time to understand you code, meanwhile,
>> according to your advice I changed my code to link to correct element
>> respectively In the 'on_pad_added' callback. In the callback function,
>> I add new elements to pipeline and link them according to if it's
>> audio or video. I think I still not get the right clue of this
>> example. I know some applications use playbin or decodebin, I'd prefer
>> to use it later on.
>>
>  This is not the way a I would implement this, but as it's just an
> example... After linking all the element in the 'on_pad_added'
> callback, set the pipeline to PLAYING, because the new added elements
> are not aware of the previous change. I have tested it and it works
> for me.
>
> /* link 'n play*/
>
> GST_INFO ("Found video stream.\n");
>
> gst_pad_link (pad,newpad);
>
> gst_element_link_many (videodec, colorspace, videosink, NULL);
> gst_element_set_state (pipeline, GST_STATE_PLAYING);
>
> g_object_unref (newpad);
>
>
>
>
>>
>> I would highly appreciate your help.
>>
>> thanks
>>
>> On Mon, Jun 1, 2009 at 8:02 AM, Andoni Morales <[hidden email]> wrote:
>>> 2009/5/31 Favor Tang <[hidden email]>:
>>>> hi.
>>>>
>>>>    sorry for this question of a newbie. I am a beginner into
>>>> gstreamer, and wanna write a application for video playing. I didn't
>>>> found a simple example about video.
>>>> I modified the audio play example. I can't get the video on screen,
>>>> what's the problem? I doubt if I create the pipeline correctly.
>>>
>>> You are linking both the audio stream and the video stream to the
>>> 'decoder' element wich is an audio decoder.
>>> In the 'on_pad_added' callback you need to read the caps of the new
>>> pad and link it to the correct element. If it's a video stream you
>>> will link it to the video decoder and if it's an audio stream you need
>>> to link it to the audio decoder. This example shows you how to check
>>> from the caps the media type and link the demuxer new pad to the
>>> appropiate element:
>>>
>>> GstCaps *caps=NULL;
>>> GstStructure *str =NULL;
>>> GstPad *newpad=NULL;
>>>
>>>
>>>  /* check media type */
>>> caps = gst_pad_get_caps (pad);
>>> str = gst_caps_get_structure (caps, 0);
>>>
>>> if (g_strrstr (gst_structure_get_name (str), "video")){
>>>
>>>        newpad = gst_element_get_compatible_pad (videodec, pad, NULL);
>>>        /* only link once */
>>>        if (GST_PAD_IS_LINKED (newpad)) {
>>>                g_object_unref (newpad);
>>>                gst_caps_unref (caps);
>>>                return;
>>>        }
>>>
>>>        /* link 'n play*/
>>>        GST_INFO ("Found video stream.");
>>>        gst_pad_link (pad,newpad);
>>>        g_object_unref (newpad);
>>> }
>>> if (g_strrstr (gst_structure_get_name (str), "audio")){
>>>
>>>        newpad = gst_element_get_compatible_pad (decoder, pad, NULL);
>>>        /* only link once */
>>>        if (GST_PAD_IS_LINKED (newpad)) {
>>>                g_object_unref (newpad);
>>>                gst_caps_unref (caps);
>>>                return;
>>>        }
>>>
>>>        /* link 'n play*/
>>>        GST_INFO ("Found audio stream.");
>>>        gst_pad_link (pad,newpad);
>>>        g_object_unref (newpad);
>>> }
>>>
>>>
>>> BTW, you can also use the playbin element.
>>>
>>>
>>>>
>>>> I got error like below:
>>>>
>>>> Running....
>>>> Dynamic pad created, linking demuxer/decoder
>>>> Dynamic pad created, linking demuxer/decoder
>>>> Error: Internal data streame error.
>>>> Retured, stopping playback
>>>> deleting pipeline
>>>>
>>>> and I attached my source file, hope this can help you to figure out
>>>> what I am doing wrong.
>>>> besides, can you give me an example about how to write program for
>>>> video playing?
>>>>
>>>> any help is highly appreciated!
>>>>
>>>> thanks
>>>>
>>>> --
>>>> ~~~~~~~~~~~~~~~~~
>>>>  /favor
>>>> ~~~~~~~~~~~~~~~~~
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>>>> is a gathering of tech-side developers & brand creativity professionals. Meet
>>>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>>>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>>>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>>>> _______________________________________________
>>>> gstreamer-devel mailing list
>>>> [hidden email]
>>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>>
>>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>>> is a gathering of tech-side developers & brand creativity professionals. Meet
>>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>>> _______________________________________________
>>> gstreamer-devel mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>
>>
>>
>>
>> --
>> ~~~~~~~~~~~~~~~~~
>>  /favor
>> ~~~~~~~~~~~~~~~~~
>>
>> ------------------------------------------------------------------------------
>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>> is a gathering of tech-side developers & brand creativity professionals. Meet
>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>> _______________________________________________
>> gstreamer-devel mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>
>>
>
> ------------------------------------------------------------------------------
> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
> is a gathering of tech-side developers & brand creativity professionals. Meet
> the minds behind Google Creative Lab, Visual Complexity, Processing, &
> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>


--
~~~~~~~~~~~~~~~~~
 /favor
~~~~~~~~~~~~~~~~~

------------------------------------------------------------------------------
OpenSolaris 2009.06 is a cutting edge operating system for enterprises
looking to deploy the next generation of Solaris that includes the latest
innovations from Sun and the OpenSource community. Download a copy and
enjoy capabilities such as Networking, Storage and Virtualization.
Go to: http://p.sf.net/sfu/opensolaris-get
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel

videotest.c (7K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: need help about my first video test application

Andoni Morales
2009/6/2 Favor Tang <[hidden email]>:
> hi.
>
> does it work for you?
>
> In my pc running ubuntu linux on vmware, I tested a ogg video file, I
> don't get the video or the sound, even I don't get any error output.
> I can't give you any help output infomation except the example code,
> because I don't get any error.

If you need to debug a GStreamer app you can enable the debug output by setting:
# export GST_DEBUG=3.

I attach the fix to your example.

>
> code snippet:
>           /* link 'n play*/
>                   GST_INFO ("Found video stream.\n");
>                   g_print ("Found video stream.\n");
>                   gst_pad_link (pad,newpad);
>                   gst_element_link_many (videodec, colorspace, videosink, NULL);
>                   gst_element_set_state (pipeline, GST_STATE_PLAYING);
>
>                   /* link 'n play*/
>                   GST_INFO ("Found audio stream.\n");
>                   g_print ("Found audio stream.\n");
>                   gst_pad_link (pad,newpad);
>                   gst_element_link_many (decoder, conv, sink, NULL);
>                   gst_element_set_state (pipeline, GST_STATE_PLAYING);
>
> Except for in main function, I added gst_element_set_state to set
> pipeline to PLAYING in the 'on_pad_added" callback after it found
> audio or video respectively, so that it can be aware of the new pad
> had been added. or, should I add this "gst_element_set_state
> (pipeline, GST_STATE_PLAYING);" to the end of the callback function?
>
> Could you test it again, and see if you can  watch the video output or
> hear the sound. or should you give me the example code which works on
> your pc.
>
> if it were you, how would you implement this example application? I
> doubt it is an good example, though.
>
>
> thanks.
>
> On Mon, Jun 1, 2009 at 6:40 PM, Andoni Morales <[hidden email]> wrote:
>> 2009/6/1 Favor Tang <[hidden email]>:
>>> Hi, Andoni
>>>    It's taken me some time to understand you code, meanwhile,
>>> according to your advice I changed my code to link to correct element
>>> respectively In the 'on_pad_added' callback. In the callback function,
>>> I add new elements to pipeline and link them according to if it's
>>> audio or video. I think I still not get the right clue of this
>>> example. I know some applications use playbin or decodebin, I'd prefer
>>> to use it later on.
>>>
>>  This is not the way a I would implement this, but as it's just an
>> example... After linking all the element in the 'on_pad_added'
>> callback, set the pipeline to PLAYING, because the new added elements
>> are not aware of the previous change. I have tested it and it works
>> for me.
>>
>> /* link 'n play*/
>>
>> GST_INFO ("Found video stream.\n");
>>
>> gst_pad_link (pad,newpad);
>>
>> gst_element_link_many (videodec, colorspace, videosink, NULL);
>> gst_element_set_state (pipeline, GST_STATE_PLAYING);
>>
>> g_object_unref (newpad);
>>
>>
>>
>>
>>>
>>> I would highly appreciate your help.
>>>
>>> thanks
>>>
>>> On Mon, Jun 1, 2009 at 8:02 AM, Andoni Morales <[hidden email]> wrote:
>>>> 2009/5/31 Favor Tang <[hidden email]>:
>>>>> hi.
>>>>>
>>>>>    sorry for this question of a newbie. I am a beginner into
>>>>> gstreamer, and wanna write a application for video playing. I didn't
>>>>> found a simple example about video.
>>>>> I modified the audio play example. I can't get the video on screen,
>>>>> what's the problem? I doubt if I create the pipeline correctly.
>>>>
>>>> You are linking both the audio stream and the video stream to the
>>>> 'decoder' element wich is an audio decoder.
>>>> In the 'on_pad_added' callback you need to read the caps of the new
>>>> pad and link it to the correct element. If it's a video stream you
>>>> will link it to the video decoder and if it's an audio stream you need
>>>> to link it to the audio decoder. This example shows you how to check
>>>> from the caps the media type and link the demuxer new pad to the
>>>> appropiate element:
>>>>
>>>> GstCaps *caps=NULL;
>>>> GstStructure *str =NULL;
>>>> GstPad *newpad=NULL;
>>>>
>>>>
>>>>  /* check media type */
>>>> caps = gst_pad_get_caps (pad);
>>>> str = gst_caps_get_structure (caps, 0);
>>>>
>>>> if (g_strrstr (gst_structure_get_name (str), "video")){
>>>>
>>>>        newpad = gst_element_get_compatible_pad (videodec, pad, NULL);
>>>>        /* only link once */
>>>>        if (GST_PAD_IS_LINKED (newpad)) {
>>>>                g_object_unref (newpad);
>>>>                gst_caps_unref (caps);
>>>>                return;
>>>>        }
>>>>
>>>>        /* link 'n play*/
>>>>        GST_INFO ("Found video stream.");
>>>>        gst_pad_link (pad,newpad);
>>>>        g_object_unref (newpad);
>>>> }
>>>> if (g_strrstr (gst_structure_get_name (str), "audio")){
>>>>
>>>>        newpad = gst_element_get_compatible_pad (decoder, pad, NULL);
>>>>        /* only link once */
>>>>        if (GST_PAD_IS_LINKED (newpad)) {
>>>>                g_object_unref (newpad);
>>>>                gst_caps_unref (caps);
>>>>                return;
>>>>        }
>>>>
>>>>        /* link 'n play*/
>>>>        GST_INFO ("Found audio stream.");
>>>>        gst_pad_link (pad,newpad);
>>>>        g_object_unref (newpad);
>>>> }
>>>>
>>>>
>>>> BTW, you can also use the playbin element.
>>>>
>>>>
>>>>>
>>>>> I got error like below:
>>>>>
>>>>> Running....
>>>>> Dynamic pad created, linking demuxer/decoder
>>>>> Dynamic pad created, linking demuxer/decoder
>>>>> Error: Internal data streame error.
>>>>> Retured, stopping playback
>>>>> deleting pipeline
>>>>>
>>>>> and I attached my source file, hope this can help you to figure out
>>>>> what I am doing wrong.
>>>>> besides, can you give me an example about how to write program for
>>>>> video playing?
>>>>>
>>>>> any help is highly appreciated!
>>>>>
>>>>> thanks
>>>>>
>>>>> --
>>>>> ~~~~~~~~~~~~~~~~~
>>>>>  /favor
>>>>> ~~~~~~~~~~~~~~~~~
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>>>>> is a gathering of tech-side developers & brand creativity professionals. Meet
>>>>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>>>>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>>>>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>>>>> _______________________________________________
>>>>> gstreamer-devel mailing list
>>>>> [hidden email]
>>>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>>>
>>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>>>> is a gathering of tech-side developers & brand creativity professionals. Meet
>>>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>>>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>>>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>>>> _______________________________________________
>>>> gstreamer-devel mailing list
>>>> [hidden email]
>>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>>
>>>
>>>
>>>
>>> --
>>> ~~~~~~~~~~~~~~~~~
>>>  /favor
>>> ~~~~~~~~~~~~~~~~~
>>>
>>> ------------------------------------------------------------------------------
>>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>>> is a gathering of tech-side developers & brand creativity professionals. Meet
>>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>>> _______________________________________________
>>> gstreamer-devel mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>
>>>
>>
>> ------------------------------------------------------------------------------
>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>> is a gathering of tech-side developers & brand creativity professionals. Meet
>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>> _______________________________________________
>> gstreamer-devel mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>
>
>
>
> --
> ~~~~~~~~~~~~~~~~~
>  /favor
> ~~~~~~~~~~~~~~~~~
>
> ------------------------------------------------------------------------------
> OpenSolaris 2009.06 is a cutting edge operating system for enterprises
> looking to deploy the next generation of Solaris that includes the latest
> innovations from Sun and the OpenSource community. Download a copy and
> enjoy capabilities such as Networking, Storage and Virtualization.
> Go to: http://p.sf.net/sfu/opensolaris-get
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
>

------------------------------------------------------------------------------
OpenSolaris 2009.06 is a cutting edge operating system for enterprises
looking to deploy the next generation of Solaris that includes the latest
innovations from Sun and the OpenSource community. Download a copy and
enjoy capabilities such as Networking, Storage and Virtualization.
Go to: http://p.sf.net/sfu/opensolaris-get
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel

videotest.c (8K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: need help about my first video test application

Andoni Morales
2009/6/2 Andoni Morales <[hidden email]>:

> 2009/6/2 Favor Tang <[hidden email]>:
>> hi.
>>
>> does it work for you?
>>
>> In my pc running ubuntu linux on vmware, I tested a ogg video file, I
>> don't get the video or the sound, even I don't get any error output.
>> I can't give you any help output infomation except the example code,
>> because I don't get any error.
>
> If you need to debug a GStreamer app you can enable the debug output by setting:
> # export GST_DEBUG=3.
>
> I attach the fix to your example.

I forgot to mention that on a virtual machine the xv output is not
always avalaible, You have to use the ximagesink element instead of
using the autovideosink which uses by default the xvimagesink element.

Andoni

>
>>
>> code snippet:
>>           /* link 'n play*/
>>                   GST_INFO ("Found video stream.\n");
>>                   g_print ("Found video stream.\n");
>>                   gst_pad_link (pad,newpad);
>>                   gst_element_link_many (videodec, colorspace, videosink, NULL);
>>                   gst_element_set_state (pipeline, GST_STATE_PLAYING);
>>
>>                   /* link 'n play*/
>>                   GST_INFO ("Found audio stream.\n");
>>                   g_print ("Found audio stream.\n");
>>                   gst_pad_link (pad,newpad);
>>                   gst_element_link_many (decoder, conv, sink, NULL);
>>                   gst_element_set_state (pipeline, GST_STATE_PLAYING);
>>
>> Except for in main function, I added gst_element_set_state to set
>> pipeline to PLAYING in the 'on_pad_added" callback after it found
>> audio or video respectively, so that it can be aware of the new pad
>> had been added. or, should I add this "gst_element_set_state
>> (pipeline, GST_STATE_PLAYING);" to the end of the callback function?
>>
>> Could you test it again, and see if you can  watch the video output or
>> hear the sound. or should you give me the example code which works on
>> your pc.
>>
>> if it were you, how would you implement this example application? I
>> doubt it is an good example, though.
>>
>>
>> thanks.
>>
>> On Mon, Jun 1, 2009 at 6:40 PM, Andoni Morales <[hidden email]> wrote:
>>> 2009/6/1 Favor Tang <[hidden email]>:
>>>> Hi, Andoni
>>>>    It's taken me some time to understand you code, meanwhile,
>>>> according to your advice I changed my code to link to correct element
>>>> respectively In the 'on_pad_added' callback. In the callback function,
>>>> I add new elements to pipeline and link them according to if it's
>>>> audio or video. I think I still not get the right clue of this
>>>> example. I know some applications use playbin or decodebin, I'd prefer
>>>> to use it later on.
>>>>
>>>  This is not the way a I would implement this, but as it's just an
>>> example... After linking all the element in the 'on_pad_added'
>>> callback, set the pipeline to PLAYING, because the new added elements
>>> are not aware of the previous change. I have tested it and it works
>>> for me.
>>>
>>> /* link 'n play*/
>>>
>>> GST_INFO ("Found video stream.\n");
>>>
>>> gst_pad_link (pad,newpad);
>>>
>>> gst_element_link_many (videodec, colorspace, videosink, NULL);
>>> gst_element_set_state (pipeline, GST_STATE_PLAYING);
>>>
>>> g_object_unref (newpad);
>>>
>>>
>>>
>>>
>>>>
>>>> I would highly appreciate your help.
>>>>
>>>> thanks
>>>>
>>>> On Mon, Jun 1, 2009 at 8:02 AM, Andoni Morales <[hidden email]> wrote:
>>>>> 2009/5/31 Favor Tang <[hidden email]>:
>>>>>> hi.
>>>>>>
>>>>>>    sorry for this question of a newbie. I am a beginner into
>>>>>> gstreamer, and wanna write a application for video playing. I didn't
>>>>>> found a simple example about video.
>>>>>> I modified the audio play example. I can't get the video on screen,
>>>>>> what's the problem? I doubt if I create the pipeline correctly.
>>>>>
>>>>> You are linking both the audio stream and the video stream to the
>>>>> 'decoder' element wich is an audio decoder.
>>>>> In the 'on_pad_added' callback you need to read the caps of the new
>>>>> pad and link it to the correct element. If it's a video stream you
>>>>> will link it to the video decoder and if it's an audio stream you need
>>>>> to link it to the audio decoder. This example shows you how to check
>>>>> from the caps the media type and link the demuxer new pad to the
>>>>> appropiate element:
>>>>>
>>>>> GstCaps *caps=NULL;
>>>>> GstStructure *str =NULL;
>>>>> GstPad *newpad=NULL;
>>>>>
>>>>>
>>>>>  /* check media type */
>>>>> caps = gst_pad_get_caps (pad);
>>>>> str = gst_caps_get_structure (caps, 0);
>>>>>
>>>>> if (g_strrstr (gst_structure_get_name (str), "video")){
>>>>>
>>>>>        newpad = gst_element_get_compatible_pad (videodec, pad, NULL);
>>>>>        /* only link once */
>>>>>        if (GST_PAD_IS_LINKED (newpad)) {
>>>>>                g_object_unref (newpad);
>>>>>                gst_caps_unref (caps);
>>>>>                return;
>>>>>        }
>>>>>
>>>>>        /* link 'n play*/
>>>>>        GST_INFO ("Found video stream.");
>>>>>        gst_pad_link (pad,newpad);
>>>>>        g_object_unref (newpad);
>>>>> }
>>>>> if (g_strrstr (gst_structure_get_name (str), "audio")){
>>>>>
>>>>>        newpad = gst_element_get_compatible_pad (decoder, pad, NULL);
>>>>>        /* only link once */
>>>>>        if (GST_PAD_IS_LINKED (newpad)) {
>>>>>                g_object_unref (newpad);
>>>>>                gst_caps_unref (caps);
>>>>>                return;
>>>>>        }
>>>>>
>>>>>        /* link 'n play*/
>>>>>        GST_INFO ("Found audio stream.");
>>>>>        gst_pad_link (pad,newpad);
>>>>>        g_object_unref (newpad);
>>>>> }
>>>>>
>>>>>
>>>>> BTW, you can also use the playbin element.
>>>>>
>>>>>
>>>>>>
>>>>>> I got error like below:
>>>>>>
>>>>>> Running....
>>>>>> Dynamic pad created, linking demuxer/decoder
>>>>>> Dynamic pad created, linking demuxer/decoder
>>>>>> Error: Internal data streame error.
>>>>>> Retured, stopping playback
>>>>>> deleting pipeline
>>>>>>
>>>>>> and I attached my source file, hope this can help you to figure out
>>>>>> what I am doing wrong.
>>>>>> besides, can you give me an example about how to write program for
>>>>>> video playing?
>>>>>>
>>>>>> any help is highly appreciated!
>>>>>>
>>>>>> thanks
>>>>>>
>>>>>> --
>>>>>> ~~~~~~~~~~~~~~~~~
>>>>>>  /favor
>>>>>> ~~~~~~~~~~~~~~~~~
>>>>>>
>>>>>> ------------------------------------------------------------------------------
>>>>>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>>>>>> is a gathering of tech-side developers & brand creativity professionals. Meet
>>>>>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>>>>>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>>>>>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>>>>>> _______________________________________________
>>>>>> gstreamer-devel mailing list
>>>>>> [hidden email]
>>>>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>>>>
>>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>>>>> is a gathering of tech-side developers & brand creativity professionals. Meet
>>>>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>>>>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>>>>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>>>>> _______________________________________________
>>>>> gstreamer-devel mailing list
>>>>> [hidden email]
>>>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> ~~~~~~~~~~~~~~~~~
>>>>  /favor
>>>> ~~~~~~~~~~~~~~~~~
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>>>> is a gathering of tech-side developers & brand creativity professionals. Meet
>>>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>>>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>>>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>>>> _______________________________________________
>>>> gstreamer-devel mailing list
>>>> [hidden email]
>>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>>
>>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
>>> is a gathering of tech-side developers & brand creativity professionals. Meet
>>> the minds behind Google Creative Lab, Visual Complexity, Processing, &
>>> iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
>>> Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
>>> _______________________________________________
>>> gstreamer-devel mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>
>>
>>
>>
>> --
>> ~~~~~~~~~~~~~~~~~
>>  /favor
>> ~~~~~~~~~~~~~~~~~
>>
>> ------------------------------------------------------------------------------
>> OpenSolaris 2009.06 is a cutting edge operating system for enterprises
>> looking to deploy the next generation of Solaris that includes the latest
>> innovations from Sun and the OpenSource community. Download a copy and
>> enjoy capabilities such as Networking, Storage and Virtualization.
>> Go to: http://p.sf.net/sfu/opensolaris-get
>> _______________________________________________
>> gstreamer-devel mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>
>>
>

------------------------------------------------------------------------------
OpenSolaris 2009.06 is a cutting edge operating system for enterprises
looking to deploy the next generation of Solaris that includes the latest
innovations from Sun and the OpenSource community. Download a copy and
enjoy capabilities such as Networking, Storage and Virtualization.
Go to: http://p.sf.net/sfu/opensolaris-get
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel