Skip to main content

USB Camera or a Webcam on Stream

For Windows

It is possible by creating an RTSP server on your host Windows OS that can be accessed by a Stream container, you just need to follow these steps:

  1. Create a folder on your host machine where the RTSP server files will reside.
  2. Go to mediamtx releases repository and download the zip file.
  3. Once you have it in your local folder, extract it.
  4. Open the mediamtx.yml file in a text editor and make the following changes in paths section, replace:
mediamtx.yml
paths:
# example:
# my_camera:
# source: rtsp://my_camera

with:

mediamtx.yml
paths:
camera01:
runOnInit: ffmpeg -f dshow -video_size 1280x720 -framerate 30 -i video="<YOUR_VIDEO_CAMERA_NAME>" -pix_fmt yuv420p -c:v libx264 -preset ultrafast -b:v 600k -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH
runOnInitRestart: yes

Dshow Parameters used:

  • -video_size: By default ffmpeg receives input from camera at a 640x480 resolution, with this parameter you can select the desired one, this example sets it to 1280x720.
  • -framerate: Framerates or fps, this example sets it to 30.

Replace <YOUR_VIDEO_CAMERA_NAME> with the video camera name you want to use.

If you don't know the name of your camera, you can list all your audio/video devices using this command:

ffmpeg -list_devices true -f dshow -i dummy

Get from the results list the one you need to use i.e.:

...
[dshow @ 000001c636eadcc0] "c922 Pro Stream Webcam" (video)
...

Copy the descriptive name in parentheses (i.e.: c922 Pro Stream Webcam) and paste it on the required field in the mediamtx.yml file.

  1. Save the changes you made in the file.
  2. Execute the mediamtx.exe program. You should be able to see a Windows cmd output like this:
2024/02/06 23:55:52 INF MediaMTX v1.5.1
2024/02/06 23:55:52 INF configuration loaded from C:\Users\User\Desktop\mediamtx\mediamtx.yml
2024/02/06 23:55:52 INF [path camera01] runOnInit command started
2024/02/06 23:55:52 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2024/02/06 23:55:52 INF [RTMP] listener opened on :1935
2024/02/06 23:55:52 INF [HLS] listener opened on :8888
2024/02/06 23:55:52 INF [WebRTC] listener opened on :8889 (HTTP), :8189 (ICE/UDP)
2024/02/06 23:55:52 INF [SRT] listener opened on :8890 (UDP)
ffmpeg version 6.1.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 58. 29.100 / 58. 29.100
libavcodec 60. 31.102 / 60. 31.102
libavformat 60. 16.100 / 60. 16.100
libavdevice 60. 3.100 / 60. 3.100
libavfilter 9. 12.100 / 9. 12.100
libswscale 7. 5.100 / 7. 5.100
libswresample 4. 12.100 / 4. 12.100
libpostproc 57. 3.100 / 57. 3.100
Input #0, dshow, from 'video=c922 Pro Stream Webcam':
Duration: N/A, start: 184827.343686, bitrate: N/A
Stream #0:0: Video: mjpeg (Baseline) (MJPG / 0x47504A4D), yuvj422p(pc, bt470bg/bt709/unknown), 1280x720, 30 fps, 30 tbr, 10000k tbn
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[swscaler @ 0000016617efca00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 000001661b3a7040] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0000016617efca00] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 000001661b3a6340] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 00000166154bef80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 00000166154bef80] profile Constrained Baseline, level 3.1, 4:2:0, 8-bit
[libx264 @ 00000166154bef80] 264 - core 164 r3172 c1c9931 - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=18 lookahead_threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=abr mbtree=0 bitrate=600 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
2024/02/06 23:55:52 INF [RTSP] [conn [::1]:52234] opened
2024/02/06 23:55:52 INF [RTSP] [session bbd94c07] created by [::1]:52234
2024/02/06 23:55:52 INF [RTSP] [session bbd94c07] is publishing to path 'camera01', 1 track (H264)
Output #0, rtsp, to 'rtsp://localhost:8554/camera01':
Metadata:
encoder : Lavf60.16.100
Stream #0:0: Video: h264, yuv420p(tv, bt470bg/bt709/unknown, progressive), 1280x720, q=2-31, 600 kb/s, 30 fps, 90k tbn
Metadata:
encoder : Lavc60.31.102 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/600000 buffer size: 0 vbv_delay: N/A

Now that the RTSP server is running, you need to add to the parameter --network=host to run the Stream container:

docker run... --network=host platerecognizer/alpr-stream:latest

Once the Stream container is running, just open the Stream config.ini file and add the URL of the RTSP server running in the host machine to the url field in the camera section.

More information about the URL configuration here.

note

Make sure to use the correct URL.

Format:rtsp://<WINDOWS_HOST_IP_ADDRESS>:<RTSP_PORT>/<CAMERA_SERVER_PATH>

Example: rtsp://192.168.0.59:8554/camera01

  • rtsp is the service protocol.
  • 192.168.0.56 is the Windows host machine IP address.
  • 8554 is the default RTSP port.
  • camera01 is the camera path in the server.

For Linux

  1. Find the id of the camera. For example, /dev/video0.
ls -ltrh /dev/video*
  1. Update the url parameter in your config.ini. Use the id of the camera from the previous command. For example, /dev/video0.
url = '/dev/video0'
  1. Start Stream with the docker run. Use the camera id from the previous command. For example, /dev/video0. And set your own LICENSE_KEY, TOKEN and volume for /path/to/stream_dir.
docker run \
-t \
--runtime nvidia \
--privileged \
--name stream \
--user `id -u`:`id -g` \
-v /dev/video0:/dev/video0 \
-v /tmp/argus_socket:/tmp/argus_socket \
-v /path/to/stream_dir:/user-data \
-e OPENCV_API_PREFERENCE=200 \
-e LICENSE_KEY=XXXXX \
-e TOKEN=YYYYY \
platerecognizer/alpr-stream:jetson
Floating button icon
CTRL + .