I just create simple graph to record video from a source Filter:
SourceFilter ---> Muxer ---> FileWriter
I can able to save video which come from SourceFilter to my local disk.
But when i try to play the recorded video, it play in "slow motion" :-).
It is sure that there is fps (frame persecond) problem. How can i fix it? any ideas?
PS:
To check if my SourceFilter give righ fps i simply create another graph:
SourceFilter ---> Video Decoder ---> Video Renderer
and it plays at right speed (fps)
More Details:
SourceFilter(*.mp4 file format) ---> Avi Mux Filter ---> File writer Filter
This record but in wrong fps.
When I try gdcl MP4 Mux ( can see it here ) i successfully get right fps.
SourceFilter(*.mp4 file format) ---> GDCL MPEG 4 Mux Filter ---> File writer Filter
The other scenario
SourceFilter( *.h264 file format) ---> Avi Mux Filter ---> File writer Filter
SourceFilter( *.h264 file format) ---> GDCL MPEG 4 Mux Filter---> File writer Filter
It records but recorded file does not play.
And actually i do not want decode anything...Just write the originally encoded video frames(mp4,h264) into file. And also i may not need syn audio with video...Why need Mux?
My ideal filter should be like this:
SourceFilter(whatever format) ---> File writer
Ralf's comment is probably right. The AVI file format doesn't have per-frame timestamps, just an average frame rate. So when a frame arrives, the mux has to decide whether to place this frame in the next "slot", or insert a "dropped frame" marker and put the frame in the slot after. If the source filter's timestamps don't match the media type's frame rate, then you will get this effect.
You can save your video elementary stream to a file, but use the Dump filter example, not the file writer. The file writer has a special protocol to allow multiplexors random access to the file (using the timestamps as file offsets). You want to just save the data as a stream, and the Dump example does that.
In my case I indeed had a Source filter that didn't set AvgTimePerFrame correctly. After I fixed that (it was my own source filter) the AVI also went along with whatever it received from upstream.
来源:https://stackoverflow.com/questions/6173122/directshow-record-problem-fps