Setting QGst::StatePlaying doesn't trigger a QGst::MessageStateChanged event

Karl Phillip maxphil at gmail.com
Wed Dec 21 10:01:04 PST 2011


I pinpointed the source of the problem: for some mysterious reason,
gstreamer is not able to play MP4 video files with an audio rate of 48000Hz:

 File     :  23 MB (23 MB),  duration: 0:00:59,  type: DSH,  1 audio
stream(s),  quality: 98 %
 Video :  18.13 MB,  2578 Kbps,  29.970 fps,  1280*768 (16:9),  YV12 =
Unknown,    Supported
 Audio :  5.40 MB,  768 Kbps,  24000 Hz,  2 channels,  0xFF = Unknown,
Unsupported

The good news is if I encode the file and change just the rate to 44100Hz,
it works!

I tried to fix it by adding a capsfilter to the pipeline to change the
audio sample rate but it didn't worked. I guess the problem is located
before this stage in the pipeline.

Should I file a bug?
--
Karl Phillip

On Tue, Dec 20, 2011 at 6:23 PM, Karl Phillip <maxphil at gmail.com> wrote:

> There has been some developments. It seems the issue is related to the
> type of video that is being played (maybe the resolution size, or something
> like that).
>
> The video I was trying to play is a MP4 file, and then I found that AVIs
> can be played, so I thought the problems were MP4 files.
>
> On Windows, AVICodec (tool) reports them as:
>
> * bad.mp4
>  File     :  22 MB (22 MB),  duration: 0:00:50,  type: DSH,  1 audio
> stream(s),  quality: 98 %
>  Video :  13.04 MB,  2188 Kbps,  29.970 fps,  1280*768 (16:9),  YV12 =
> Unknown,    Supported
>  Audio :  9.15 MB,  1536 Kbps,  48000 Hz,  2 channels,  0xFF = Unknown,
> Unsupported
>
> * good.avi:
>  File     :  12.81 MB (12.81 MB),  duration: 0:00:59,  type: AVI,  1 audio
> stream(s),  quality: 69 %
>  Video :  11.90 MB,  1692 Kbps,  25.0 fps,  720*320 (2.21:1),  XVID = XVID
> Mpeg-4,    Supported
>  Audio :  921 KB,  128 Kbps,  44100 Hz,  2 channels,  0x55 = Lame MP3,
> Supported
>
> One of the interesting things we've done is convert bad.mp4 to the same
> format used by good.avi, and the resulting video also didn't worked. So my
> theory that the problem was in MP4 files went down the hole, check it out:
>
> * converted:
>  File     :  5.14 MB (5.14 MB),  duration: 0:00:50,  type: AVI,  1 audio
> stream(s),  quality: 70 %
>  Video :  3.80 MB,  638 Kbps,  29.970 fps,  1280*768 (16:9),  XVID = XVID
> Mpeg-4,    Supported
>  Audio :  1.33 MB,  224 Kbps,  48000 Hz,  2 channels,  0x55 = Lame MP3,
> Supported
>
> The converted video is virtually in the same format as good.avi and it
> still doesn't work.
>
> In case you are interested, the following command shows the pipeline used
> by my application and it successfully plays MP4 files on Linux:
>
> gst-launch filesrc location=bad.mp4 ! decodebin name=decoder decoder. !
> audioconvert ! audioresample ! autoaudiosink decoder. ! ffmpegcolorspace !
> capsfilter caps=video/x-raw-rgb ! ximagesink
>
> I think the next commands are the Windows equivalent of that. I just
> changed the video sink element at the end but none seems to work:
>
> gst-launch.exe filesrc location=bad.mp4 ! decodebin name=decoder decoder.
> ! audioconvert ! audioresample ! directsoundsink decoder. !
> ffmpegcolorspace ! capsfilter caps="video/x-raw-rgb" ! dshowvideosink
>
> 0:00:00.109375000  3360   00332E00 ERROR           GST_PIPELINE
> grammar.tab.c:713:gst_parse_perform_link: could not link capsfilter0 to
> dshowvideosink0
> WARNING: erroneous pipeline: could not link capsfilter0 to dshowvideosink0
>
>
> gst-launch.exe filesrc location=bad.mp4 ! decodebin name=decoder decoder.
> ! audioconvert ! audioresample ! directsoundsink decoder. !
> ffmpegcolorspace ! capsfilter caps="video/x-raw-rgb" ! sdlvideosink
> 0:00:00.109375000   240   00332E00 ERROR           GST_PIPELINE
> grammar.tab.c:713:gst_parse_perform_link: could not link capsfilter0 to
> sdlvideosink0
> WARNING: erroneous pipeline: could not link capsfilter0 to sdlvideosink0
>
> and finally trying with autovideosink, it looks like it will play the file
> but it does nothing:
>
> C:\ossbuild\Build\Windows\Win32\Release\bin>gst-launch.exe filesrc
> location=bad.mp4 ! decodebin name=decoder decoder. ! audioconvert !
> audioresample ! directsoundsink decoder. ! ffmpegcolorspace ! capsfilter
> caps="video/x-raw-rgb" ! autovideosink
> Setting pipeline to PAUSED ...
> Pipeline is PREROLLING ...
>
>
> I could use some help from the experts.
>
> Thank you all,
> --
> Karl Phillip
>
>
>
>
> On Tue, Dec 20, 2011 at 12:01 PM, Karl Phillip <maxphil at gmail.com> wrote:
>
>> I wrote a Video Player for Linux that uses QtGstreamer. It works
>> beatifully! Now that I've successfully compiled and tested
>> gstreamer/qtgstreamer for Windows I decided it was time to compile my Video
>> Player for Windows as well, and so it was done, flawlessly.
>>
>> However, when my application is executed audio/video is not being played.
>>
>> I know that onNewDecodedPad() is being triggered for "audio/x-raw-int"
>> and "video/x-raw-rgb", and I'm also certain that all the pipeline setup is
>> good since it works on Linux.
>>
>> Here is what is happening: my VideoPlayer class inherits from
>> QGst::Utils::ApplicationSink , and I noticed that newBuffer() is not being
>> called when the pipeline is set to QGst::StatePlaying. That's odd, right?
>>
>> So I addSignalWatch() to the pipeline bus and further testes revelead
>> that after everything is properly configured and loaded, i.e. after
>> onNewDecodedPad() is executed for both audio/video streams saying that
>> everything is good to go, setting the pipeline to:
>>     pipeline->setState(QGst::StatePlaying);
>>
>> doesn't trigger a QGst::MessageStateChanged event, nor a
>> QGst::MessageError event. I don't know what's going on since I can see the
>> very same code working on Linux.
>>
>> What could be causing this? I have added debugs for virtually every
>> QtGstreamer call that is being done, so if anything had failed during the
>> setup I would know.
>>
>> Thanks guys,
>> --
>> Karl Phillip
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20111221/33bc5beb/attachment-0001.htm>


More information about the gstreamer-devel mailing list