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