Directshow Source Filter / Wrapper
Currently, directshow filters which play a file, local or remote (http) (formats avi, mpg, wmv, etc) all currently operate as the file is a complete file, and rightfully so. With that they are able to determine the size, the length of the video, etc.
What we are in need of, is a directshow filter (wrapper around others), with will allow for us to use a source which is a .TS file (MPEGTS) (already supported within directshow), but is growing (its an active file we are creating). We want this source filter to look like a FILE SOURCE to the system. Basically it will open the TS file, play in realtime out the pins - both the VIDEO and AUDIO. You will be wrapping around another directshow filter which already handles this kind of file.
You can use ffdshow filter for doing this, you just need to keep grabbing new data from the file, as it is increasing in size constantly, and outputting the TS DATA directly to the ffdshow (or other filter you choose), and exposing the output pins of that filter as your own. This will allow any other connecting renderer, or encoder to negotiate what it needs directly to the ffdshow filter.
Our filter will be activated by a specific file extension. Lets call it ".XYZ" for now. So when a file with a name of "[url removed, login to view]" if opened in Directshow, our filter will be selected as the required filter for the source. This file, will actually be an XML file, providing some specific information. Real name of the file/location to get the data from. When filter is started you open the stream to that file, and begin serving the data to the ffdshow (or other filter if you choose) bit for bit.
1. Directshow Filter
2. File Source
3. Wrapping a pre-exisint filter (ffdshow)
4. Exposing the pins, and all functionality of those OUT PINS as your own.
5. Registering as the PRIMARY selection for a specific file extension
6. Proxying data bit for bit from actual source location (can be local or remote http location) to the filter
7. File is growing and growing, think of it as a pipe.. (but its not)
8. Data should be provided to the underlying filter as requested from IT. (your getting "pulled")
9. In some cases, you may need to be able to provide to the filter some other specific information as a FILE SOURCE would. Duration, SIZE in bytes, etc. This will all be handled by either providing the actual, or by values in the XML based file with the source location. We will make this file, then open the filters for processing.
So you dont need to know any codecs here, you dont need to do any kind of manipulations, other than being able to wrap a filter inside this one, and exposing the pins, and feeding data as needed.
Links of use: