使用PJSIP和Windows的视频支持

时间:2013-03-12 09:38:49

标签: c++ winapi sdl directshow pjsip

我想将PJSIP用于Windows程序的视频支持(Win32 / MFC / C ++)。通过查看PJSIP项目(http://trac.pjsip.org/repos/wiki/Getting-Started/Windows)的网站,我看到了其他(附加要求):

  • DirectShow SDK,包含在Windows SDK中。
  • SDL版本2.0或版本1.3

在这种情况下,我需要在config_site.h中进行以下配置:

#define PJMEDIA_HAS_VIDEO               1
#define PJMEDIA_HAS_FFMPEG              1
#define PJMEDIA_VIDEO_DEV_HAS_SDL       1
#define PJMEDIA_VIDEO_DEV_HAS_DSHOW     1

如果我将这两个组件添加到我的PJSIP项目中,一切正常,我会收到有关来电的通知,我可以在门上显示/捕捉来自摄像头的视频。

我的问题: 我是否真的需要这两个组件(SDL和DirectX / DirectShow)用于Windows程序?这意味着,我是否必须使用SDL(我想不是),如果是,我还需要DirectX吗?为什么我不能在Windows上使用OpenGL?也许有人有这个主题的经验 - 我将非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

你肯定需要DirectShow。要求SDL不是肯定的......

DirectShow为Windows中的视频捕获源提供流式界面。尽管DirectShow本身主要是一组用户模式组件,但提供的视频捕获过滤器(通常为KsProxy.ax)通过一组定义的接口和属性与内核级捕获驱动程序进行通信。一些相机制造商选择提供他们自己的用户模式DirectShow捕获过滤器,其私有(通常是内核)接口连接到他们的硬件,这使得DirectShow成为所有Windows视频捕获设备的通用接入点。

SDL提供了一个跨平台库,可以快速访问显示器。 PJSIP中的编解码器使用它将解码视频传送到显示器。

看起来PJSIP 可能支持使用DirectShow作为渲染过滤器。看到: http://svn.pjsip.org/repos/pjproject/trunk/pjmedia/src/pjmedia-videodev/dshow_dev.c

从源代码不清楚在第52行启用DirectShow渲染器的代码是否会在启用时起作用:

/* Temporarily disable DirectShow renderer (VMR) */
#define HAS_VMR         0

由于这已被注释掉,我认为代码没有完全完成,这就是为什么所有示例都需要SDL。