it depends when you load the stream and whether or not the API reports it as being "on" at that point. some networks include the pre/post in the mlb tv stream, others don't. it's all about when the API says the stream is "online" (and whether or not that includes the pre/post)...i have no other way of knowing if the stream is active other than trusting what the API tells me.
once you load it the first time in a client, it is cached for a certain amount of time...if the game hasn't started yet, you'll get the "off air" message and then it won't check again until 10 minutes before first pitch, to avoid hammering MLB servers repeatedly trying to load a stream that isn't online yet.
once you load a game while the stream is online, it's cached until the end of the game or for six hours, whichever comes first.
my guess here is that the stream came "online" according to the API in the time between when you loaded it in channels and when you loaded it in VLC. if you go to channels and try to load a game that isn't online yet, then a minute later open VLC (and in that minute that has passed the stream has now come online), you'd see the behavior you're seeing. channels isn't checking again to see if the stream is active because it has already cached that it's not active, so it won't check it again until 10 minutes before the scheduled first pitch. your VLC stream is a different client, so it has a different session and has cached that the stream is active, so you're seeing the pre-game there.