D-Link

From ZoneMinder Wiki
Revision as of 16:31, 8 December 2023 by Opoplawski (talk | contribs) (DCS-4603)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

DLink is a supplier of several IP Cameras. Not all work with ZoneMinder. DCS-1000(W) and DCS-900 - plus other D-Link IP models (This have been hit and miss, not all work with ZM. A partial list of unsupported cameras are inside).

DCS-900

DCS900.png

There are 2 versions of this camera. The "A" version is reported to work extremely well with ZoneMinder. The "B" version also works, but has a been reported to have lesser performance. I have been able to get upto 8 fps with my revision "B" camera.

Source Type: Remote 
Remote Host Name: IP Address of Camera
Remote Host Port: 80 (Default) 
Remote Host Path: /VIDEO.CGI or /IMAGE.JPEG 
(/VIDEO.CGI is the MJpeg stream, and gets higher FPS in my testing)

With version A2

Source Type: Remote 
Remote Host Name: user:pass@<IP_Address_of_Camera> (user:pass@192.168.0.5)
Remote Host Port: 80 (Default) 
Remote Host Path: VIDEO.CGI 

With the latest versions of the DCS-900 "B" there is an additional step needed in the "Options > Network" section of ZoneMinder.

ZM_NETCAM_REGEXPS Value = (no-checkmark)

DCS-910 / 920

DCS-910.jpg


Source Type: Remote 
Remote Host Name: user:pass@<IP Address of Camera>
Remote Host Port: 80 (Default) 
Remote Host Path: /VIDEO.CGI? for stream

There is the same aditional step as in DCS-900B, in the "Options > Network" section of ZoneMinder.

ZM_NETCAM_REGEXPS Value = (no-checkmark)


DCS-930L / 932L

DCS-930L.jpg


Source Type: Remote 
Remote Host Name: user:pass@<IP Address of Camera>
Remote Host Port: 80 (Default) 
Remote Host Path: /image/jpeg.cgi
Capture Width (pixels): 640  
Capture Height (pixels): 480

Additionally MJPEG stream avaliable at: /MJPEG.CGI but next step is required for it, in the "Options > Network" section of ZoneMinder.

ZM_NETCAM_REGEXPS Value = (no-checkmark)

Note that this is not needed in recent ZM (>1.29).

The "Snapshot URL Authentication" must be disabled on the camera. Maintenance > Server Settings > Set Snapshot URL Authentication to "Disabled".

For the DCS-932L also works:

Remote Host Path: /video.cgi

If you want to limit the FPS just as it is set in the camera's setup -> video -> FPS, then you will need to use the video stream (video.cgi) and not the snapshot stream (/image/jpeg.cgi).

Using /mjpeg.cgi gives a lot of erros in the log files:

ERR [Invalid JPEG file structure: two SOI markers]
ERR [Unable to decode jpeg]

I've noticed that the frame rate viewing the /video.cgi or /mjpeg.cgi feed directly in the browser is faster than what ZM records, however these cameras record at about 5fps, which is OK.

DCS-931L / DCS-933L / DCS-934L

DCS931L.png

This camera can do up to 30 fps with MJPEG. (Firmware 1.01, zoneminder 1.25.0)

To set video properties on the camera, click on setup, then video. Here you can adjust settings for mjpeg quality and the frame rate. You might also want to set the default (browser) view mode to image, so that you'll get something when logging into the camera if you don't have java installed.

MJPEG settings for zoneminder:

Source Type: Remote
Remote Protocol:  HTTP
Remote Method:  Simple
Remote Host Name:  user:pass@IP Address of Camera
Remote Host Port:  80 (Default)
Remote Host Path:  /video.cgi
Capture width:  640
Capture Height:  480

Notes:

  1. An unknown-quality H.264 stream available at http://user:pass@ip.of.camera/h264.flv. Haven't worked out how to get it working in zoneminder yet.
  2. Audio is available from http://user:pass@ip.of.camera/dgaudio.cgi .

DCS-942L

Image capture works the same as 932L and /image/jpeg.cgi over HTTP. RTSP stream works with MPEG streams (/3gpp by default) RTSP H.264 streaming works if set as follows:

Source Type: ffmpeg
Source Path: rtsp://<camera ip>:554/play2.sdp

To stream the motion JPEG in 640x480:

Source Type: remote 
Protocol:HTTP 
Remote Host Name: <username>:<password>@<camera ip>
Remote Host Path: /video/mjpg.cgi?profileid=1

