See my DASH-IF presentation from October, 2014:
https://s3.amazonaws.com/misc.meltymedia/dash-if-reveal/index.html#/

1. encode multiple bitrates with keyframe alignment:
   ffmpeg -i ~/Movies/5D2_Portrait.MOV -s 1280x720 -c:v libx264 -b:v 1450k -bf 2 \
     -g 90 -sc_threshold 0 -c:a aac -strict experimental -b:a 96k -ar 32000 out.mp4

   My input was 30 fps = 3000 ms. If it were 29.97, then a GOP size of 90 frames will yield a base segment
   size of 3003 milliseconds. You can make the segment size some multiple of this, e.g.: 6006, 9009, 12012.

   You could encode to other resolutions and bitrates here, and if you do, you might want to skip the audio
   encoding for them. To do that replace "-c:a aac -strict experimental -b:a 96k -ar 32000" with "-an".

2. verify keyframes:
   ffprobe -show_frames -print_format compact out.mp4 | less
   => too difficult to read

   ffprobe -show_frames -print_format compact out.mp4 |
     awk -F '|' '($2 == "media_type=video") {print i++, $3}' | less
   => Now we can just see video key frame indication - better, but let's filter it more.

   ffprobe -show_frames -print_format compact out.mp4 |
     awk -F '|' '($2 == "media_type=video") {if ($3 == "key_frame=1") print i, $3; ++i}'
   => Now we can just see frame# of frames that are a key frame and verify they are multiples of 90.
      At this point, we could extend the awk with a test on i modulo 90 and exit with result
      code 1 to signal failure in an automated script.

3. segment and generate mpd:
   mp4box -dash 3000 -rap -profile dashavc264:onDemand out.mp4#audio out.mp4#video
   => generates out_dash.mp4 and out_track?_dashinit.mp4
   If you have multiple files at different bitrates, just add them to the end of the command
   line, but there will be more _track_dashinit.mp4 files you need to ensure you upload.  

4. test locally:
   Osmo4 out_dash.mpd

5. view mp4 dump:
   mp4box -diso -stdb out_track1_dashinit.mp4 2>&1 | xmllint -format -
   or, mp4dump out_track1_dashinit.mp4

6. upload to web server:
   s3cmd put --acl-public out_dash.mpd out_track?_dashinit.mp4 s3://${S3BUCKET}/dash/

7. validate mpd:
   http://dashif.org/conformance.html
   copy-and-paste: http://${S3BUCKET}.s3.amazonaws.com/dash/out_dash.mpd

8. play with dashif.org test player:
   http://dashif.org/reference/players/javascript/1.0.0/index.html?mpd=http://${S3BUCKET}.s3.amazonaws.com/dash/out_dash.mpd

9. embed in own web page using video.js and dash.js:
   s3cmd put --acl-public --recursive videojs-dash/* s3://${S3BUCKET}/videojs/
   open http://${S3BUCKET}.s3.amazonaws.com/dash/videojs.html