标签: ms-media-foundation

在DirectShow之外使用DirectShow过滤器?

我目前正在处理Windows Media Foundation.但是,由于Microsoft H.264解码器和一些缺少自定义格式的解码器的一些问题,我想知道是否可以直接使用CLSID实例化DirectShow解码器,并围绕它构建一个暴露IMFTransform的代理获得Media Foundation的解码器.所以这是我的问题:

我可以直接实例化Directshow过滤器(首选解码器)并使用它们进行解码(即放置一些压缩帧并获得未压缩的帧)来创建MFT吗?

我知道如何使用其CLSID实例化过滤器本身.但是,我不知道如何使用实际的解码功能.

任何想法,提示,链接任何将被欣赏.谢谢,

J.

directshow instantiation decoder clsid ms-media-foundation

2
推荐指数
1
解决办法
1416
查看次数

使用NAudio替换视频的音频流

我有2个文件.两者的长度相同(以秒为单位):

  1. 视频文件(H.264,.mov)
  2. 音频文件(PCM,.wav)

如何在我的C#应用​​程序中使用NAudio .NET库用文件#2中的音频覆盖文件#1的音频?我想将最终结果写入磁盘作为新的视频文件.

我相信这可以使用NAudio 1.7的Media Foundation功能,但我无法弄清楚如何修改视频文件的音频流并重新保存视频.

c# audio video naudio ms-media-foundation

2
推荐指数
1
解决办法
920
查看次数

网络摄像头 MJPG 捕获流在 Windows 10 上不可用

在 Windows 10 build 10.1607.14393.10(又称周年纪念版)上,我无法再获取 MJPG 捕获流。曾经是 MJPG 和 YUY2 分辨率,现在我在 DirectShow(内核流)和 Media Foundation MJPG 中仅获得 YUY2,然后在 IBaseFilter 源连接到任何内容之前将媒体类型转换为 NV12。尝试使用不同相机的多个系统。有什么想法可能是错的吗?

     640x480   @30   YUY2
     ...
     640x480   @30   MJPG <- gone
 ...
