标签: directshow

如何处理原始UDP数据包,以便它们可以通过directshow源过滤器中的解码器过滤器进行解码

很长的故事:

  1. 有一个H264/MPEG-4源
  2. 我可以将此源与RTSP协议连接起来.
  3. 我能够使用RTP协议获取原始UDP数据包.
  4. 然后将这些原始UDP数据包发送到解码器[h264/mpeg-4] [DS源过滤器]
  5. 但是这些"原始"UDP数据包无法通过解码器[h264/mpeg-4]过滤器进行解码

不久:

如何处理这些原始UDP数据以便通过H264/MPEG-4解码器过滤器进行解码?任何人都可以清楚地确定我与H264/MPEG流有关的步骤吗?

额外信息:

我可以用FFmpeg做到这一点......但是我无法弄清楚FFmpeg如何处理原始数据以便解码器可以解码.

directshow rtp rtsp h.264 mpeg-4

39
推荐指数
1
解决办法
4万
查看次数

强制Mpeg2Demultiplexer使用ffdshow渲染H264数字电视视频

我花了很多时间试图让DTVViewer的DirectShow样本工作不幸,但没有成功.DVBT网络的视频格式是H264,我发现IntelliConnect行为IFilterGraph更喜欢使用Mpeg2视频格式.

对于那些想要查看代码的人来说,就是这样.如果你对DirectShow一无所知我分享了我对这段代码的经验.最可能的问题在本教程的第5步和第6步中描述.

  • 连接过滤器的辅助函数代码:

    public static void UnsafeConnectFilters(IFilterGraph2 graph, IBaseFilter source, IBaseFilter dest, Func<AMMediaType, bool> sourceMediaPredicate=null, Func<AMMediaType, bool> destMediaPredicate=null) {
        foreach(IPin spin in IteratePinsByDirection(source, PinDirection.Output)) {
            if(IsConnected(spin))
                continue;
            int fetched;
            AMMediaType[] sourceTypes=GetMajorType(spin, out fetched);
            if(fetched>0) {
                Guid sourceType=sourceTypes[0].majorType;
                try {
                    if(sourceMediaPredicate!=null&&!sourceMediaPredicate(sourceTypes[0]))
                        continue;
                    foreach(IPin pin in IteratePinsByDirection(dest, PinDirection.Input)) {
                        if(IsConnected(pin))
                            continue;
                        var types=GetMajorType(pin, out fetched);
                        try {
                            if(fetched>0) {
                                Guid destType=types[0].majorType;
                                if(destMediaPredicate!=null&&!destMediaPredicate(types[0]))
                                    continue;
                                if(sourceType==destType) {
                                    spin.Connect(pin, types[0]);
                                    return;
                                }
                            }
                            else {
                                spin.Connect(pin, sourceTypes[0]);
                                return;
                            }
                        }
                        finally …
    Run Code Online (Sandbox Code Playgroud)

.net c# directshow h.264 dvb

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

如何检测HDMI线是否插入PCMCIA卡/无信号?

我正在尝试编写一个简单的帮助应用程序,用于在没有检测到信号的情况下提示用户打开摄像机,这在这种情况下意味着摄像机关闭和/或HDMI电缆没有插入PCMCIA采集卡.如果信号存在,那么我将启动相应的录制应用程序,在本例中为Wirecast.

我怎么可能在VisualStudio中使用C#创建它?

更新

我认为现在我已经接近了一个基于其中一条建议的建议,建议使用GraphEdit并查看硬件上可用的内容.我能够在捕获设备的属性中找到一个"信号检测"标志,如果摄像机打开/关闭或拔掉HDMI电缆,它会从0变为1,这就是我想要的.

现在,我将如何通过代码访问此标志?我想我真的很亲密,但不知道如何访问cElemspElems从中获取结构caGUID.cElems返回值3,这与屏幕截图中显示的GraphEdit属性窗口中显示的选项卡数相同.pElems每次运行应用程序时都会返回不同的值,所以我不确定该结构中发生了什么.我认为我正在寻找的旗帜位于这些结构中的某个位置.

码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using DirectShowLib;

namespace Test
{
    static class Program
    {
        [STAThread]

        static void Main()
        {
            using (System.Threading.Mutex mutex = new System.Threading.Mutex(false, "Global\\" + appGuid))
            {
                if (!mutex.WaitOne(0, false))
                {
                    return;
                }

                DsDevice[] capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);

                foreach (var dev in capDevices)
                {
                    if (dev.DevicePath == @"@device:pnp:\\?\pci#ven_1131&dev_7160&subsys_12abf50a&rev_03#6&37bccbbe&0&000800e1#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{6f814be9-9af6-43cf-9249-c0340100021c}")
                    {
                        IFilterGraph2 m_FilterGraph = (IFilterGraph2)new FilterGraph();

                        IBaseFilter capFilter = null; …
Run Code Online (Sandbox Code Playgroud)

c# directshow graphedit pci

20
推荐指数
2
解决办法
1173
查看次数

虚拟网络摄像头驱动

我想开发一个虚拟网络摄像头驱动程序,从用户模式我将图像传递给它,它将显示为网络摄像头输出.

我不想使用DirectX过滤器和CSourceStream等.因为它们不适用于某些不使用DirectX捕获网络摄像头图像的程序.

我必须写一个内核模式设备驱动程序.

有任何想法吗?我尝试了DDK样本的testcap,但它没有处理来自用户模式的图像并且没有得到任何输入,只是它在网络摄像头中显示7种颜色...

任何帮助将不胜感激.谢谢


谢谢你们!

我从这里尝试了代码:http: //tmhare.mvps.org/downloads.htm (找到捕获源过滤器)

当我在雅虎,MSN编译它时,它运行良好,但它崩溃了AIM,Internet Explorer Flash网络摄像头,Firefox Flash网络摄像头和Skype ......在8次调用之后,我在QueryInterface中崩溃了,我发现它跟踪了它很多技巧..

现在我知道,它在第8次调用时崩溃了HRESULT CVCamStream :: QueryInterface(REFIID riid,void**ppv)

第8次调用,当它到达时,如果,我的意思是:返回CSourceStream :: QueryInterface(riid,ppv);

它位于Filters.cpp的第17行

为什么你认为我会崩溃?

谢谢大家指导我找到正确的解决方案,这是DirectShow,而不是驱动程序

c++ webcam directshow wdk device-driver

18
推荐指数
2
解决办法
2万
查看次数

用于Windows开发的GStreamer或DirectShow?

我正在为当地一所大学实施一个讲座捕捉项目.多个视频流将到达一台PC:演示者的桌面幻灯片,演示者自己的摄像机图像以及可选的数字白板捕获.这些传入流将由桌面应用程序管理,该应用程序显示,转码/混合并最终将它们保存到磁盘.将有一些配置选项,因为材料可以以各种方式分发:作为DVD上的Flash应用程序,作为在线Flash应用程序或作为Windows Media Player的视频点播流.

此应用程序应在Windows上运行.可选地,它可以支持其他平台,但它似乎不是高优先级.

GStreamer和DirectShow似乎都能够提供底层技术.我对Linux上的GStreamer有一点经验,我喜欢它的设计,所以我倾向于将它用于这个项目.但是,我不知道它在Windows上的支持程度如何.我找不到关于如何在Windows上构建GStreamer的最新文档.所以我担心在这个过程中我会陷入困境.

DirectShow似乎是一个更安全的选择,因为它使用得更广泛,并且在互联网上有更多可用的文档.

这里有没有人有在Windows上使用GStreamer的经验?它运作良好吗?我应该注意哪些问题?

编辑
我发现了GStreamer OSSBuilds网站,并能够快速实现一个简单的视频播放器(基于'playbin'元素).所以我想我会更进一步追求GStreamer路径.

c++ windows directshow gstreamer

16
推荐指数
3
解决办法
7206
查看次数

如何对DirectShow图形进行逆向工程?

我有一个DirectShow图表来从网络流中呈现MPEG2/4电影.当我通过手动连接引脚组装图形时,它不会渲染.但是当我在GraphBuilder上调用Render时,渲染效果很好.

显然有一些设置步骤,我没有在GraphBuilder执行的图形中的某个过滤器上执行.

有没有办法在组装图形时看到GraphBuilder的调试输出?

有没有办法转储工作图,看看它是如何组合在一起的?

解开生活在DirectShow盒子里的神秘的任何其他想法?

谢谢!-Z

directx video directshow mpeg

14
推荐指数
3
解决办法
5526
查看次数

如何在C#中的图像目录中创建视频?

我有一个位图目录,它们都是相同的维度.我想将这些位图转换为视频文件.我不在乎视频文件(编解码器)是wmv还是avi.我唯一的要求是我指定帧率.这不需要跨平台,仅限Windows(Vista和XP).我已经阅读了一些关于使用Windows Media SDK或DirectShow的内容,但它们都没有明确提供代码示例.

任何人都可以提供一些见解,或者一些有价值的资源可以帮助我在C#中做到这一点吗?

c# media directshow multimedia wmv

14
推荐指数
2
解决办法
2万
查看次数

在C++项目中包含.idl文件

我正在用C++构建一个项目,该项目使用DirectShow的视频捕获库连接到摄像机.视频卡制造商(BlackMagic)提供了.idl(接口定义语言)文件,该文件将新的捕获图形添加到标准集合中.

事实上,我从未遇到过.idl文件,而且非常模糊的"包含文件"方向并没有多大帮助.用#include指令包含它不会引起任何错误,但程序也无法引入我想要添加的各种定义,因为它是我被告知包含在项目中的唯一文件.

我的问题是:如何在项目中包含.idl文件?

c++ directshow idl visual-studio-2010

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

regsvr32 filename.ax实际上做了什么?

regsvr32 filename.ax
Run Code Online (Sandbox Code Playgroud)

我只是看到它说成功安装了什么,但是整个故事是什么?

regsvr32 directshow

13
推荐指数
2
解决办法
7741
查看次数

我在哪里可以找到完整的DirectShow教程?

我已经阅读了DirectShow上的MSDN文档,但它仍然令人困惑.我觉得我需要更多关于对象的上下文:Graphs,Pins,Filters等等.谷歌搜索并没有给我太多帮助.我需要什么来体验DirectShow?

编辑:DirectShow上的维基百科页面做得非常好.

directshow

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