Yes I agree! I prefer this to be done on the VM templates too, to keep its implementation simpler. Here you go:
$video.getData() <-- is my FLV video
#set($vid=$video.getData())
#set($vid=$vid.replaceAll("\?","%3F"))
#set($vid=$vid.replaceAll("\&","%26"))
#set($vid=$vid.replaceAll("\=","%3D"))
Then my URL parameter on the player is this:
url=http://@portal_url@$vid
Then it magically worked.

Have you set your mime types on portal-ext.properties? If not yet, you should set flv as a video so it wouldn't be recognized as a document. Mine looks like this:
mime.types=\
application/x-srt srt,\
video/x-flv flv
mime.types.content.disposition.inline=srt
That's because I'm trying to use SRT files too for subtitles. Though the inline disposition statement doesn't seem to work. It is still being downloaded as an attachment.
Good luck!