2013-03-12 81 views
0

我想使用PJSIP與Windows程序(Win32/MFC/C++)的視頻支持。通過看看PJSIP項目(http://trac.pjsip.org/repos/wiki/Getting-Started/Windows)的網站,我看到除其他外(附加要求):使用PJSIP與視頻支持Windows

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

在這種情況下,我需要以下配置:

#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項目,一切工作正常,我收到有關來電的通知,並且我可以在門上顯示/捕獲來自相機的視頻。

我的問題: 對於Windows程序,我是否真的需要這兩個組件(SDL和DirectX/DirectShow)?這意味着,我是否需要SDL(我想不是),如果是,我是否也需要DirectX?爲什麼我不能使用OpenGL for Windows?也許有人有這個主題的經驗 - 我會很感激你的幫助!

回答

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。

+0

謝謝你的信息,傑伊!關於使用OpenGL而不是DirectX的是什麼?在這種情況下,SDL有可能嗎? – duDE 2013-03-15 17:58:14

+0

更新了上面的答案和更多信息... – 2013-03-15 18:09:54

+0

看起來像SDL將使用OpenGL,如果您定義了 PJMEDIA_VIDEO_DEV_SDL_HAS_OPENGL。請參閱: http://svn.pjsip.org/repos/pjproject/trunk/pjmedia/src/pjmedia-videodev/sdl_dev.c – 2013-03-15 18:25:06