Skip to content

Instantly share code, notes, and snippets.

@Vankalif
Last active May 5, 2024 02:06
Show Gist options
  • Save Vankalif/c61bd6c227c938572b3f2788b0e2c615 to your computer and use it in GitHub Desktop.
Save Vankalif/c61bd6c227c938572b3f2788b0e2c615 to your computer and use it in GitHub Desktop.
VLC 6 ip cameras mosaic config via RTSP
# Runs on windows by command -> vlc --vlm-conf path_to_file.vlm
# Background options
new bg broadcast enabled
# bg just plain black background jpg image
setup bg input "C:\Users\full_path_to\back.jpg"
setup bg option image-duration=-1
setup bg output #transcode{sfilter=mosaic{width=1920,height=960,cols=3,rows=2,position=1,order="1,2,3,4,5,6",keep-aspect-ratio=enabled,keep-picture=1,mosaic-align=5},vcodec=mp4v,vb=2000,fps=15}:duplicate{dst=display}
# Input options
new 1 broadcast enabled
# RTSP string for HIKVISION cameras
setup 1 input "rtsp://admin:pass@0.0.0.0:554/ISAPI/Streaming/Channels/102"
setup 1 option dshow-size="640x480"
setup 1 output #duplicate{dst=mosaic-bridge{id=1,width=640,height=480},select=video,dst=bridge-out{id=0}}
new 2 broadcast enabled
setup 2 input "rtsp://admin:pass@0.0.0.0:554/ISAPI/Streaming/Channels/102"
setup 2 option dshow-size="640x480"
setup 2 output #duplicate{dst=mosaic-bridge{id=2,width=640,height=480},select=video,dst=bridge-out{id=1}}
new 3 broadcast enabled
setup 3 input "rtsp://admin:pass@0.0.0.0:554/ISAPI/Streaming/Channels/102"
setup 3 option dshow-size="640x480"
setup 3 output #duplicate{dst=mosaic-bridge{id=3,width=640,height=480},select=video,dst=bridge-out{id=2}}
new 4 broadcast enabled
setup 4 input "rtsp://admin:pass@0.0.0.0:554/ISAPI/Streaming/Channels/102"
setup 4 option dshow-size="640x480"
setup 4 output #duplicate{dst=mosaic-bridge{id=4,width=640,height=480},select=video,dst=bridge-out{id=3}}
new 5 broadcast enabled
setup 5 input "rtsp://admin:pass@0.0.0.0:554/ISAPI/Streaming/Channels/102"
setup 5 option dshow-size="640x480"
setup 5 output #duplicate{dst=mosaic-bridge{id=5,width=640,height=480},select=video,dst=bridge-out{id=4}}
new 6 broadcast enabled
setup 6 input "rtsp://admin:pass@0.0.0.0:554/ISAPI/Streaming/Channels/102"
setup 6 option dshow-size="640x480"
setup 6 output #duplicate{dst=mosaic-bridge{id=6,width=640,height=480},select=video,dst=bridge-out{id=5}}
# Launch everything
control bg play
control 1 play
control 2 play
control 3 play
control 4 play
control 5 play
control 6 play
@adushaj
Copy link

adushaj commented Aug 26, 2022

Hey, thank you for sharing this Gist. It's leading me to the right path. I am encountering some instability with 3 of my Eufy cams running RTSP. Ignore camera 4. I have commented that one out because it's a trash Wyze cam of little importance to me that will be replaced soon by another Eufy. Final version desired is to have 4 RTSP cams displayed on a 1920x1080 display evenly divided into 960x540 per cam. Below is my running file at the moment. Stream #1 does a good job at staying stable with zero flicker while stream 2 and 3 begin to flicker quite a bit. Note that all of these streams run completely stable when I run a direct network stream in VLC individually so I feel like VLC is struggling somehow with the mosaic. Here's a clip on Imgur The background image is of my dogs and as previously mentioned, don't worry about the 4th stream not appearing at all. It's commented out right now.