For 320x240 motion JPEG, substitute profileid=3. The profile IDs are configurable under the "Audio and Video" setup screen in the camera's built-in web server.

DCS-1100

Dcs-1100.jpg

Source Type: Remote 
Remote Protocol: HTTP
Remote Method: Simple
Remote Host Name: user:pass@<IP Address of Camera>
Remote Host Port: 80 (Default) 
Remote Host Path: /video/mjpg.cgi?profileid=3

Where Profileid is setup in the camara's setup interface.


DCS-2100+, DCS-2100G

DSC2100plus.jpgDCS2100g.jpg

Source Type: Remote
Remote Host Name: IP Address of Camera
Remote Host Port: 80 (Default)
Remote Host Path: /cgi-bin/video.jpg

Note: you must change Network -> ZM_HTTP_VERSION option to 1.0 for this camera to work!


DCS-2120

DCS2100g.jpg

Source Type: Remote
Remote Host Name: IP Address of Camera
Remote Host Port: 80 (Default)
Remote Host Path: /cgi-bin/video.jpg


DCS-2121

JPG Stills:
Source Type: Remote
Remote Host Name: username:password@cam_ip
Remote Host Port: 80 (Default)
Remote Host Path: /image/jpeg.cgi?profileid=1
MJPEG:
Source Type: Remote
Remote Host Name: username:password@cam_ip
Remote Host Port: 80 (Default)
Remote Host Path: /video/mjpg.cgi


DCS-2130

Source Type: Remote
Remote Host Name: username:password@cam_ip
Remote Host Port: 80 (Default)
Remote Host Path: /image/jpeg.cgi?profileid=1

DCS-2210 and DCS-2230

MPEG4:

(Change in video settings of the camera the mode to MPEG4 first)
Source Type: Remote
Remote Protocol: RTSP
Remote Method: RTP/Unicast
Remote Host Port: 554
Remote Host Name: <IP Address of Camera>
Remote Host Path: /live1.sdp

H.264:

Source Type: Remote
Remote Protocol: Ffmpeg
Remote Method: RTP/RTSP
Source Path: rtsp://<IP Address of Camera>:554/live1.sdp

MJPEG:

(Change in video settings of the camera the mode to JPEG first)
Source Type: Remote
Remote Protocol: HTTP
Remote Host Port: 80
Remote Host Name: user:pass@<IP Address of Camera>
Remote Host Path: /video1.mjpg

Notes:

  • These cameras can transmit multiple streams ("profiles") simultaneously, but they do not produce their advertised frame rates with some combinations, particularly if using MJPEG in certain resolutions. Using MJPEG in resolutions other than 800x450 or 640x360 will cause large reduction in video frame rate on all the other profiles. A configuration known to produce 1920x1080 @ 17fps is:
    Number of profiles: 2
    Aspect ratio: 16:9
    Profile 1: 1920 x 1080
    Profile 1 frame rate: 15
    Profile 1 encoding: H.264
    Profile 2: 640x360
    Profile 2 frame rate: 7
    Profile 2 encoding: MJPEG
    
  • Profile 1 MUST be set to 1080p. Otherwise the image appears "zoomed in." This is a known firmware bug with the DCS-2230.

DCS-2330

JPG Stills:
Source Type: Remote
Remote Host Name: username:password@cam_ip
Remote Host Port: 80 (Default)
Remote Host Path: /image/jpeg.cgi?profileid=1
MJPEG:
Source Type: Remote
Remote Host Name: username:password@cam_ip
Remote Host Port: 80 (Default)
Remote Host Path: /video2.mjpg

DCS-3220

DCS-3220.jpg

Source Type: Remote
Remote Method: Simple (using ZM 1.28.1 and latest FW, "Regexp" seems to fix broken frames and "Unable to decode" messages in log)
Remote Host Name: IP Address of Camera
Remote Host Port: 80 (Default)
Remote Host Path: /cgi-bin/video.jpg

DCS-3410

DSC-3410.jpg

HTTP
Source Type: Remote
Remote Host Name: user:pass@<IP Address of Camera>
Remote Host Port: 80 (Default)
Remote Host Path: /video/mjpg.cgi (for mjpeg stream)
RTSP
Source Type: ffmpeg
Source Path: rtsp://user:pass@<IP Address of Camera>/play1.sdp (or play2.sdp)

