使用 C# 的媒体基础

Posted

技术标签:

【中文标题】使用 C# 的媒体基础【英文标题】:Media Foundation with C# 【发布时间】:2015-02-01 09:02:47 【问题描述】:

媒体基础是微软推荐的技术,确实有很多示例和解释支持,但都是原生代码

我在 sourceforge 中找到了一个包装器,使我能够将 Media Foundation 与 C# 一起使用,但是当我阅读时人们谈论并非所有事情都可以通过托管代码完成

我有一些与 MF 相关的任务:

    捕捉实时视频 改变分辨率和波特率 视频编码 解码视频

我可以在这些任务中使用 .net 还是必须使用本机代码?是否有示例帮助(请不要提及其中的 msdn 之一)?

【问题讨论】:

欢迎来到 ***。 Media Foundation 非常适合合作,并且表现非常出色。如果您的要求包括实时,您最好编写自己的 C++/CLI 包装器来编排整个过程。我假设您的意思是比特率(而不是波特率)。您要捕获网络摄像头流吗?您是否对可能不止一种媒体类型进行编码/解码?包括音频吗? @Jeff 谢谢你的回答,是的,我想捕捉一个网络摄像头流,当我捕捉它时,我在每个时间周期对帧进行编码并将其附加到桌子上,我可以放在一个容器中并不多(也可能是没有容器的字节流)。我只需要视频我根本不关心音频 我不是媒体基础专家,但我发现在 C# 之间进行交互的最佳方式是使用托管 C++。我已经设法将实时视频从 Media Foundation 捕获到我的 C# WPF 应用程序中。主要的 C++ 类在这里,但再次警告我不是 MF sipsorcery.codeplex.com/SourceControl/latest#sipsorcery-media/… 方面的专家。 【参考方案1】:

Media Foundation .NET C# 包装器可以很好地完成您提到的所有这些任务。我个人用它来实现捕获、调整大小和编码,我想解码也不应该太难。

该项目确实有一些您可以下载的示例,但我发现它们相当缺乏。包装器非常接近 C++ 实现,因此使用 C++ 示例并不难,只需将逻辑移植到 C#。我使用以下内容作为参考,发现它非常有价值: https://github.com/sipsorcery/mediafoundationsamples

【讨论】:

在哪里可以找到 Media Foundation .NET C# 包装器?是否有正式版本或者您指的是源伪造的“snarfle”项目?

以上是关于使用 C# 的媒体基础的主要内容,如果未能解决你的问题,请参考以下文章

在多线程应用程序中使用带有媒体基础接口的 P/Invoke 发生 AccessViolationException

媒体基础 MP4 编码:IMFSinkWriter 不接受 PCM 输入

如何在 C# 中获取启用(媒体)设备的列表

C#使用MediaInfo查看媒体信息

C# 使用 REST API 连接到 Azure 媒体服务帐户

用于全局捕获媒体中心远程特殊键的 C# API