2

Starting from videoprocessing project, I'm trying to build a directshow filter that connects to a RTSP server becoming a source filter for the Windows MPEG1 decoder (I can not use other formats or decoders having WinCE as OS target).

My filter declares MediaType

  • MEDIATYPE_Video type
  • FORMAT_MPEGVideo subtype
  • MEDIASUBTYPE_MPEG1Payload formatType

Currently, when I connect my rtspSource filter with the CLSID_CMpegVideoCodec decoder, I am rendering a black video.

However, if I replace the windows decoder with CLSID_LAV_VideoDecoderFilter provided by the LAVFilters project, the video is correctly rendered.

After reading "How to process raw UDP packets so that they can be decoded by a decoder filter in a directshow source filter", dealing with the same issue for H264 and MPEG-4, I also read the RFC2250 and then I have depacketized the data but the result is the same.

Currently I'm sending to decoder packets starting with Video Stream Start Code

000001 00 (Picture)

or integral packets starting with

000001 B3 (Sequence Header)

and which contain within them also startCode

000001 B2 (User Data)

000001 B8 (Group Of Picture)

000001 00 (Picture)

000001 01 (Slice)

Still referring to the previous link, which deals with H264 and MPEG-4 cases, speak about "Process data for decoder" but I am not clear exactly what is expected by the CLSID_CMpegVideoCodec filter, after agreeing the format type MEDIASUBTYPE_MPEG1Payload. However, adding at the beginning of each sample the three bytes 000001 or the 4 bytes 00000100, the video is rendered with images updated approximately every 2 seconds and losing the intermediate images.

I performed the tests both by setting the IMediaSample with

SetTime(NULL, NULL)

that setting

SetTime(start, start+1)

with:

start = (rtp_timestamp - rtp_timestamp_first_packet) + 300ms 

following the answer to "Writing custom DirectShow RTSP/RTP Source push filter - timestamping data coming from live sources"

but the results do not change.

Any suggestions would be greatly appreciated.

Thanks in advance.

Community
  • 1
  • 1
  • I would trace reference input which works well with this decoder and then compare media samples you those you feed there in. A missing flag or otherwise a minor thing might be causing the decoder to reject data. – Roman R. Jun 05 '14 at 13:53
  • Roman, Very thanks for your suggestion. Now, I'm analyzing the Media Sample grabbed from the MPEG Splitter Video Output. The graph is: File Source (Async) --> MPEG-I Stream Splitter --> SampleGrabber --> MPEG Video Decoder --> Video Renderer. I'm using the useful tool GraphEditPlus (option "Watch Grabber Sample" on SampleGrabber). – Lucio Palmieri Jun 06 '14 at 08:21

0 Answers0