Re-stream Motion JPEG network connected webcam via GStreamer-RTSP (RFC2435) - pipeline help
Matt Thyer
matt.thyer at gmail.com
Wed Mar 6 04:46:20 UTC 2019
I've made some good progress.
Apparently GStreamer RTSP server needed the RTP payload to be named "pay0".
The "rtpjpegpay" element defaulted to a name of "rtpjpegpay0".
I've also set the payload type to 26 ("pt=26") as I think it should be.
I then needed to insert a capsfilter of "image/jpeg,width=640,height=480"
after the "multipartdemux" element.
This got me an initial image and an endless stream of "FIXME" messages (at
GST_DEBUG="*:3") but video wasn't animated....
The final fix was to use the "do-timestamp=true" and "is_live=true"
parameters with the "souphttpsrc" element.
I now have a nicely restreamed feed but I still get an endless stream of
FIXME and some WARNs (at GST_DEBUG="*:3").
I guess the answer to that is not to look at the debug messages!
My final pipeline is:
"souphttpsrc location=http://10.10.1.1:8196/ do-timestamp=true is_live=true
! multipartdemux ! image/jpeg,width=640,height=480 ! rtpjpegpay name=pay0
pt=26"
Does anyone know if I can improve on this?
The FIXME and WARNs are:
1 of:
FIXME rtpjpegpay
gstrtpjpegpay.c:751:gst_rtp_jpeg_pay_handle_buffer:<pay0> unhandled marker
0xff
Many of:
FIXME rtpjpegpay
gstrtpjpegpay.c:751:gst_rtp_jpeg_pay_handle_buffer:<pay0> unhandled marker
0x00
2 of:
FIXME rtpjpegpay
gstrtpjpegpay.c:751:gst_rtp_jpeg_pay_handle_buffer:<pay0> unhandled marker
0xff
1 of:
WARN rtpjpegpay
gstrtpjpegpay.c:733:gst_rtp_jpeg_pay_handle_buffer:<pay0> EOI reached
before SOS!
2 of:
WARN rtspstream
rtsp-stream.c:4504:gst_rtsp_stream_seekable:<GstRTSPStream at 0x7f9198048330>
seeking query failed
2 of:
FIXME rtspmedia rtsp-media.c:3833:gst_rtsp_media_suspend:
suspend for dynamic pipelines needs fixing
1 of:
FIXME rtspclient
rtsp-client.c:1646:handle_play_request:<GstRTSPClient at 0x1417120> Add
support for seek style (null)
3 of:
WARN rtspstream
rtsp-stream.c:4504:gst_rtsp_stream_seekable:<GstRTSPStream at 0x7f9198048330>
seeking query failed
1 of:
FIXME rtpjpegpay
gstrtpjpegpay.c:751:gst_rtp_jpeg_pay_handle_buffer:<pay0> unhandled marker
0xff
Many of:
FIXME rtpjpegpay
gstrtpjpegpay.c:751:gst_rtp_jpeg_pay_handle_buffer:<pay0> unhandled marker
0x00
1 of:
FIXME rtpjpegpay
gstrtpjpegpay.c:751:gst_rtp_jpeg_pay_handle_buffer:<pay0> unhandled marker
0xff
1 of:
WARN rtpjpegpay
gstrtpjpegpay.c:733:gst_rtp_jpeg_pay_handle_buffer:<pay0> EOI reached
before SOS!
1 of:
FIXME rtpjpegpay
gstrtpjpegpay.c:751:gst_rtp_jpeg_pay_handle_buffer:<pay0> unhandled marker
0xff
Many of:
FIXME rtpjpegpay
gstrtpjpegpay.c:751:gst_rtp_jpeg_pay_handle_buffer:<pay0> unhandled marker
0x00
etc...
Thanks in advance
On Wed, 6 Mar 2019 at 12:11, Matt Thyer <matt.thyer at gmail.com> wrote:
> Dear GStreamer developers,
>
> I'm trying to re-stream a Motion-JPEG stream via the GStreamer RTSP server
> (i.e. RFC2435 extension to RTSP) but am having trouble with my pipeline.
> The video source is an "i-Spy Tank" by HappyCow. See:
> https://www.youtube.com/watch?v=p-_fnMRzcKE
> There's a blog on accessing this tank's video, turret and track controls
> here: https://devblog.kogan.com/blog/hacking-the-wifi-spy-tank
> Think of it as a simple WiFi connected web camera where the device
> presents as an open wireless access point.
> The Motion JPEG video stream is at: http://10.10.1.1:8196/ (not port 9876
> as the devblog confusingly says!).
>
> VLC tells me that the stream is:
> Codec: Motion JPEG (MJPG)
> Resolution: 640x480
> Display resolution: 640x480
> Decoded format: Planar 4:2:2 YUV full scale
>
> What's working:
> I've successfully saved the individual JPEG frames with the following
> pipeline:
> gst-launch-1.0 -e souphttpsrc location=http://10.10.1.1:8196/ !
> multipartdemux ! image/jpeg,width=640,height=480 ! multifilesink
> location=frame%05d.jpeg
>
> What's not working:
> I'm unable to re-stream using GStreamer RTSP so far...
> I've tried pipelines: "souphttpsrc location=http://10.10.1.1:8196/ !
> multipartdemux ! rtpjpegpay"
> and: "souphttpsrc location=http://10.10.1.1:8196/ do-timestamp=true !
> multipartdemux ! image/jpeg,width=640,height=480 ! rtpjpegpay"
> But both of these pipelines fail with error:
> "FIXME rtspmedia rtsp-media.c:3835:gst_rtsp_media_suspend:
> suspend for dynamic pipelines needs fixing"
> (When run with GST_DEBUG="*:3").
> My understanding of this error is that it's due to a capabilities mismatch
> between elements.
> Is this the case?
>
> I've seen some people use "avdec_mjpeg" and then re-encode but I'd rather
> not go to that extreme... If it's incompatible or missing capabilities, how
> can I artificially provide these caps without transcoding?
>
> Matt Thyer
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20190306/f76d7a98/attachment.html>
More information about the gstreamer-devel
mailing list