DirectShow:
    com_t<IAMStreamConfig> sc;
    if_failed_return_result(camera_output_pin->QueryInterface(&sc));
    int number_of_capabilities = 0;
    int capability_size = 0;
    if_failed_return(sc->GetNumberOfCapabilities(&number_of_capabilities, &capability_size), -1);
    for (int i = 0; i < number_of_capabilities && k < count; i++) {
        VIDEO_STREAM_CONFIG_CAPS scc;
        assert(sizeof(scc) == capability_size);
        AM_MEDIA_TYPE* mt = null;
        if_failed_return(sc->GetStreamCaps(i, &mt, (BYTE*)&scc), -1);
...
Run Code Online (Sandbox Code Playgroud)

在MMF中:

    640x480   @30   YUY2
    ...
    640x480   @30 …
Run Code Online (Sandbox Code Playgroud)

webcam directshow video-capture ms-media-foundation windows-10

2
推荐指数
1
解决办法
6885
查看次数

MF SinkWriter 写入示例失败

我正在尝试使用 MediaFoundation 将 ID3D11Texture2D 编码为 mp4。下面是我目前的代码。

初始化接收器写入器

private int InitializeSinkWriter(String outputFile, int videoWidth, int videoHeight)
    {
        IMFMediaType mediaTypeIn = null;
        IMFMediaType mediaTypeOut = null;
        IMFAttributes attributes = null;

        int hr = 0;

        if (Succeeded(hr)) hr = (int)MFExtern.MFCreateAttributes(out attributes, 1);
        if (Succeeded(hr)) hr = (int)attributes.SetUINT32(MFAttributesClsid.MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, 1);            
        if (Succeeded(hr)) hr = (int)attributes.SetUINT32(MFAttributesClsid.MF_LOW_LATENCY, 1);

        // Create the sink writer 
        if (Succeeded(hr)) hr = (int)MFExtern.MFCreateSinkWriterFromURL(outputFile, null, attributes, out sinkWriter);

        // Create the output type
        if (Succeeded(hr)) hr = (int)MFExtern.MFCreateMediaType(out mediaTypeOut);
        if (Succeeded(hr)) hr = …
Run Code Online (Sandbox Code Playgroud)

c# directx dxgi sharpdx ms-media-foundation

2
推荐指数
1
解决办法
2161
查看次数

使用MediaCapture直播

对于一个项目,我正在尝试创建一个视频通话应用程序.我正在为通用Windows平台做这个,所以我想我可以使用MediaCapture类.这个类确实有这个StartRecordToCustomSinkAsync()方法,但是为了使用它,我需要创建一个自定义接收器.我开始创建一个,但现在我不得不创建流水槽.此链接解释了Media Sinks,但我找不到关于流接收器的任何文档.

我还研究了Simple Communication,WavSink另一个自定义接收器示例,但代码缺少注释或解决了另一个问题.

有谁知道我如何实施UWP视频通话应用程序,或指出我正确的方向?

PS.我知道这类问题更多,但没有可用的答案:(

c# c++ ms-media-foundation uwp

2
推荐指数
1
解决办法
1082
查看次数

媒体基金会外部编解码器支持

我已经使用 Media Foundation API 编写了一个程序,该程序采用 AVI 文件并将其视频样本解码为未压缩的 RGB 帧。

最近,我发现了一个包含音频和视频轨道的 AVI 文件,但 Windows Media Player 没有播放视频轨道(正在播放音频)。

我试图用另一个播放器(Gom Player)打开文件,它建议我下载额外的编解码器包:LEAD MJPG/MCMP Video Codec。安装后 WMP 开始解码和播放视频轨道。但在那之后,我再次无法使用 MF API 解码文件。

我的猜测是 Media Foundation 仅限于 Windows 提供的内容。那正确吗?

另外,是否有一种方法可以告诉 Media Foundation 使用外部安装的编解码器进行解码?

windows video winapi decoding ms-media-foundation

2
推荐指数
1
解决办法
948
查看次数

来自非托管代码的System.AccessViolationException?

我正在编写这个库,它通过Media Foundation框架在C++/CLI中实现一些基本的音频播放器功能,这些功能将由托管代码使用.我可以播放音频,停止,暂停等等.对于不熟悉Media Foundation的任何人,媒体会话都会发布您可以处理通知的事件.这是通过使用IMFAsyncCallback对象在会话对象上调用BeginGetEvent来完成的.IMFAsyncCallback定义了应该实现的方法Invoke(IMFAsyncResult)来处理事件.发生事件时,调用方法由工作线程上的会话对象调用,该工作线程具有可以查询事件信息的IMFAsyncResult对象.此结果对象由事件线程创建并拥有.

在我的Invoke实现中,每当我尝试用我传递的IMFAsyncResult对象做任何事情(包括只调用QueryInterface或其他东西)时,我都会得到一个System.AccessViolationException.我实现IMFAsyncCallback的对象是在CRT堆上分配的基本C++类(未托管),并且事件发布在也在CRT堆上分配的会话对象拥有的线程上.

  1. 可能导致此异常的原因是什么?

  2. 为什么我从普通旧C++实现的代码中抛出.NET托管异常?这就是当你有一个混合模式组件时会发生什么?

.net c++-cli access-violation visual-c++ ms-media-foundation

1
推荐指数
1
解决办法
5175
查看次数

媒体基金会vs DirectShow和媒体容器。(WEBM和OGG THEORA)

为什么所有新的视频/媒体容器格式都很少为媒体基础提供支持,而为DirectShow提供更多支持,而又知道DirectShow即将死去。

directshow ogg webm ms-media-foundation

1
推荐指数
1
解决办法
1062
查看次数

使用Windows Media Foundation中的Sink Writer添加到视频的音频示例

我可以使用我在此处学习的图像编写视频文件.它使用IMFSampleIMFSinkWriter.现在我想为它添加音频.假设有Audio.wma文件,我希望将该音频写入该视频文件中.

但是在这个样本中无法弄清楚如何做到这一点.像输入和输出类型设置,IMFSample音频缓冲区的创建等等.如果有人能告诉我如何使用接收器编写器将音频添加到视频文件,那将是一件好事.

audio windows-runtime c++-cx ms-media-foundation

1
推荐指数
1
解决办法
1947
查看次数

Microsoft Media Foundation SDK示例下载

我很抱歉地问这样的问题,但现在它2小时因为我试图找到微软媒体基金会SDK样本.我已经安装了最新的Microsoft SDK 8.1和Microsoft SDK 10,并且没有MF SDK示例.来自MSDN的链接(例如此处的链接)不再起作用.

请你帮助我好吗?

media sdk sample ms-media-foundation

1
推荐指数
1
解决办法
5606
查看次数

视频编辑API建议?

我有一个特定的要求,即能够从源视频中选择任意矩形区域,并将该区域(在特定时间范围内)保存到单独的文件中.

理想情况下,API将支持C#/ .NET,但我们已准备好在C++中使用它,如果这样可以产生更好的最终产品.

该软件需要在Windows机器上运行.

我研究过Direct Show Editing Services和Media Foundation.我发现有相互矛盾的信息表明DSES已被弃用,但后来使用DSES而不是MF,因为MF并没有那么关注视频编辑.

我还应该研究其他任何API吗?
你能为手头的任务推荐上述任何一种API吗?

提前致谢!

c# directx directshow video-editing ms-media-foundation

1
推荐指数
1
解决办法
3626
查看次数

Media Foundation的H264编码器中的SPS和PPS(又名dwSequenceHeader)

我正在使用Media Foundation(MFT)的H264编码器.
我从中提取了SPS和PPS,因为我需要它来进行流畅的流式传输.
MSDN表示在每个NALU之前出现的长度字段使用的字节数1, 2, or 4.这都是网络字节顺序.如您所见,缓冲区中的前4个字节是0, 0, 0, 1.如果我们应用任何可能的长度,我们什么都得不到.如果用于长度的字节数是1,则长度为零,如果为2,则长度再次为零.如果是4,那么第一个NALU的长度是1?!而且,这不正确.
有谁知道我应该如何解释这个SPS和PPS连接在一起?

提取SPS + PPS

video-encoding h.264 smooth-streaming ms-media-foundation

0
推荐指数
1
解决办法
7174
查看次数