del all
# background options
new  bg broadcast enabled
# background image
setup bg input     "C:\Users\aleks\VLC Mosaic for RTSP Streams\bg.jpg"
setup bg option image-duration=-1
setup bg output #transcode{sfilter=mosaic{width=1920,height=1080,cols=2,rows=2,position=1,order="1,2,3,4",keep-aspect-ratio=enabled,keep-picture=1,mosaic-align=5},vcodec=mp4v,vb=2000,fps=25/1}:duplicate{dst=display}

# Input options
new   1 broadcast enabled
# RTSP string for Eufy cams
setup 1 input "rtsp://192.168.199.130:554/live0"
setup 1 option dshow-size="960x540"
setup 1 output #duplicate{dst=mosaic-bridge{id=1,width=960,height=540},select=video,dst=bridge-out{id=1}}

new   2 broadcast enabled
setup 2 input "rtsp://192.168.199.151:554/live0"
setup 2 option dshow-size="960x540"
setup 2 output #duplicate{dst=mosaic-bridge{id=2,width=960,height=540},select=video,dst=bridge-out{id=2}}

new   3 broadcast enabled
setup 3 input "rtsp://192.168.199.170:554/live0"
setup 3 option dshow-size="960x540"
setup 3 output #duplicate{dst=mosaic-bridge{id=3,width=960,height=540},select=video,dst=bridge-out{id=3}}
# RTSP for Backyard Wyze Cam
#new   4 broadcast enabled
#setup 4 input "rtsp://admin:admin@192.168.199.193:554/live"
#setup 4 option dshow-size="960x540"
#setup 4 output #duplicate{dst=mosaic-bridge{id=4,width=960,height=540},select=video,dst=bridge-out{id=4}}

# Launch everything
control bg play
control 1 play
control 2 play
control 3 play
#control 4 play

Anything stand out to you in this file? What about VLC settings? I've tried running this with both hardware acceleration off and on in VLC.

@thedroidkid
Copy link

Thanks I got mine working. Anyone know how to hide the second VLC window?

@ivan-cc
Copy link

ivan-cc commented Nov 30, 2022

Thanks I got mine working. Anyone know how to hide the second VLC window?

-I dummy

@noparking247
Copy link

I signed up for an account just to comment on this.

I have (4) Hikvision cameras and wanted to display them on a 1920x1080 monitor. I also wanted it to be as idiot proof as possible, hence why I'm looking at this route rather than using the full ActiveX client.

Anywho...

One important thing I think is overlooked, is the size of the initial background. In my case, I made a .jpg file in Paint the same size as the screen, 1920x1080.

I also tweaked some of the above config -- and it seems to be working great.

To be run with: vlc.exe --vlm-conf C:\Temp\test.vlm -I dummy --no-video-deco --no-embedded-video

del all

Background options

new bg broadcast enabled
setup bg input "C:\Temp\black.jpg"
setup bg option image-duration=-1
setup bg output #transcode{sfilter=mosaic{width=1920,height=1080,cols=2,rows=2,position=1,order="1,2,3,4",keep-aspect-ratio=enabled,keep-picture=1,mosaic-align=0},vcodec=mp4v,vb=0,fps=0}:duplicate{dst=display}

Input options

new 1 broadcast enabled
setup 1 input "rtsp://admin:SUPER_PASSWORD@172.16.251.101:554/ISAPI/Streaming/Channels/101"
setup 1 option dshow-size="640x480"
setup 1 output #duplicate{dst=mosaic-bridge{id=1,width=960,height=540},select=video,dst=bridge-out{id=0}}

new 2 broadcast enabled
setup 2 input "rtsp://admin:SUPER_PASSWORD@172.16.251.102:554/ISAPI/Streaming/Channels/101"
setup 2 option dshow-size="640x480"
setup 2 output #duplicate{dst=mosaic-bridge{id=2,width=960,height=540},select=video,dst=bridge-out{id=1}}

