It's been a month since I started looking at streaming tv b/w WMC PC's at first I was interested in it conceptually, but the more I dug into it the more it seemed like something that was very realistic given the tools / code available.
I ended up discarding both approaches discussed in the earlier post. I couldn't get WMF to work because the audio would get all screwed up when streamed, and the third-party filter approach was way to costly. Ultimately it didn't matter because I was able to locate a free (DSNetwork) mpeg multicast receiver filter in an earlier version of the DShow SDK, and after brushing off the [underdeveloped] C++ skills, got it to compile. Using VLC (thanks Jelwood) as the server working in UDP multicast mode, it's possible to connect to the stream and wire up a filter graph that dumps the mpeg data back into a local dvr-ms file.
Right now VLC has to be initiated manually, but there is a managed wrapper which uses the C style API that VLC provides to P/Invoke it's functionality so automation shouldn't be a problem. The eventual architecture will look something like this:
Where a service running on PC1 provides guide data to a service on PC2, which exposes the data to an addin running in WMC. A show is selected, and a request is sent back to PC1. PC1 starts recording and uses VLC to stream the file back to PC2 which creates a dvr-ms file with the same name and meta data as the original, then WMC can playback the file; taking advantage of the functionality provided by the SBE (fast forward, rewind, pause, etc). While this diagram only shows a two machine client / server architecture I plan to try to build it more in a peer based model; or at the very least where clients can support multiple servers.
The problem that I'm having right now is that the StreamBufferSink (DShow filter used to dump the mpeg streams into the dvr-ms container) isn't allowing access to the dvr-ms file while it's being written. Once the recording stops it plays back just fine. What's really confusing to me is that the SBE was designed with this usage scenario (reading while writing) in mind, and is specifically documented as supported functionality. MS and Tim Moore (MyTray / FireSTB author) got it working so I must be missing something.
There is still a ton of work to do, and a new language (MCML) to learn, so no time lines yet :)