Missing element: H.264 decoder .... sometimes (for Raspberry Pi)
Peter Maersk-Moller
pmaersk at gmail.com
Sat Sep 14 15:43:03 PDT 2013
Hi.
I'm generating an AV stream on one machine and trying to play the stream on
another machine namely a Raspberry PI. However sometimes GStreamer can't
find the H.264 decoder. Is this a well known problem? Pipelines and results
are shown further down in this email.
It appears that the higher the bandwidth or the higher the video
resolution, the more often the decoder is not found subsequently the stream
is not played. If I use 320x240 @1000kbps, the stream is played more than
half the time the stream is started. If I increase bandwidth and geometry,
the fail rate grow. At 640x480 @2000kbps it almost never works. When it
doesn't play, the pipeline reports 'Missing element: H.264 decoder'. The
Raspberry pi has the latest Raspian installed and the GStreamer elements
are installed following the information on this page:
http://wiki.matthiasbock.net/index.php/Hardware-accelerated_video_playback_on_the_Raspberry_P
i
This is the pipeline used to generate the stream:
#!/bin/sh
AUDIO='audio/x-raw-int, endianness=(int)1234, signed=(boolean)true,
width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2'
VIDEO='video/x-raw-yuv, width=(int)320, height=(int)180,
framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)1/1'
audioencoder='faac bitrate=128000 profile=LC outputformat=0'
videoencoder='x264enc tune=zerolatency bitrate=4000 profile=baseline'
ENCAUDIO='audio/mpeg,mpegversion=4, stream-format=raw'
ENCVIDEO='video/x-h264, alignment=au, stream-format=byte-stream'
gst-launch-0.10 -v \
audiotestsrc is-live=true !\
queue !\
$AUDIO !\
audioconvert !\
$audioencoder !\
$ENCAUDIO !\
queue !\
muxer. videotestsrc is-live=true !\
$VIDEO !\
queue !\
$videoencoder !\
$ENCVIDEO !\
h264parse !\
queue !\
mpegtsmux name=muxer !\
mpegtsparse !\
queue !\
tcpserversink host=0.0.0.0 port=5012 sync-method=2
This is the pipeline used to play the stream on the Rasp-pi
gst-launch-1.0 -v --gst-debug=decodebin:4 \
tcpclientsrc host=81.7.134.69 port=5012 !\
queue max-size-buffers=0 !\
decodebin name=decoder max-size-bytes=0 !\
queue max-size-bytes=000000 !\
videoconvert !\
autovideosink decoder. !\
queue max-size-bytes=000000 !\
audioconvert ! alsasink
This is part of the output, when the stream is NOT playing (please note the
missing element statement):
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstTypeFindElement:typefind.GstPad:src:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstTSDemux:tsdemux0.GstPad:sink:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0.GstPad:src_0:
caps = audio/mpeg, mpegversion=(int)2, stream-format=(string)adts
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstAacParse:aacparse0.GstPad:sink:
caps = audio/mpeg, mpegversion=(int)2, stream-format=(string)adts
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0.GstPad:sink_0:
caps = audio/mpeg, mpegversion=(int)2, stream-format=(string)adts
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstAacParse:aacparse0.GstPad:src:
caps = audio/mpeg, framed=(boolean)true, mpegversion=(int)4,
rate=(int)44100, channels=(int)2, stream-format=(string)adts
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstFaad:faad0.GstPad:sink: caps
= audio/mpeg, framed=(boolean)true, mpegversion=(int)4, rate=(int)44100,
channels=(int)2, stream-format=(string)adts
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstFaad:faad0.GstPad:src: caps
= audio/x-raw, format=(string)S16LE, layout=(string)interleaved,
rate=(int)44100, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-buffers = 5
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-time = 0
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-bytes = 2097152
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0.GstPad:src_1:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)nal
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstH264Parse:h264parse0.GstPad:sink:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)nal
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0.GstPad:sink_1:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)nal
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstH264Parse:h264parse0.GstPad:src:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)au, parsed=(boolean)true
Missing element: H.264 decoder
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-buffers = 5
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-time = 0
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-bytes = 2097152
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-buffers = 5
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-time = 0
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-bytes = 2097152
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstCapsFilter:capsfilter0.GstPad:src:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)au, parsed=(boolean)true
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstCapsFilter:capsfilter0.GstPad:sink:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)au, parsed=(boolean)true
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstCapsFilter:capsfilter0.GstPad:src:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)au, parsed=(boolean)true
/GstPipeline:pipeline0/GstQueue:queue2.GstPad:src: caps = audio/x-raw,
format=(string)S16LE, layout=(string)interleaved, rate=(int)44100,
channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstQueue:queue2.GstPad:sink: caps = audio/x-raw,
format=(string)S16LE, layout=(string)interleaved, rate=(int)44100,
channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstFaad:faad0.GstPad:src: caps
= audio/x-raw, format=(string)S16LE, layout=(string)interleaved,
rate=(int)44100, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
.........
This is part of the output when playing
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstTypeFindElement:typefind.GstPad:src:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstTSDemux:tsdemux0.GstPad:sink:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0.GstPad:src_0:
caps = audio/mpeg, mpegversion=(int)2, stream-format=(string)adts
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstAacParse:aacparse0.GstPad:sink:
caps = audio/mpeg, mpegversion=(int)2, stream-format=(string)adts
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0.GstPad:sink_0:
caps = audio/mpeg, mpegversion=(int)2, stream-format=(string)adts
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstAacParse:aacparse0.GstPad:src:
caps = audio/mpeg, framed=(boolean)true, mpegversion=(int)4,
rate=(int)44100, channels=(int)2, stream-format=(string)adts
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstFaad:faad0.GstPad:sink: caps
= audio/mpeg, framed=(boolean)true, mpegversion=(int)4, rate=(int)44100,
channels=(int)2, stream-format=(string)adts
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstFaad:faad0.GstPad:src: caps
= audio/x-raw, format=(string)S16LE, layout=(string)interleaved,
rate=(int)44100, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-buffers = 5
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-time = 0
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-bytes = 2097152
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0.GstPad:src_1:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)nal
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstH264Parse:h264parse0.GstPad:sink:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)nal
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0.GstPad:sink_1:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)nal
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstH264Parse:h264parse0.GstPad:src:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)au, width=(int)320, height=(int)180,
framerate=(fraction)25/1, parsed=(boolean)true,
pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstCapsFilter:capsfilter0.GstPad:src:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)au, width=(int)320, height=(int)180,
framerate=(fraction)25/1, parsed=(boolean)true,
pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstOMXH264Dec-omxh264dec:omxh264dec-omxh264dec0.GstPad:sink:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)au, width=(int)320, height=(int)180,
framerate=(fraction)25/1, parsed=(boolean)true,
pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstCapsFilter:capsfilter0.GstPad:sink:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)au, width=(int)320, height=(int)180,
framerate=(fraction)25/1, parsed=(boolean)true,
pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstCapsFilter:capsfilter0.GstPad:src:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)au, width=(int)320, height=(int)180,
framerate=(fraction)25/1, parsed=(boolean)true,
pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstOMXH264Dec-omxh264dec:omxh264dec-omxh264dec0.GstPad:sink:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)au, width=(int)320, height=(int)180,
framerate=(fraction)25/1, parsed=(boolean)true,
pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstOMXH264Dec-omxh264dec:omxh264dec-omxh264dec0.GstPad:src:
caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-buffers = 5
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-time = 0
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstMultiQueue:multiqueue0:
max-size-bytes = 2097152
/GstPipeline:pipeline0/GstDecodeBin:decoder.GstDecodePad:src_0: caps =
video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstDecodeBin:decoder.GstDecodePad:src_0: caps =
video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstDecodeBin:decoder.GstDecodePad:src_1: caps =
audio/x-raw, format=(string)S16LE, layout=(string)interleaved,
rate=(int)44100, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:src: caps = video/x-raw,
format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:sink: caps = video/x-raw,
format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstDecodeBin:decoder.GstDecodePad:src_0.GstProxyPad:proxypad10:
caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstQueue:queue2.GstPad:sink: caps = audio/x-raw,
format=(string)S16LE, layout=(string)interleaved, rate=(int)44100,
channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstDecodeBin:decoder.GstDecodePad:src_1.GstProxyPad:proxypad7:
caps = audio/x-raw, format=(string)S16LE, layout=(string)interleaved,
rate=(int)44100, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps =
audio/x-raw, format=(string)S16LE, layout=(string)interleaved,
rate=(int)44100, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstAlsaSink:alsasink0.GstPad:sink: caps =
audio/x-raw, format=(string)S16LE, layout=(string)interleaved,
rate=(int)44100, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps =
audio/x-raw, format=(string)S16LE, layout=(string)interleaved,
rate=(int)44100, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:src: caps =
video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0.GstGhostPad:sink.GstProxyPad:proxypad1:
caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstEglGlesSink:autovideosink0-actual-sink-eglgles.GstPad:sink:
caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0.GstGhostPad:sink:
caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:sink: caps =
video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstOMXH264Dec-omxh264dec:omxh264dec-omxh264dec0.GstPad:src:
caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstDecodeBin:decoder.GstDecodePad:src_0: caps =
video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:src: caps = video/x-raw,
format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:sink: caps = video/x-raw,
format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstDecodeBin:decoder.GstDecodePad:src_0.GstProxyPad:proxypad10:
caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:src: caps =
video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0.GstGhostPad:sink.GstProxyPad:proxypad1:
caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstEglGlesSink:autovideosink0-actual-sink-eglgles.GstPad:sink:
caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0.GstGhostPad:sink:
caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:sink: caps =
video/x-raw, format=(string)I420, width=(int)320, height=(int)180,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt601, framerate=(fraction)25/1
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstCapsFilter:capsfilter0.GstPad:src:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)au, width=(int)320, height=(int)180,
framerate=(fraction)25/1, parsed=(boolean)true,
pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstDecodeBin:decoder/GstOMXH264Dec-omxh264dec:omxh264dec-omxh264dec0.GstPad:sink:
caps = video/x-h264, stream-format=(string)byte-stream,
alignment=(string)au, width=(int)320, height=(int)180,
framerate=(fraction)25/1, parsed=(boolean)true,
pixel-aspect-ratio=(fraction)1/1
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
/GstPipeline:pipeline0/GstQueue:queue2.GstPad:src: caps = audio/x-raw,
format=(string)S16LE, layout=(string)interleaved, rate=(int)44100,
channels=(int)2, channel-mask=(bitmask)0x0000000000000003
New clock: GstAudioSinkClock
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps =
audio/x-raw, format=(string)S16LE, layout=(string)interleaved,
rate=(int)44100, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstAlsaSink:alsasink0.GstPad:sink: caps =
audio/x-raw, format=(string)S16LE, layout=(string)interleaved,
rate=(int)44100, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps =
audio/x-raw, format=(string)S16LE, layout=(string)interleaved,
rate=(int)44100, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20130915/88a160ec/attachment-0001.html>
More information about the gstreamer-devel
mailing list