问题标签 [ms-media-foundation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
529 浏览

ms-media-foundation - Concatenate Multiple media files into one output/listening to Media Foundation Events

I've written an application that will transcode and manipulate media files using Microsoft Media Foundation, but now I've got to make the same application concatenate/join media files together.

Is there any existing documentation on doing something like this? Any pointers/hints? Any existing code that does this?

If not, I figure I've got to write or find a custom media source-something like a ConcatenatingMediaSource(a source that wraps the series of sources it's concatenating together), but I'm unsure if this is the best course to accomplish this.

EDIT: It seems the relevant event I need to be concerned with are MEEndOfPresentation-this indicates that a source(or perhaps one of my embedded sources) has reached the end of all it's streams.

MSDN docs state that if a wrapped source fires this event, I have the ability set a new PresentationDescriptor on my Source. Perhaps I could just return the next embedded source's PresentationDescriptor?

Right now I'm held up on how to actually listen to an individual source's events. How to do this isn't exactly clear (at least to someone who mostly writes code for the JVM).

EDIT: I think I want to use a SequenceSource; it's part of the API but seems fairly undocumented.

0 投票
1 回答
329 浏览

metadata - 将自定义文件类型转码为 mpeg-4

我有一个自定义视频文件,其中包含一个自定义标题,后跟 UYVY 类型的 YUV 格式。标题标签包含有关图片位置的特殊信息,因此我需要保留它们。

我目前正在将 UYVY 转换为 YUY2,以便使用 Microsoft Media Foundation H.264 编码器来创建 mpeg-4 文件,但是我不知道如何保存元数据。

我的问题是如何使用 Microsoft Media Foundation 将自定义元数据保存到新编码的 mp4 文件中?IPropertyStore 讨论了使用自定义 XML 文件来描述如何处理自定义元数据,但我找不到任何有关如何执行此操作的示例。

谢谢!

0 投票
1 回答
2305 浏览

c# - 从 C++ COM DLL 回调到 C# 应用程序

这将是一篇很长的文章,因为我想向您展示我尝试完成这项工作的所有步骤:)

我有 C++ COM dll,其中包含一个 VideoPlayer 类,该类使用 Media Foundation API 来显示视频。

VideoPlayer 类是使用 IDL 文件定义的:

此类在内部使用自定义演示器(基于WPFMediaKit项目),它在 IDirect3DSurface9 对象中输出视频帧。

自定义 Presenter 需要一个 IEVRPresenterCallback 类型的回调,定义如下:

如您所见,它不是在 IDL 文件中定义的,而是在头文件中声明的。

我需要向 VideoPlayer 类添加一个新函数,该函数允许调用 C# 代码传递从 IEVRPresenterCallback 继承的类的实例,该实例将设置为自定义演示者。

我尝试将此行添加到 VideoPlayer 的 IDL 文件中:

但我收到一个错误:

错误 MIDL2025:语法错误:期望“IEVRPresenterCallback”附近的类型规范

我想这很正常,因为我没有在 IDL 中导入任何内容。这是正常的,因为 IEVRPresenterCallback 是在头文件中定义的。

我尝试导入头文件,但 IEVRPresenterCallback 定义的 MIDL_INTERFACE 宏生成错误:

错误 MIDL2025:语法错误:需要接口名称或 DispatchInterfaceName 或 CoclassName 或 ModuleName 或 LibraryName 或 ContractName 或“MIDL_INTERFACE”附近的类型规范

然后我尝试转发声明接口,但出现此错误:

错误 MIDL2011:未解析的类型声明:IEVRPresenterCallback [过程“RegisterCallback2”(接口“IVideoPlayer”)的参数“p_PresenterCallback”]

我最后一次尝试是更改 RegisterCallback 的定义,使用指向 IUnknown 而不是 IEVRPresenterCallback 的指针,并且在函数的声明中,我将指针转换为正确的接口。

这使得 C++ dll 可以正确编译。

在 C# 应用程序中,我将回调设置如下:

我遇到的问题是,尽管自定义演示者调用了回调,但我再也没有回到 C# PresentSurfaceCB 函数中。

