Can’t get default values to work with custom shortcode

extract takes and associative array and explodes it out in variables that reflect the array key names. $atts['height'] would just be $height, in other words.

The relevant two lines of your code would become:

<param name="type" value="video/quicktime" height="'.$height.'" width="'.$width.'">
<embed src="'.$url.'" height="'.$height.'" width="'.$width.'" autoplay="false" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/">

If you did still want to use the indexing, make sure you surround array keys with quotes: $atts['height'] not $atts[height]. Replace extract:

$atts = shortcode_atts( array(
        'url' => '#',
        'width' => '480',
        'height' => '320'
    ), $atts )