Answered by:

Issues building a streaming filtergraph for wmv in Vista

Question

I've been mulling through this topic trying to get a grasp of the situation for a few days now and I think I know the problem. I just don't know what I can do about it at this point. First, some background:

For work I built a system to play streaming windows media files inside of the 3d environment. This works great in versions of Windows up to XP, but since the release of Vista it has never worked. While the path involved in loading, organizing and displaying in that environment was pretty long, none of that seems to be having issues. The root cause of the problems I've found is Vista's inability to play wma/wmv/asf files that are streamed from the web, at least running through the filtergraph path. Unfortunately I can't find any streaming asf files floating around on the web, but I'm quite certain that it isn't the specific file.

I have two laptops on my desk right now, one running XP and another running Vista. Both have GraphEdit. When I open a mms: url on the Vista machine it builds a graph with ASF ICM Handler and ASF ACM Handler which are both needed to connect the loader/parser (http://msdn2.microsoft.com/en-us/library/ms788131.aspx) when the file is streaming. When the file is local it doesn't need these two filters. Now on Vista the same mms: refuses to load, and the two ASF handlers are not available filters for the graph. Looking on the XP machine these filters are stored in dxmasf.dll, which is shrunk to 4k on the Vista machine. It appears to me that these filters were removed from Vista, and seem to be core enough technology that I can't unassociate the dlls to try substituting older versions.

So now Windows Media content is handled in a filtergraph differently than other content. While most other files are loaded through File Source (Async.) or (URL) and then parsed by a seperate filter, the default Windows Media loader is also the parser. I read on these boards that GDCL WMV/WMA Parser is a useful filter to try, so I grabbed it and it does let me load local WMV files using File Source (Async.). However, it's unable to handle content from File Source (URL). How I tested this was I went into the registry and changed the default filter for MMS files and used Render URL in GraphEdit, which then failed. Changing the local wmv association, however, succeeded.

So the real problem here is I'm unable to stream Windows Media files without using ASF ACM Handler and ASF ICM Handler in the filtergraph. Now I've heard a report I've been unable to look into (but that's my next step) that installing quicktime for windows and installing the Windows Media for quicktime patch will get around this, but I haven't been able to open the .dmg file without a mac handy. I'm curious if either new filters were written or the old filters were added back through this.

I don't think I'm the only person experiencing this problem, I believe

Answers

You can modify the GDCL parser (which is available in source form) to enable support for streaming. Instead of an input pin, implement IFileSourceFilter. In the Load method, use the code from CompleteConnect but instead of OpenStream, just call Open.

All replies

You can modify the GDCL parser (which is available in source form) to enable support for streaming. Instead of an input pin, implement IFileSourceFilter. In the Load method, use the code from CompleteConnect but instead of OpenStream, just call Open.

I too have the same problem. I tried to modify the GDCL parser, but I don't know how to implement the IFileSourceFilter.

I tried to implement this CompleConnect method, but an error occurs saying "Open is not a member of IWMReaderAdvanced2". How to implent this IFileSourceFilter? Please provide some sample code. Please help.