Since you need to support a variety of codecs, I recommend libVLC. It's what powers VLC, and can handle just about any codec and playback option you can imagine. There are a few .NET wrappers available:
You could also ditch the fancy wrapper, and call functions via straight-up imports. If you don't need all the abstraction, this may be the way to go.
See these related StackOverflow posts:
I recently had a project where I simply executed VLC in the background, receiving it's output via STDIO. For what I was going, this was easier, as my command to VLC was fire-and-forget.