ZoneMinder 1.24.2 (Haven't tried earlier versions)

Tried it with just admin:@<IP Address of Camera> without password before setting camera password and it worked. Created an account with a password, tried that and it also worked.

May need /video/mjpg.cgi?profileid=3 caught that from tcpdump, suspect the numbers are resolution but don't seem to have any affect.

Seems like it's operating in factory default Profile 3, 704x480 10fps jpeg. Haven't found a way to change the Profile used yet. Could only pull about 22fps when camera was set to 30fps (mjpeg) so opted to set camera to 15fps.

RTSP works with ffmpeg as above pulling 30fps when camera set to 30fps for that Profile but could not get it working with Source Type Remote and Remote Protocol RTSP.

Looks like Audio is at /audio/ACAS.cgi but haven't done anything with that.

DCS-2530L

RTSP
Source Type: ffmpeg
Source Path: rtsp://user:pass@<IP Address of Camera>/live1.sdp (or live2.sdp)


DCS-3710

HTTP
Source Type: Remote
Remote Host Name: user:pass@<IP Address of Camera>
Remote Host Port: 80 (Default)
Remote Host Path: /video2.mjpg (for stream 2)

ZoneMinder 1.24.3 (Haven't tried earlier versions)

Video profile mode must be set to JPEG.


DCS-4602EV

DCS4602EV

Source Type: Remote
Remote Protocol:  HTTP
Remote Method:  Simple
Remote Host Name: user:pass@<IP Address of Camera>
Remote Host Port: 80 (Default)
Remote Host Path: /video1.mjpg
Capture width:  1920 
Capture Height:  1080  

ZoneMinder 1.29.0 (Haven't tried earlier versions)

DCS-4603

DCS4603

Looked at the HTML source for http://<IP Address of Camera>/index.html and vars.js to determine URLs. There should also be a live2.sdp feed as the video setup page has two video profiles.


Source Type: Ffmpeg
Source path: rtsp://user:pass@<IP Address of Camera>/live1.sdp
Source Method: TCP
Target colorspace: 24 bit colour
Capture Resolution: 1440x1080
Orientation: Normal
Deinterlacing: Disabled

Also tried path of http:://user:pass@<IP Address of Camera>/video1.mjpeg but it seemed to be limited to 1 frame per second.

ZoneMinder 1.36.33 (Haven't tried earlier versions)

DCS-5010L, DCS-5020L and DCS-5025L

DCS5010L

DCS5020L


The features and firmware of both of these models are identical excepting that the DCS-5020L has a wifi repeater built in, which does not affect the video capabilities of the camera. The DCS-5025L has 720p resolution. These cameras can do up to 30 fps with MJPEG. (Firmware 1.01, zoneminder 1.25.0)

To set video properties on the camera, click on setup, then video. Here you can adjust settings for mjpeg quality and the frame rate. You might also want to set the default (browser) view mode to image, so that you'll get something when logging into the camera if you don't have java installed.

MJPEG settings for zoneminder:

Source Type: Remote
Remote Protocol:  HTTP
Remote Method:  Simple
Remote Host Name:  user:pass@IP Address of Camera
Remote Host Port:  80 (Default)
Remote Host Path:  /video.cgi
Capture width:  640 (1280 for DCS-5025)
Capture Height:  480 (720 for DCS-5025)

PTZ Controls can be used from within ZoneMinder using the control script linked below. Copy the script contents into a file alongside of the other ZM Control Scripts.

D-Link DCS-5020L Control Script

PTZ Settings:

Main: Type: Remote, Protocol: DCS5020L, Name: DCS5020L, Can Wake, Can Sleep, Can Reset
Move: Can Move, Can Move Diagonally, Can Move Mapped, Can Move Relative
Pan: Can Pan, Min Pan Step 1, Max Pan Step 30
Tilt: Can Tilt, Min Tilt Step 1, Max Pan Step 30
Presets: Has Presets, Number: 24, Has Home Preset

Note: Wake turns IR on, Sleep turns IR off, Reset turns IR to auto.

Settings for Control Tab:

Controllable, Control Type: DCS5020L, Control address: user:pass@ipaddress

Notes:

  1. For PTZ control, the user/pass combination must be an administrator on the camera. A regular view-only user will not work.
  2. An unknown-quality H.264 stream available at http://user:pass@ip.of.camera/dgh264.raw . Haven't worked out how to get it working in zoneminder yet.
  3. Audio is available from http://user:pass@ip.of.camera/dgaudio.cgi while the accompanying video is at http://user:pass@ip.of.camera/dgvideo.cgi
  4. The DCS-5020L script was based on the Trendnet TV-IP400W control script, available at http://www.sfpeter.com/2008/07/new-trendnet-tv-ip400w-controller-for-zoneminder-123x/ . "use ZoneMinder::Debug qw(:all);" was replaced with "use ZoneMinder::Logger qw(:all);" for zoneminder 1.25 compatibility.

DCS-5222L

DSC-5222L.jpg

HTTP
Source Type: Remote
Remote Host Name: user:pass@<IP Address of Camera>
Remote Host Port: 80 (Default)
Remote Host Path: /video/mjpg.cgi (for mjpeg stream)
Remote Host Path: /image/jpeg.cgi (for jpeg stream)

The jpeg and the mjpeg both output at the resolution specified for "video profile 3"

RTSP
Source Type: ffmpeg
Source Path: rtsp://user:pass@<IP Address of Camera>/play1.sdp (or play2.sdp)

May need /video/mjpg.cgi?profileid=3 might catch other profiles by using this URL

Looks like Audio is at /audio/ACAS.cgi but haven't done anything with that.

DCS-5300G

DCS-5300G.jpg

Source Type: Remote
Remote Host Name: IP Address of Camera
Remote Host Port: 80 (Default)
Remote Host Path: /cgi-bin/video.jpg

Note: you must change Network -> ZM_HTTP_VERSION option to 1.0 for this camera to work!

DCS-6010L

DCS-6010.jpeg

HTTP
Source Type: Remote
Remote Host Name: user:pass@<IP Address of Camera>
Remote Host Port: 80 (Default)
Remote Host Path: /video/mjpg.cgi (for mjpeg stream)
Remote Host Path: /image/jpeg.cgi (for jpeg stream)

The jpeg and the mjpeg both output at the resolution specified for "video profile 3"

May need /video/mjpg.cgi?profileid=3 might catch other profiles by using this URL

DCS-6111

DCS6111.jpg

Source Type: Remote
Remote Protocol: HTTP
Remote Host Port: 80 (Default)
Remote Host Name: user:pass@<IP Address of Camera>
Remote Host Path: (stream 1): /video.mjpg 
Remote Host Path: (stream 2): /video2.mjpg


DCS-1000

DCS-1000 left.png

Source Type: Remote
Remote Protocol: HTTP
Remote Host Port: 80 (Default)
Remote Host Name: user:pass@<IP Address of Camera>
Remote Host Path: VIDEO.CGI (You must upgrade the firmware on the camera to 1.30 for this to work. Try this site for the firmware and the ipview software to install the firmware.)

DCS-6620G

DCS-6620G.jpg

Source type: Remote
Remote Host Name: IP Address of Camera
Remote Host Port: 80 (Default) or the non-default port assigned to the camera in your network
Remote host Path: /cgi-bin/video.jpg
Control script: download at www.condrau.com/download/zmcontrol-dcs6620g.pl

The control script supports all controls for this camera, but it can be used for other D-Link and Vivotek cameras as well. I verified it with DCS-6620 and Vivotek's PT7137, as the software is compatible with these 2 cameras. It should also work with other models such as the DCS-5300.

Note that I implemented a real name preset functionality, where you can set any desired name as the preset name. It is basically possible to set the presets through ZM's interface, but I prefer to do it through the cam's firmware interface, which is the default setting in the script. By changing one constant definition, you may change this behaviour. In any case still activate the "can set presets" option in ZM, after which you can assign names to each preset.

I would further recommend to update the cam's firmware. I found smoother operation in ZM after having updated the firmware, and also with the latest firmware you can set ZM_HTTP_VERSION option to 1.1. [bco]

The camera will work with Zoneminder 1.25 with some minor modifications to the template PanasonicIp.pm script. Copy file and rename to DCS6620. Changed commands are listed below. The the only tricky part was zoom. Changes nearly identically for (PZ8111) which is almost the same camera. Note difference /cgi-bin/$cmd instead of /cgi-bin/camctrl/$cmd in. For some reason the zoom ui is calling Tele and Wide functions instead of zoomConTele and zoomConWide. Use the options below Monitor

  • Control Type = DCS6620
  • Control Device = blank
  • Control Address = <ip address of your camera>

Control Capabilities

  • Type = Remote
  • Protocol = DCS6620
  • Can Move = Check
  • Can Move Continuous = Check
  • Can Pan = Check
  • Can Tilt = Check
  • Can Zoom = Check


 
package ZoneMinder::Control::DCS6620;
sub sendCmd
{
    my $self = shift;
    my $cmd = shift;

    my $result = undef;

    printMsg( $cmd, "Tx" );

    my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/cgi-bin/$cmd" );
    my $res = $self->{ua}->request($req);

    if ( $res->is_success )
    {
        $result = !undef;
    }
    else
    {
        Error( "Error check failed: '".$res->status_line()."'" );
    }

    return( $result );
}


sub moveConUp
{
    my $self = shift;
    Debug( "Move Up" );
    my $cmd = "camctrl.cgi?move=up";
    $self->sendCmd( $cmd );
}

sub moveConDown
{
    my $self = shift;
    Debug( "Move Down" );
    my $cmd = "camctrl.cgi?move=down";
    $self->sendCmd( $cmd );
}

sub moveConLeft
{
    my $self = shift;
    Debug( "Move Left" );
    my $cmd = "camctrl.cgi?move=left";
    $self->sendCmd( $cmd );
}

sub moveConRight
{
    my $self = shift;
    Debug( "Move Right" );
    my $cmd = "camctrl.cgi?move=right";
    $self->sendCmd( $cmd );
}


sub Tele
{
    my $self = shift;
    #my $params = shift;
    #my $step = $self->getParam( $params, 'step' );
    Debug( "Zoom Tele" );
    my $cmd = "camctrl.cgi?zoom=tele";
    $self->sendCmd( $cmd );
}

sub Wide
{
    my $self = shift;
    #my $params = shift;
    #my $step = $self->getParam( $params, 'step' );
    Debug( "Zoom Wide" );
    my $cmd = "camctrl.cgi?zoom=wide";
    $self->sendCmd( $cmd );
}


DCS-7010L

Change in video settings of the camera the mode to MPEG4 and restart the device.

Source Type: Remote
Remote Protocol: RTSP
Remote Method: RTP/Unicast
Remote Host Port: 554
Remote Host Name: <IP Address of Camera> (RTSP authentication didn't work with this method)
Remote Host Path: /live1.sdp
Source Type: Remote
Remote Protocol: Ffmpeg
Remote Host Path: rtsp://<IP Address of Camera>:554/live1.sdp
Remote Host Path: rtsp://user:pass@<IP Address of Camera>:554/live1.sdp (when RTSP authentication is enabled)
Source Type: Remote
Remote Protocol: HTTP
Remote Host Port: 80
Remote Host Name: user:pass@<IP Address of Camera>
Remote Host Path: /video1.mjpg

DCS-7110

Device's web server gives example code for various setups. Verified 2012-12-08.

* http://<cam-ip>:80/cgi-bin/viewer/video.jpg?streamid=0&quality=5 // single-shot jpg image
* rtsp://<cam-ip>:554/live.sdp // feeds VLC

DCS-8000LH

From the forums:

So I found a way to get mjpeg from this camera (720p @ ~8fps)

This camera responds to many of the CGI calls from the Network IP Cam API (NIPCA) Some of them here: http://web.archive.org/web/20160910070444/http://gurau-audibert.hd.free.fr:80/josdblog/wp-content/uploads/2013/09/CGI_2121.pdf

I had to configure one of the stream profiles to output MJPEG rather than h.264 (until I can find a way to get ZM to read H.264 over port 80): Send a request to the following URL:

<IP ADDRESS>/config/video.cgi?profileid=1&codec=MJPEG

you'll need to authenticate with the username "admin" and the password you set when configuring the cam. You can either do this in a web browser, or in CURL or WGET. You should also be able to do it in invoke-webrequest, but why?

As it says on the box, this will set the codec for profile 1 to MJPEG.

You can then immediately retrieve an mjpeg stream from:

<IP ADDRESS>/video/mjpg.cgi

Configure Zoneminder with:

Source Type: remote
Remote Protocol: HTTP
Remote Method: Simple
Remote Hostname: username:password@<IP ADDRESS>
Remote Host Port: 80
Remote Host Path: /video/mjpg.cgi
Width: 1280
Height: 720

Default username is "admin" and the password is the PW that you set

Forum post

CAUTION: user reported potential issues with newer firmware. Read post.

For newer firmware use these settings:

Source Type: Ffmpeg
Source Path: http://username:password@<IP Address>/video/flv.cgi
Remote Method: TCP
Capture Width: 1280
Capture Height: 720

Incompatible Hardware

I know that the DCS-1110 is not compattible with ZoneMinder, as it requires ActiveX to recive the MJpeg stream.

If you know of other DLink cameras that don't work, please add them to the list!

DCS-950 not compatible. Mpeg stream. Authentication is OCX application based, not web standard authentication. JPG file generated at random url, not predictable.