我现在完全卡住了,我不知道问题出在哪里,也不知道如何解决它:(

有任何想法吗?

提前致谢

0 投票
1 回答
3615 浏览

c++ - 使用 Media Foundation SDK 进行直播

有没有一种简单的方法可以使用我使用 Media Foundation 编码的数据并通过网络流式传输而不是将其写入 WMV 文件?

0 投票
1 回答
174 浏览

ms-media-foundation - 如何让 Windows Media Center 理解新的 WMF 文件?

我正处于创建 MFT 以解码“新”容器格式视频的早期阶段。我正在使用 Media Foundation SDK 中的 MPEG1Source 示例,并且我有一个 mpeg1 示例。我将两者的扩展名都更改为“.test”并注册了 dll。

Windows Media Player 可以打开文件(我的断点被击中并且视频播放),但是当文件是 .mpg 而不是 .test 时,Windows Media Center 不能从命令行打开。我的断点没有被命中;它看起来甚至没有尝试加载 dll(Visual Studio 没有报告我的 dll 正在输出窗口中加载)。

这是 64 位 Windows 7;该 dll 是本机 64 位的。

在 Media Center 了解新的文件类型之前,是否需要进行一些额外的注册?

0 投票
1 回答
568 浏览

directshow - 如何在 MF 应用程序中使用帧率转换器 DMO

我希望在我的媒体基础应用程序中使用帧速率转换器 DSP 。我正在使用“SourceReader”来读取视频文件。谁能告诉我在哪里以及如何将 DMO 与 MF 集成以获得帧速率转换。我似乎不明白将哪种样本(压缩/未压缩)馈送到 DMO 以获得新的帧速率。DMO 如何改变帧率?它是否为新样本提供了新的时间戳?没有代码示例演示它的使用。请帮忙,我卡住了。

谢谢,莫茨

0 投票
1 回答
1677 浏览

media - Media Foundation:无需容器即可解码和显示 H264 帧

场景是这样的:我的 Windows 客户端应用程序以自定义方式(专有协议)从网络源获取 H264 编码的帧,没有容器。帧的格式是已知的。我需要解码帧并显示视频。要求在高清流媒体期间播放完美无缺,但在其他场景中可以选择低延迟。

目前,我使用 ffmpeg 的 libavcodec 对帧进行解码,然后使用 StretchBlt 手动将它们显示在屏幕上。我们正在考虑迁移到 Media Foundation,但我不清楚 - 是否有可能拥有不使用容器的源?如果是这样,我需要创建一个自定义的吗?

也欢迎使用 Media Foundation 的替代方案。我目前使用的方法的主要问题是性能不够好,尤其是对于高清视频。

0 投票
1 回答
1240 浏览

c++ - 如何从“正常”IDirect3D9Surface 获得屏幕外平面

我正在与 Media Foundation 合作开发媒体播放器。我正在尝试使用 DXVA-HD 进行后期处理。但是,当我尝试使用 HD 设备执行 VideoProcessBltHD 时,它会因 E_INVALIDARGS 而失败。我怀疑它不能以某种方式与我作为输入提供的 ID39Surface 正常工作。我从“IMFMediaBuffer”(我从 SourceReader 读取样本中获得)获取输入表面。

我按如下方式提取表面: CHECK_HR (hr = MFGetService( video_buffer, MR_BUFFER_SERVICE, __uuidof(IDirect3DSurface9), (void**)&pSurface) );

但是,在MSDN 上的 DXVA-HD 示例中,VideoProcessBltHD 工作正常。

而示例代码中的 IDirect3DSurface9 表面是屏幕外平面表面。如何将“我的表面”(具有视频数据)作为屏幕外平面表面传递给视频处理器并获得“blt 操作”成功?

任何帮助,将不胜感激。

谢谢莫茨

0 投票
1 回答
440 浏览

rtsp - 从 RTSP 服务器渲染音频流

我有一个 RTSP 服务器,它将 A/V 流从相机重新传输到客户端。

客户端我们使用 MF 播放流。

我可以成功播放视频,但无法播放来自服务器的音频。但是,当我使用 vlc 播放时,它可以同时播放 A/V。

目前我正在实施 IMFMediaStream 并创建了我的自定义媒体流。我还为音频创建了一个单独的 IMFStreamDescriptor 并添加了所有必需的属性。当我运行时,一切正常,但我的 RequestSample 方法永远不会被调用。

如果我做错了,或者是否有任何其他方式可以在 MF 中播放音频,请告诉我。

谢谢,

普拉泰克

0 投票
1 回答
1493 浏览

windows - 如何将编码 h264 写入文件以外的字节数组

我正在使用 MSDN 教程将 RAW RGB32 帧编码为 h264 视频,这第一部分可以正常工作。(http://msdn.microsoft.com/en-us/library/ff819477%28v=VS.85%29.aspx

但是,有一个想法是我可以做的:我只想将输出编码的视频写入文件以外的字节数组,我已经阅读了大约 400 个不同的网页和所有媒体基金会文档,但我没有看到怎么做 !!

我尝试了许多不同的方式,使用 MFCreateTempFile 并使用 IMFByteStream 但无事可做!

在我尝试过之后:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms698913%28v=VS.85%29.aspx 但我的缓冲区是空的!

请帮我 !!我要瞎了眼!!