IP Video Source: 64-bit version, resolution flexibility, Adobe FMLE

The IP Video Source update provides several improvements to the driver:

  • copy/paste feature to backup, restore, or synchronize installed devices between 32-bit and 64-bit versions
  • 64-bit version and .MSI
  • dynamic video resizing (via Video Resizer DSP)
  • Adobe FMLE compatibility

Updates in greater detail follow.

Device Copy/Paste Feature

The video device management window is providing Copy and Paste buttons, which let user transfer device information, including name and settings, through clipboard for various purposes:

  • save data in order to be able to restore devices later
  • restore devices from saved list, or re-create from a list saved on another machine
  • duplicate a device
  • synchronize devices between 32-bit and 64-bit versions

The device data is a text, one line per device, lines in comma-separated values (CSV) format.

64-Bit Version

Software is available in both 32-bit and 64-bit versions. While most of multimedia software is still 32-bit, sometimes 64-bit version is really helpful to, for example:

  • interface to “Any CPU” .NET code which executes in 64-bit on a 64-bit operating system
  • go beyond 32-bit code boundaries, especially in part of multiple devices and virtual address space limit

64-bit version duplicates functionality available in 32-bit version, though 32- and 64-bit modules run in completely separated environments.

Dynamic Video Resizing

The source DirectShow filter is capable of connecting with media types different from original/camera media type in resolution part for decompressed video. The filter is internally taking advantage of Video Resizer DSP, and resizes decompressed video to format of interest.

As Video Resizer DSP is available starting with Windows Vista, the functionality availability is subject to the same conditions.

The feature is absolutely required for Adobe Flash Media Live Encoder software, as it make certain assumptions as for supported resolutions, and completely ignores the information the filter makes available in standard way.

Adobe Flash Media Live Encoder Friendliness

The update make the device much closer to interoperation with Adobe product. The software works around a handful of bugs, including as ridiculous as neglecting to provide correct BI_RGB value in BITMAPINFOHEADER::biCompression structure, yet researchers are still to resolve the remained ones.

FMLE would start perfect and stream video being run under debugger, otherwise in a regular run chances are that Adobe application would internally respond with E_UNEXPECTED failure for unknown reason, stop any encoding without giving a single little notice on the GUI.

After all, the encoding runs perfectly through web based encoder, and the driver is providing a good way to stream to video distribution sites such as http://ustream.tv, http://livestream.com from an IP camera or video encoder.

Download links