new 3 broadcast enabled
setup 3 input "rtsp://admin:SUPER_PASSWORD@172.16.251.103:554/ISAPI/Streaming/Channels/101"
setup 3 option dshow-size="640x480"
setup 3 output #duplicate{dst=mosaic-bridge{id=3,width=960,height=540},select=video,dst=bridge-out{id=2}}

new 4 broadcast enabled
setup 4 input "rtsp://admin:SUPER_PASSWORD@172.16.251.104:554/ISAPI/Streaming/Channels/101"
setup 4 option dshow-size="640x480"
setup 4 output #duplicate{dst=mosaic-bridge{id=4,width=960,height=540},select=video,dst=bridge-out{id=3}}

Launch everything

control bg play
control 1 play
control 2 play
control 3 play
control 4 play

Also note -- I run this with "vlc.exe --vlm-conf C:\Temp\test.vlm -I dummy --no-video-deco --no-embedded-video" -- as this eliminates any additional pop-up windows/title bars/etc. -- just a screen with 4 cameras.

@noparking247
Copy link

Note: The bolded statements just happen to begin with a # as they are commented out. Not sure why that happened, but, YOLO.

@elirannat
Copy link

Hi Vankalif how are you?

I do it like what wrote.. and still I didn't get anything in my VLC 3.0.18.
You have an option to check it with me?
Big thanks

@Vankalif
Copy link
Author

@elirannat do u read the comment @noparking247 ? Have you tried?

@Vankalif
Copy link
Author

Try this as example, before you start, you need an image with 1920x1080 size in pixels. Place it in "C:\Temp", name it bg.jpg
Hope it will help you!

new bg broadcast enabled
setup bg input "C:\Temp\bg.jpg"
setup bg option image-duration=-1
setup bg output #transcode{sfilter=mosaic{width=1920,height=1080,cols=2,rows=2,position=1,order="1,2,3,4",keep-aspect-ratio=enabled,keep-picture=1,mosaic-align=0},vcodec=mp4v,vb=0,fps=0}:duplicate{dst=display}

new 1 broadcast enabled loop
setup 1 input "http://streams.videolan.org/samples/MPEG-4/CDR-Dinner_LAN_800k.mp4"
setup 1 option dshow-size="640x480"
setup 1 output #duplicate{dst=mosaic-bridge{id=1,width=960,height=540},select=video,dst=bridge-out{id=0}}

new 2 broadcast enabled
setup 2 input "http://streams.videolan.org/samples/MPEG-4/MPEGSolution_jurassic.mp4"
setup 2 option dshow-size="640x480"
setup 2 output #duplicate{dst=mosaic-bridge{id=2,width=960,height=540},select=video,dst=bridge-out{id=1}}

new 3 broadcast enabled loop
setup 3 input "http://streams.videolan.org/samples/MPEG-4/CDR-Dinner_LAN_800k.mp4"
setup 3 option dshow-size="640x480"
setup 3 output #duplicate{dst=mosaic-bridge{id=3,width=960,height=540},select=video,dst=bridge-out{id=2}}

new 4 broadcast enabled
setup 4 input "http://streams.videolan.org/samples/MPEG-4/MPEGSolution_jurassic.mp4"
setup 4 option dshow-size="640x480"
setup 4 output #duplicate{dst=mosaic-bridge{id=4,width=960,height=540},select=video,dst=bridge-out{id=3}}

control bg play
control 1 play
control 2 play
control 3 play
control 4 play

@elirannat
Copy link

Try this as example, before you start, you need an image with 1920x1080 size in pixels. Place it in "C:\Temp", name it bg.jpg Hope it will help you!

new bg broadcast enabled setup bg input "C:\Temp\bg.jpg" setup bg option image-duration=-1 setup bg output #transcode{sfilter=mosaic{width=1920,height=1080,cols=2,rows=2,position=1,order="1,2,3,4",keep-aspect-ratio=enabled,keep-picture=1,mosaic-align=0},vcodec=mp4v,vb=0,fps=0}:duplicate{dst=display}

