Did you try using the "playing" event instead of "canplay".  The playing event is paired with the waiting event in the spec, and seems perfect for this. But when I tried it, I was not getting "playing" until the entire video was buffered.

I fear that the "canplay" event will be fired too soon, before enough data is available and that after playing a few frames the spinner will appear again.