arturoc / ofxGStreamer

openFrameworks addon to use gstreamer under osx and windows. This addon has no code and instead uses the addon_config.mk file to add the needed files from the core + the flags needed to compile using gstreamer
56 stars 28 forks source link

playback halted for plugin, module vtdechw0, general resource error #13

Closed adielfernandez closed 8 years ago

adielfernandez commented 8 years ago

Hey Arturo,

I'm pulling an rtsp feed from a FLIR TCX thermal camera by creating a custom pipeline with the following calls:

    gst.setPipeline("rtspsrc location=rtsp://admin:admin@" + IP + ":554/cam/realmonitor?channel=1&subtype=1 latency=0 ! queue2 max-size-buffers=2 ! decodebin ! videoconvert", OF_PIXELS_MONO, true, feedWidth, feedHeight);
    gst.startPipeline();
    gst.play();

Sometimes this works fine but many times it does not and I get some obscure errors that I just can't get to the bottom of:

[verbose] ofGstUtils: streamer inited
[notice ] ofGstUtils: setPipelineWithSink(): gstreamer pipeline: rtspsrc location=rtsp://admin:admin@192.168.187.38:554/cam/realmonitor?channel=1&subtype=1 latency=0 ! queue2 max-size-buffers=2 ! decodebin ! videoconvert ! appsink name=ofappsink enable-last-sample=0 caps="video/x-raw, format=GRAY8, width=640, height=512"
[verbose] ofGstUtils: startPipeline(): attaching callbacks
[verbose] ofGstUtils: gstHandleMe[svserbose] aPgipelei(n)e:  iusn live and does not need PREROLL waiting PLAYh
andled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from pipeline0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[ error ] ofGstUtils: gstHandleMessage(): embedded video playback halted for plugin, module vtdechw0  reported: GStreamer encountered a general resource error.
[ error ] ofGstUtils: gstHandleMessage(): embedded video playback halted for plugin, module vtdechw0  reported: GStreamer encountered a general resource error.[verbose] ofGstUtils: streamer inited
[notice ] ofGstUtils: setPipelineWithSink(): gstreamer pipeline: rtspsrc location=rtsp://admin:admin@192.168.187.38:554/cam/realmonitor?channel=1&subtype=1 latency=0 ! queue2 max-size-buffers=2 ! decodebin ! videoconvert ! appsink name=ofappsink enable-last-sample=0 caps="video/x-raw, format=GRAY8, width=640, height=512"
[verbose] ofGstUtils: startPipeline(): attaching callbacks
[verbose] ofGstUtils: gstHandleMe[svserbose] aPgipelei(n)e:  iusn live and does not need PREROLL waiting PLAYh
andled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from pipeline0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[ error ] ofGstUtils: gstHandleMessage(): embedded video playback halted for plugin, module vtdechw0  reported: GStreamer encountered a general resource error.
[ error ] ofGstUtils: gstHandleMessage(): embedded video playback halted for plugin, module vtdechw0  reported: GStreamer encountered a general resource error.

When I can, power cycling my computer, the IP camera I'm trying to access AND my router will make things work, but after a while it goes back to the above error.

Not sure if this helps but I uncommented a line from ofGstUtils.cpp to get more detailed error logging and got this:

