deleted>Frq08988 mNo edit summary |
Registered User mNo edit summary |
||
Line 1: | Line 1: | ||
== Overview == | == Overview == | ||
This article will explain how to stream camera content over network thanks to [[GStreamer overview|GStreamer]] application on top of [[V4L2_camera_overview|V4L2 Linux<sup>®</sup> kernel framework]]. | This article will explain how to stream camera content over network thanks to [[GStreamer overview|GStreamer]] application on top of [[V4L2_camera_overview|V4L2 Linux<sup>®</sup> kernel framework]]. | ||
Line 18: | Line 8: | ||
== Local streaming == | == Local streaming == | ||
Here is an example of a local preview involving [[V4l2-ctl]] for JPEG pictures capture and [[Gst-play|gst-play]] GStreamer player for JPEG decoding and display. JPEG pictures are sent over a standard Linux pipe. | Here is an example of a local preview involving [[V4l2-ctl]] for JPEG pictures capture and [[Gst-play|gst-play]] GStreamer player for JPEG decoding and display. JPEG pictures are sent over a standard Linux pipe. | ||
{{Board$}} v4l2-ctl --set-parm=30;v4l2-ctl --set-fmt-video=width=640,height=480,pixelformat=JPEG --stream-mmap --stream-count=-1 {{highlight|'''--stream-to{{=}}-'''}} {{ | {{Board$}} v4l2-ctl --set-parm=30;v4l2-ctl --set-fmt-video=width=640,height=480,pixelformat=JPEG --stream-mmap --stream-count=-1 {{highlight|'''--stream-to{{=}}-'''}} {{HighlightParam|2>/dev/null}} {{highlight|'''<nowiki>|</nowiki>'''}} gst-play-1.0 {{highlight|'''"fd://0"'''}} | ||
{{highlight|'''--stream-to{{=}}-'''}} tells [[V4l2-ctl]] to output binary captured content to standard output, which is then sent to pipe {{highlight|'''<nowiki>|</nowiki>'''}}. | {{highlight|'''--stream-to{{=}}-'''}} tells [[V4l2-ctl]] to output binary captured content to standard output, which is then sent to pipe {{highlight|'''<nowiki>|</nowiki>'''}}. | ||
Special URI {{highlight|'''fd://0'''}} tells [[Gst-play|gst-play]] GStreamer player to read data from the pipe. | Special URI {{highlight|'''fd://0'''}} tells [[Gst-play|gst-play]] GStreamer player to read data from the pipe. | ||
Note the {{ | Note the {{HighlightParam|2>/dev/null}} right after the [[V4l2-ctl]] command to remove the logs from console output. | ||
<br> | <br> | ||
<br> | <br> | ||
Line 34: | Line 24: | ||
inet addr:127.0.0.1 Mask:255.0.0.0 | inet addr:127.0.0.1 Mask:255.0.0.0 | ||
Then fill the {{ | Then fill the {{HighlightParam|'''host{{=}}'''}} udpsink property with this IP address on the remote side: | ||
{{Board$}} v4l2-ctl --set-parm=30;v4l2-ctl --set-fmt-video=width=640,height=480,pixelformat=JPEG --stream-mmap --stream-count=-1 --stream-to=- 2>/dev/null | gst-launch-1.0 fdsrc ! jpegparse ! rtpjpegpay ! udpsink {{ | {{Board$}} v4l2-ctl --set-parm=30;v4l2-ctl --set-fmt-video=width=640,height=480,pixelformat=JPEG --stream-mmap --stream-count=-1 --stream-to=- 2>/dev/null | gst-launch-1.0 fdsrc ! jpegparse ! rtpjpegpay ! udpsink {{HighlightParam|'''host{{=}}'''}}{{highlight|'''aa.bb.cc.dd'''}} port=5000 | ||
Then play the UDP stream on host PC: | Then play the UDP stream on host PC: | ||
Line 71: | Line 61: | ||
{{Board$}} gst-play-1.0 {{green|'''rtsp://10.48.1.122:8081/test'''}} | {{Board$}} gst-play-1.0 {{green|'''rtsp://10.48.1.122:8081/test'''}} | ||
--> | --> | ||
<noinclude> | |||
{{ArticleBasedOnModel | How to article model}} | |||
{{PublicationRequestId | 7962 | 2018-07-05 | AlainF}} | |||
[[Category:How to run use cases]] | |||
[[Category:V4L2]] | |||
[[Category:GStreamer]] | |||
</noinclude> |
Latest revision as of 10:50, 24 September 2019
1. Overview
This article will explain how to stream camera content over network thanks to GStreamer application on top of V4L2 Linux® kernel framework.
Capturing compressed JPEG pictures is an efficient way to send camera images to any local or remote player; JPEG pictures require a limited bandwidth while being fully interoperable.
Find below some examples of command lines allowing to capture a continuous JPEG stream while playing it using various multimedia players, either local or remote.
2. Local streaming
Here is an example of a local preview involving V4l2-ctl for JPEG pictures capture and gst-play GStreamer player for JPEG decoding and display. JPEG pictures are sent over a standard Linux pipe.
--stream-to=- 2>/dev/null | gst-play-1.0 "fd://0"v4l2-ctl --set-parm=30;v4l2-ctl --set-fmt-video=width=640,height=480,pixelformat=JPEG --stream-mmap --stream-count=-1
--stream-to=- tells V4l2-ctl to output binary captured content to standard output, which is then sent to pipe |.
Special URI fd://0 tells gst-play GStreamer player to read data from the pipe.
Note the 2>/dev/null right after the V4l2-ctl command to remove the logs from console output.
3. UDP streaming
Get first the IP address aa.bb.cc.dd of the host PC using ifconfig command:
aa.bb.cc.dd Bcast:10.201.23.255 Mask:255.255.252.0 inet addr:127.0.0.1 Mask:255.0.0.0ifconfig | grep "inet addr" inet addr:
Then fill the host= udpsink property with this IP address on the remote side:
host=aa.bb.cc.dd port=5000v4l2-ctl --set-parm=30;v4l2-ctl --set-fmt-video=width=640,height=480,pixelformat=JPEG --stream-mmap --stream-count=-1 --stream-to=- 2>/dev/null | gst-launch-1.0 fdsrc ! jpegparse ! rtpjpegpay ! udpsink
Then play the UDP stream on host PC:
gst-launch-1.0 udpsrc port=5000 ! application/x-rtp, encoding-name=JPEG ! rtpjpegdepay ! jpegparse ! decodebin ! autovideosink
A new window will popup on host PC displaying the camera content.