I went to D-Link and study specification. After that I downgrade camera to DCS-950G_ A1_Firmware_v1.00 because the camera with this old firmware does not need admin authentication for streaming. It's so convenient. I do not have to send with each request the password.
I wanted to write a Groovy script, but I wanted to control the camera from the router, which I do not have Java. That's why I chose Bash.
After hours of testing, I had written a working script:
#!/bin/bash
#
WEBCAM_IP="192.168.0.20"
#######################################################################
#init
{ exec 3<>/dev/tcp/${WEBCAM_IP}/5000; echo -n "ARAGORN_INIT" >&3; cat <&3> /dev/null; } &
sleep 2
#start
exec 3<>/dev/tcp/${WEBCAM_IP}/5001
echo -n "ARAGORN_START#255055293901165#0#1#0" >&3
#data
while :
do
head -c 40 <&3 > header.hex
BYTES=( `hexdump -v -s 24 -n 4 -e ' 1/1 "%02X " ' header.hex` )
HEX="${BYTES[3]}${BYTES[2]}${BYTES[1]}${BYTES[0]}"
DATA_LENGTH=`echo "obase=10; ibase=16; ${HEX}" | bc`
head -v -c "${DATA_LENGTH}" <&3
done
With MPlayer I can play the stream directly from the camera. Mplayer takes around 5% CPU on a single camera.
./dcs-950G.bash | mplayer - -demuxer mpeg4es
With ffmpeg I got every second actual jpeg for Motion.