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
@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