It is really great news that Windows 7 offers quite some goodies for MPEG-4 support right out of the box, but some things appear to be made not so accurate.
The component responsible for video decoding is Microsoft DTV-DVD Video Decoder (also known as Microsoft MPEG-2 Video Decoder), available with DirectShow interface. It offers video decoding capabilities for video resolutions up to 1920×1088 (Full HD), including DXVA version 2 mode. The decoder is a “preferred decoder” and is given a first chance to be taken when it comes for Intelligent Connect to render a video stream.
Technology went ahead though, stepped behind 1920×1088 in particular. Microsoft DTV-DVD Video Decoder DirectShow filter still remains the first take in H.264 video decoding, and what however is taking place – the decoder accepts the format (media type) which is clearly cannot decode, neither according to specification, nor in real life. As soon as pin connection succeeds, DirectShow is not trying to look for another decoder, which can truly decode the feed. Result: failure to decode video.
The problem takes place in a quite surprising way. Given 5 megapixel video (2560×1592, H.264, Baseline profile, from RTSP-enabled IP camera), the decoder advertises 720×480 NV12 output media type. While consuming input data, the decoder outputs nothing and keeps video window black.
It does not issue any filter graph events, no. The filter is persistent and works hard in assumption that a new piece of knowledge will come from Mars and provide new capabilities to start decoding video, or filter’s input will give up and provide a new SPS to lower resolution down to something less complex.
Well then, so is this advanced technology yet to be discovered by science? It appears that no. CoreAVC Video Decoder, applied to the same H.264 video decodes it well and nice:
Update 2011-09-26: According to Microsoft classification, this is a bug on a released product. That is, if anyone is experiencing severe issues as a result of this behavior, one might need to contact Microsoft Support directly in search of a solution.
Actually, as resolutions over Full HD (1920×1080) are not so much common at the moment, the issue side effects are not yet likely. Still moving on with time, I think the issues are likely to come up, without being severe though.
Hi! First of all: love your posts, incredibly interesting and informative.
I’ve been trying to reproduce what you do here but can’t even construct the graph you have: Render URL in graphedit does not create an RTSP source filter, even if I explicitly load the DTV-DVD decoder. Do you have a special RTSP Source filter loaded?
PS: the link to your Interactive RTSP Client (https://alax.info/blog/wp-content/uploads/2007/09/rtspclient-100213.zip) is broken.
Mike, thanks for being a reader and having fun out of this.
I have a custom RTSP source filter, which is capable of receiving H.264 video over RTSP (both UDP and TCP tunneling modes), which is however not a standalone component, but a part of a tool/utility.
The utility was never posted as it does not work very good in all its aspects, but RTSP part still works nice.
The utility itself is here: https://www.alax.info/svn/public/trunk/Utilities/RtspRtmpStreamer/ and it re-streams RTSP H.264 video to RTMP video distribution sites.
The part with RTSP as I mentioned works not bad, and you can preview video. More over, it provides information about RTSP conversation details, and SPS/PPS values to check basic properties of the feed.
If you have an MP4 Mux http://www.gdcl.co.uk/mpeg4/ installed, you can even record this H.264 into a file (original video, no re-encoding).
RTMP part does not work well due to first of all ridiculous complexity and ambiguity of the protocol itself. I did succeed in uploading video to http://justin.tv though.
So, if you are trying to reproduce the effect, and you have a device that outputs high resolution in H.264, you can use this application. Or, I pre-recorded a file with video from my camera, you can just render it in GraphEdit and I think you should be able to see it. The file is here: https://alax.info/temp/192.168.0.55-554-20110922-135009.mp4
A few more things to mention. If you want the tool to pick up CoreAVC decoder, you need to add a registry key:
Key Name: HKEY_CURRENT_USER\Software\Alax.Info\Utilities\RTSP RTMP Streamer
Value Name: Video Decoder Mode
Value Type: REG_DWORD
Value: 1
Also, here is some [reference] H.264 RTSP feed available on internet: rtsp://streaming1.osu.edu/media2/ufsap/ufsap.mov
Updated link: http://www.assembla.com/code/roatl-utilities/subversion/nodes/trunk/RtspClient/_Bin/Release/RtspClient.exe?format=raw Assemba changed links a couple of times and previous web hoster went out of business – so link do die…
Thank you!