33 Replies to “IP Video Source: 64-bit version, resolution flexibility, Adobe FMLE”

  1. Guest: I wanted to ask how you integrated the Video Resizer DSP into your filer
    Any sample code?

    There is a thread on MSDN Forums regarding this question: How to use Resizer DMO to resize any video?

    Basically, it reveals the magic: you have to take care of correct media type on output pin yourself. It is really a shame that such a pretty good component was left one step away from DirectShow compatibility.

    A good wrapper over it may resolved the compatibility issue (an idea for someone to implement).

    Additionally to SetFullCropRegion, set explicitly proper media type on the DMO wrapper output pin – and you’ll be fine.

    […]

    The DMO and the wrapper will accept a media type on the input, and you will also be able to use IWMResizerProps to request actual resizing.

    However what the DMO does NOT do, is that it does not advertise proper output media type, and so does the wrapper. Whatever your sizing/cropping request is, you will have to build the output media type yourself and do ConnectDirect to connect the output pin with this correct media type.

    […]

    Full input media type, your SetFullCropRegion args, and the output type (ok, this one is in the post above).

    The key things here is that you cannot use Connect, Render etc. All of these would internally end up in Connect, which in its turn would call EnumMediaTypes and it will pick a wrong media type (even if MS fixes this now, the problem has already been out there for years).

    So you have to be sure that you are:

    – using correct media type
    – using ConnectDirect
    – using a downstream filter which can immediately, without intermediate filters, accept this media type

    It sounds sort of weird, but it’s how a workaround looks like. Behind all that, I think that video resizer as a Media Foundation component was not originally intended to be used as DirectShow fitler and this use case was never tested.

    […]

    This is exactly the same issue. With the media type supplied by the DMO by default, smaller video is in the top left corner and larger video does not fit the buffer and just fails. This is the behavior workable around by ConnectDirect.

      • The software is available “as is”. If you can interface it to Matlab and it works for you, then you are good to go. Your feedback on this is welcome here as well.

        • First of all thanks for u r help ………
          what are the software requirments for the ipideosource 64bit.bcz after intialise the channel how we are test whether the channel is working or not?

          • The configuration setting are equal for 32 and 64 bit versions. Once set up, you can use GraphEdit tool or AMCap sample from Windows SDK to make sure video streaming is correct. Windows SDK provides those in both 32 and 64 bit versions.

      • Hi,

        I would like to thank you massively for this creation, I’ve spent ages looking for something to do exactly what this does. I bought IP cameras for live streaming but the encoder didn’t support them naively but this works perfectly!

        However I have also got a 720p IP camera that uses h.264 over RTSP which isn’t supported. Do you have plans to extend this program or is there another way of making it appear as an input device so I can use it within Windows.

        Thanks

        • RTSP is important, H.264 over RTSP/RTP in particular, but it needs a slot of free time for this task, which I have not had so far and it is unlikely to appear very soon.

          I am glad M-JPEG works well for you.

    • Thank you for your offer, I appreciate it. Yet I have no ideas how you can effectively contribute: the project source code is not open, and I would prefer to keep its integrity.

      If you have specific things supported (such as for instance, particular hardware models), why would not you email me the details so that I keep in mind the awaited functionality when I have time to work with the code.

  2. Roman, This is a very handy tool to allow existing applications which will only use “Video Capture Sources” to accept streams from network cameras. This would be perfect for our needs if it supported streaming over RTSP.

    Have you made any progress with this since your comment to MeLoS in July 2011? I also echo his offer to help if you ever reconsider putting the source for this into the public domain.

    • Max, first of all I need to say that I appreciate your feedback and interest.

      I see two parts of the question here, progress and open source. As I am adding things in my slack time, the progress really depends on time and desire I have to move this on my own. Which of course varies greatly depending on other “priority” things I am busy with. Hence, slow progress. I have my own piece of RTSP code H.264 which does more or less well, and basically adding it into the form factor of this “IP Video Source” DLL is not a big thing, yte it is still not done. Most often, the improvements come on side occasions, I make it available for free so there is nothing to support this work.

      At the same time, I am not a big open source believer, at least in part of this sort of development. I do care about this code and I fix bug promptly (should someone get in touch regarding bugs in what is already available on the website). The code is also clean and efficient. I don’t like the idea to become a maintainer of other contributions, or even branching the code base at all, dealing with related questions of detailed documentation, compatibility etc.

      This all takes me back to where I am now: when I have time, I will put more things in.

  3. Roman,

    I am running into a performance issue while trying to integrate your filter with FMLE. The video will be smooth for a half second, then pause for a half second, then repeat. It doesn’t appear to be CPU limited (~30%)

    I have tried the filter with Webcam7 and the performance seems fine so I can only assume that the issue is with FMLE specifically. Any ideas?

    Also, I was wondering if you had made any progress on the RTSP version…

    Thanks and great work!

    • Looks still like a performance issue caused by CPU limit. In a multicore system don’t expect it to be able to use all cores for the processing. Steps on the way might include JPEG decompression, resizing and otherwise format conversions, then VP8/H.264 compression. If this is CPU related you should be seeing how it’s doing better and better along with reducing resolution and compression complexity.

      I am using stock Windows JPEG decompressor which is honestly far from being fast. But it’s simple. FMLE compression is again not the best thing out there…

      No news on RTSP, I am pretty much stuffed with other work so this waits for the time to come.

  4. I’m hitting a dead end and I’m hoping someone can help me. I’m trying to get a Sony SNC-RZ25N (IP: 192.168.10.38) over to FMLE and I’m losing my mind. What do I need to do to get Flash to recognize this as a video source?

  5. Roman, thanks for sharing your filter with us. It has been wonderful. Can you offer some advice? I upgraded to Windows 7, 64-bit and can no longer get the filter to work with a software program called Resolume Arena (Resolume.com). This worked great under WinXP 32-bit. I am using the 32-bit version of the filter, and Resolume Arena is 32-bit. I’ve tried this with several different Win7 machines and just get a black screen. Thanks – Mike

    • Mike, sorry there is little I can tell and I never heard Resolume.com software. Maybe I will have some time on the weekend to try it out and see what’s wrong. As a clue, default JPEG decoder is Windows does not support resolutions over 1920×1088 – maybe this is the issue.

  6. hi
    i have use the application but there is a serious problem
    when i add Online Axis Like http://85.119.13.218/mjpg/video.mjpg as source
    everything works fine in flash player , i can add Ip camera as a video source
    in my Local network with http://192.168.0.1/mjpg/video.mjpg , i have axis 215 PTZ , i did my best but i couldn’t add it as video source of flash player, it says the camera is used by another application ,
    please help me , i need help

      • i set 192.168.0.90 in my axis device in network , i can see http://192.168.0.90/mjpg/video.mjpg , it works ok
        when i go to the adobe flash player , and choose Alax.Info JPEG Video Source as video Source , the page become Blank and after a while it says the camera is used by another application

        should i do any config in axis device ? or do you have any experience in using Axis IP Camera as video source for adobe flash player?

  7. my question is , why i can’t access to the IP Camera , in Local Network , why does it say , The Camera is used by another Application, could u please help me ?!
    thanks in advance

  8. Your blog, and this program are very helpful. Thank you!

    I am trying to develop a virtual DirectShow camera source filter like yours for an H.264 USB device. I’ve started with The March Hare‘s VCam code because it implements everything addressed in Mark D. Pesce’s DirectShow book plus IAMStreamConfig and IKsPropertySet. Everything compiles, and shows up as a source in AmCap.

    My problem: in Windows XP, my VCam doesn’t work with Google Talk/Hangouts. Yours IP Video Source does. Flash isn’t crashing; I’ve fixed the SetFormat(*) bug. My virtual camera just not showing anything. Do I need additional interfaces to be exposed? Are the BaseClasses insufficient starting points?

    Thanks!!!!

    Code: http://tmhare.mvps.org/downloads/vcam.zip

    • I don’t think I do anything special and this means that it takes you to debug your filter to see what might be wrong, such as Google Talk does not like some output or something. I am not impressed how Google Talk takes data from DirectShow devices – similar to Skype they export data as soon as possible through Sample Grabber callback and part with DirectShow. Not wanting to stay within this API, I suppose they might be making some false assumptions as for video capture device and your filter does not work there.

Leave a Reply