[verbose] ofGstUtils: streamer inited
[verbose] ofFbo: GL frame buffer object supported
[verbose] ofFbo: checkGLSupport(): maxColorAttachments: 8, maxDrawBuffers: 8, maxSamples: 8
[verbose] ofFbo: FRAMEBUFFER_COMPLETE - OK
[notice ] ofGstUtils: setPipelineWithSink(): gstreamer pipeline: rtspsrc location=rtsp://admin:admin@192.168.187.38:554/cam/realmonitor?channel=1&subtype=1 latency=0 ! queue2 max-size-buffers=2 ! decodebin ! videoconvert ! appsink name=ofappsink enable-last-sample=0 caps="video/x-raw, format=GRAY8, width=640, height=512"
[verbose] ofGstUtils: startPipeline(): attaching callbacks
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from ofappsink
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from videoconvert0
[[vveerbosreb]o se] oPfiGpseline is live and does not need PREROLL waiting PLAY
tUtils: gstHandleMessage(): got state-changed message from typified
[verbose] ofGstUtils: gstHandleMessage(): got state-ch[awnagrning] ofGstVideoUtils: update(): ofGstVideoUtils needs  mleosaded
sage from decodebin0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from queue2-0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from pipeline0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from videoconvert0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from typified
[verbose] ofGstUtils: gstHandleMessage(): got stream-status message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from queue2-0
[verbose] ofGstUtils: gstHandleMessage(): got progress message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from pipeline0
[verbose] ofGstUtils: gstHandleMessage(): got stream-status message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): got progress message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): got new-clock message from pipeline0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from pipeline0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from videoconvert0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from queue2-0
[verbose] ofGstUtils: gstHandleMessage(): got progress message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): got progress message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): got progress message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): got progress message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from manager
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from manager
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtpssrcdemux0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtpssrcdemux0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtpsession0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtpsession0
[verbose] ofGstUtils: gstHandleMessage(): got progress message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from udpsink0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from udpsink0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from udpsink0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from fakesrc0
[verbose] ofGstUtils: gstHandleMessage(): got stream-status message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from fakesrc0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from fakesrc0
[verbose] ofGstUtils: gstHandleMessage(): got progress message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): got stream-status message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtpssrcdemux0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtpsession0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from manager
[verbose] ofGstUtils: gstHandleMessage(): got stream-status message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from udpsrc1
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from udpsrc1
[verbose] ofGstUtils: gstHandleMessage(): got stream-status message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): got stream-status message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from udpsrc2
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from udpsrc2
[verbose] ofGstUtils: gstHandleMessage(): got progress message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from rtspsrc0
[verbose] ofGstUtils: gstHandleMessage(): got stream-status message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtpptdemux0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtpptdemux0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtpptdemux0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtpjitterbuffer0
[verbose] ofGstUtils: gstHandleMessage(): got stream-status message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtpjitterbuffer0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtpjitterbuffer0
[verbose] ofGstUtils: gstHandleMessage(): got stream-status message from src
[verbose] ofGstUtils: gstHandleMessage(): unhandled message from src
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtph264depay0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from rtph264depay0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from h264parse0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from h264parse0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from vtdechw0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from vtdechw0
[verbose] ofGstUtils: gstHandleMessage(): got latency message from vtdechw0
[verbose] ofGstUtils: gstHandleMessage(): got error message from vtdechw0
[ error ] ofGstUtils: gstHandleMessage(): embedded video playback halted for plugin, module vtdechw0  reported: GStreamer encountered a general resource error.
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from ofappsink
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from ofappsink
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from videoconvert0
[verbose] ofGstUtils: gstHandleMessage(): got state-changed message from videoconvert0
[verbose] ofGstUtils: gstHandleMessage(): got error message from vtdechw0
[ error ] ofGstUtils: gstHandleMessage(): embedded video playback halted for plugin, module vtdechw0  reported: GStreamer encountered a general resource error.

Any ideas?

arturoc commented 8 years ago

no idea of what might be going on but you can enable gstreamer debug traces by defining the environment variable GST_DEBUG, like:

export GST_DEBUG=2
make run 

or however you are running your app

usually you have to go to 4 to actually see anything meaningful but it's super verbose so you'll need to redirect the output to a file to later go through it to find the problem

adielfernandez commented 8 years ago

Ok, trying to compile via command line to get the extra debug info but running into this error:

Compiling Bulk_Recorder for Release HOST_OS=Darwin /Users/AdielsMac/Documents/Creative_Work/AVC/ofx_v0.9.1/libs/openFrameworksCompiled/project/makefileCommon/config.addons.mk:164: * cannot find addon source file ../../../libs/openFrameworks/video/ofGstUtils.h. Stop. make: * [Release] Error 2

The file IS there in the correct location and it builds fine from within XCode. Not sure why it's not finding it now. Do I need to update some header search paths somewhere?

arturoc commented 8 years ago

it should work but you don't need to compile from the command line to test this. just run the compiled aplicaiton from the command line

adielfernandez commented 8 years ago

Wow, you were right. GSTDEBUG=4 is just a flood. I brought it down to level 3 and found a few errors that might shed some light on some issues(?). Aside from tons of "unhandled messages from ____" logs, these stood out:

0:00:00.273187000   860 0x7fe2cb07c280 FIXME                default gstutils.c:3766:gchar *gst_pad_create_stream_id_internal(GstPad *, GstElement *, const gchar *):<fakesrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id

0:00:00.435724000   860 0x7fe2c89d8b20 FIXME           videodecoder gstvideodecoder.c:1057:GstFlowReturn gst_video_decoder_drain_out(GstVideoDecoder *, gboolean):<vtdechw0> Sub-class should implement drain()

0:00:00.435926000   860 0x7fe2c89d8b20 FIXME           videodecoder gstvideodecoder.c:1057:GstFlowReturn gst_video_decoder_drain_out(GstVideoDecoder *, gboolean):<vtdechw0> Sub-class should implement drain()

0:00:00.448488000   860 0x7fe2c89d8b20 WARN                   vtdec vtdec.c:530:gst_vtdec_create_session:<vtdechw0> error: VTDecompressionSessionCreate returned -12913

[ error ] ofGstUtils: gstHandleMessage(): embedded video playback halted for plugin, module vtdechw0  reported: GStreamer encountered a general resource error.

DEBUG level 4 is pretty dense so I'm trying to go through it to see if there's anything else that could be a flag. Below is a link to some errors that popped out at me but I'm continuing to look through things.

http://pastebin.com/HjFr9U2N

A lot of the errors look the same as issue #14 so maybe (hopefully) they're the same? Will post those errors to that issue shortly.

adielfernandez commented 8 years ago

Issue here is the same as issue #14 so check there for resolution if you're getting the "playback halted for plugin, module vtdechw0, general resource error" problem.