new 1 broadcast enabled loop setup 1 input "http://streams.videolan.org/samples/MPEG-4/CDR-Dinner_LAN_800k.mp4" setup 1 option dshow-size="640x480" setup 1 output #duplicate{dst=mosaic-bridge{id=1,width=960,height=540},select=video,dst=bridge-out{id=0}}

new 2 broadcast enabled setup 2 input "http://streams.videolan.org/samples/MPEG-4/MPEGSolution_jurassic.mp4" setup 2 option dshow-size="640x480" setup 2 output #duplicate{dst=mosaic-bridge{id=2,width=960,height=540},select=video,dst=bridge-out{id=1}}

new 3 broadcast enabled loop setup 3 input "http://streams.videolan.org/samples/MPEG-4/CDR-Dinner_LAN_800k.mp4" setup 3 option dshow-size="640x480" setup 3 output #duplicate{dst=mosaic-bridge{id=3,width=960,height=540},select=video,dst=bridge-out{id=2}}

new 4 broadcast enabled setup 4 input "http://streams.videolan.org/samples/MPEG-4/MPEGSolution_jurassic.mp4" setup 4 option dshow-size="640x480" setup 4 output #duplicate{dst=mosaic-bridge{id=4,width=960,height=540},select=video,dst=bridge-out{id=3}}

control bg play control 1 play control 2 play control 3 play control 4 play

Still not working to me Nicolay.
Please advice..
I can provide you remote access to check it.

Thank you & best regards,

@elirannat
Copy link

@elirannat do u read the comment @noparking247 ? Have you tried?

Yes I read it.
Not works.

@noparking247
Copy link

@elirannat do u read the comment @noparking247 ? Have you tried?

Yes I read it. Not works.

That's not overly informative. What doesn't work? Do the feeds work in VLC to begin with?

The streams you referenced appear to just contain audio... so... I'm not sure what you're expecting.

@F-AlFaris
Copy link

@Vankalif @noparking247 Firstly, thank you both for sharing your VLM files - they've been very useful for me to get my video streams operational. However, I'm experiencing a choppy and jittery video stream in mosaic.

I am currently running 14 cameras, each with the following specifications: 1440x1620 resolution, H265 encoding, 10 FPS, 1 sec Frame Interval, and 1024 Bitrate.

The VLC machine is a 1440p with hardware decoding enabled (Direct3D11 Video Acceleration) and running with an RTX 3090.

Although I can open all streams individually, they become choppy and jittery when combined in a mosaic. I suspect this issue may be related to the encoding options in the VLM file. Right now, the VLM file is set to mp4v for the encoding while my IP cameras encode in h265. I tried to change the vcodec transcoding settings to vcodec=h264, vcodec=h265, and vcodec=hevc in the VLM file, but the video just won't start without the vcodec=mp4v.

Would greatly appreciate suggestions or feedback on this. Is there a specific encoding option that I should use for h265 encoded streams or could there be another potential solution that I may be overlooking?

Here is the VLM configuration that I have been using:

# Runs on windows by command -> vlc --vlm-conf path_to_file.vlm

# Background options
new   bg broadcast enabled
# bg just plain black background jpg image
setup bg input     ""C:\Users\XXX\Downloads\bg.jpg""
setup bg option image-duration=-1
setup bg output #transcode{sfilter=mosaic{width=2560,height=1440,cols=4,rows=4,position=1,order="1,2,3,4,5,6,7,8,9,10,11,12,13,14",keep-aspect-ratio=enabled,keep-picture=1,mosaic-align=0},vcodec=mp4v,vb=2000,fps=10}:duplicate{dst=display}

# Input options
new   1 broadcast enabled
#RTSP string for cameras
setup 1 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=1&subtype=0"
setup 1 output #duplicate{dst=mosaic-bridge{id=1,width=640,height=340},select=video,dst=bridge-out{id=0}}

