Author: Roman

From Webcams to 24-Hour Recordings: A Decade of Medical Video Evolution

For over a decade, we have been supporting a customer’s product in the field of medical video. Our journey began with their attempts of previous years to record from webcams — an endeavor that was initially partially successful. We put our expertise to bring use of this technology to stable level, and since then we have successfully captured countless hours of footage, using both standard cameras and professional-grade hardware.

One particularly intriguing aspect of this evolution stands out.

In the early days, our recordings were typically brief, lasting only a few minutes. Moreover, the original implementation imposed a strict 10-minute limit within the application. Why? Well, at that time, there was no robust video encoder available that could handle the application’s requirements — hardware constraints, desired quality, and real-time performance. Consequently, the signal was often recorded in an uncompressed format. The time limit served a purpose: managing disk usage and preventing accidental overflows.

As the years passed, we transitioned to using proper video encoders for live content. We swiftly expanded our supported resolution to Full HD at 60 frames per second. Hardware-assisted encoding became the norm, and the duration of encoded sessions gradually increased. What started as 10-minute recordings soon extended to 15 minutes, half an hour, and eventually full procedures lasting up to 4 hours. Then came the pivotal question: “Can we record continuously for 24 hours?” The answer was a resounding yes.

Despite its long history, the ongoing support, stable performance, and improvements over time have been well worth the very moderate effort, and yes, it’s still a hashtag#DirectShow app. With a little hashtag#MediaFoundation insertion.

Simultaneously, the need for data safety during recording intensified. Fortunately, we devised a solution, which we’ll delve into further in an upcoming piece.

Windows 11 Virtual Camera: Real-Time Video with Minimal Latency

A customer approached us to create a virtual camera subsystem for Windows tailored to their specific use case. Their application required a video feed from either a built-in or externally connected camera. Simultaneously, they wanted to make this camera accessible to other applications.

As previously mentioned https://lnkd.in/dYte5SQ5, this longstanding challenge had been addressed through specific development, with the open-source sample known as “VCam” serving as the starting point. Remarkably, VCam predates even Stack Overflow itself. Yet recently there have still been inquiries related to VCam, as evidenced by discussions on Stack Overflow: https://lnkd.in/dyu_Ypta.

However, with the advent of Windows 11, Microsoft finally provided a solution to the virtual camera conundrum as part of their #MediaFoundation API, codenamed “MFCreateVirtualCamera”. We successfully implemented this solution for our customer. In addition to the proof of concept https://lnkd.in/djy7Uq3w that we shared in 2022, this marked our first production use of this new technology.

In essence, we re-established a #realtime video feed with nearly zero latency, effectively treating it as an independent source of video signal.

VCam: A Journey from Usenet to GitHub

Throughout many years of hashtag#DirectShow development, one project stood out with unwavering popularity: the Windows Virtual Camera sample ????. Originally authored by Vivek in 2005 or even earlier, it was shared on the “microsoft. public. win32. programmer. directx. video” Usenet conference. This project gained prominence because it addressed a problem that had no existing solution within the Windows SDK, and Microsoft had not expressed any intention to rectify it.

The source code for this virtual camera project was once hosted by Philip “The March Hare” on his personal website. However, given the passage of time, even that website does not longer exist.

We decided to breathe new life into this project, affectionately known as “VCam”, and made it available on GitHub: https://lnkd.in/dGUH9v79. Despite our confidence that the project and its approach are no longer current, there remains significant interest in this source code, with thousands of mentions across the internet.

At the GitHub repository, you’ll find not only the source code and build instructions but also pre-built binaries, demonstration, and references to the original contributors.

Microsoft Media Foundation and HoloLens: Enabling Real-Time Video Communication

A customer approached us with a specific request: they needed a code snippet that could compress video into the H.264/AVC video format. Additionally, they were developing an application for the hashtag#Microsoft hashtag#HoloLens, which was the previous generation of hashtag#mixedreality headsets.

Upon closer examination, we realized that the purpose was to enable video encoding and decoding in a hashtag#lowlatency, hashtag#realtime, multi-party video conferencing application. The challenge lay in achieving this on low-powered hardware with its unique platform and limitations.

The HoloLens utilizes the Microsoft UWP platform, which typically allows developers to avoid rewriting software for different platform devices. However, in this particular case, adaptation was necessary. The only viable approach for handling real-time video was to leverage hardware-assisted video encoding and decoding through Microsoft Media Foundation.

These devices come equipped with specialized GPUs that share similarities with traditional desktop graphics adapters but also have their own distinct characteristics. Essentially, we developed a subsystem specifically tailored for Microsoft HoloLens 1, enabling real-time video capture, compression, decompression, seamless camera integration, hashtag#unity3d integration, and audio hardware support.

Play an MP3 with Media Foundation

An under 100 lines of C++ code sample that plays an MP3 file with Microsoft Media Foundation. https://github.com/roman380/MediaFoundationMinimalAudioPlayback Comes from this StackOverflow question, however unlike Microsoft’s sample it does not spread simple code among multiple source code files, gives a quick way to build & run, shows modern C++ practices (including Microsoft Windows Implementation Library…

Read the full article