new   2 broadcast enabled
setup 2 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=2&subtype=0"
setup 2 output #duplicate{dst=mosaic-bridge{id=2,width=640,height=340},select=video,dst=bridge-out{id=1}}

new   3 broadcast enabled
setup 3 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=3&subtype=0"
setup 3 output #duplicate{dst=mosaic-bridge{id=3,width=640,height=340},select=video,dst=bridge-out{id=2}}

new   4 broadcast enabled
setup 4 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=4&subtype=0"
setup 4 output #duplicate{dst=mosaic-bridge{id=4,width=640,height=340},select=video,dst=bridge-out{id=3}}

new   5 broadcast enabled
setup 5 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=5&subtype=0"
setup 5 output #duplicate{dst=mosaic-bridge{id=5,width=640,height=340},select=video,dst=bridge-out{id=4}}

new   6 broadcast enabled
setup 6 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=6&subtype=0"
setup 6 output #duplicate{dst=mosaic-bridge{id=6,width=640,height=340},select=video,dst=bridge-out{id=5}}

new   7 broadcast enabled
setup 7 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=7&subtype=0"
setup 7 output #duplicate{dst=mosaic-bridge{id=7,width=640,height=340},select=video,dst=bridge-out{id=6}}

new   8 broadcast enabled
setup 8 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=8&subtype=0"
setup 8 output #duplicate{dst=mosaic-bridge{id=8,width=640,height=340},select=video,dst=bridge-out{id=7}}

new   9 broadcast enabled
setup 9 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=9&subtype=0"
setup 9 output #duplicate{dst=mosaic-bridge{id=9,width=640,height=340},select=video,dst=bridge-out{id=8}}

new   10 broadcast enabled
setup 10 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=10&subtype=0"
setup 10 output #duplicate{dst=mosaic-bridge{id=10,width=640,height=340},select=video,dst=bridge-out{id=9}}

new   11 broadcast enabled
setup 11 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=11&subtype=0"
setup 11 output #duplicate{dst=mosaic-bridge{id=11,width=640,height=340},select=video,dst=bridge-out{id=10}}

new   12 broadcast enabled
setup 12 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=12&subtype=0"
setup 12 output #duplicate{dst=mosaic-bridge{id=12,width=640,height=340},select=video,dst=bridge-out{id=11}}

new   13 broadcast enabled
setup 13 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=13&subtype=0"
setup 13 output #duplicate{dst=mosaic-bridge{id=13,width=640,height=340},select=video,dst=bridge-out{id=12}}

new   14 broadcast enabled
setup 14 input "rtsp://XXXX:XXXX@ip:554/cam/realmonitor?channel=14&subtype=0"
setup 14 output #duplicate{dst=mosaic-bridge{id=14,width=640,height=340},select=video,dst=bridge-out{id=13}}

# Launch everything
control bg play
control 1 play
control 2 play
control 3 play
control 4 play
control 5 play
control 6 play
control 7 play
control 8 play
control 9 play
control 10 play
control 11 play
control 12 play
control 13 play
control 14 play

@muhanadali100
Copy link

Please anyone can help me with 16 Camera, I need a script with 1920 x 1080 and 16 Camera

@noparking247
Copy link

@F-AlFaris that doesn't really surprise me. I had similar results when I was using the main stream of my cameras (with similar configurations). I ended up switching it to the substream feed, which looks fine when it's small anyway. In my case with Hikvision cameras, this was done by appending the "/Channels/101" to the path -- each vendor will be different.

I also noticed that VLC has a memory leak when using mosaic. If I used the main feed, I'd be lucky to have it working for more than an hour. With the substream, it works for ~24 hours. I ended up writing a small script to run every 5 minutes to check to see if "vlc.exe" is consuming more than 2GB of RAM -- if it is, forcefully close it, and relaunch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment