锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久成人精品无人区,日韩午夜一区,91久久国产精品91久久性色http://m.shnenglu.com/niewenlong/category/5216.htmlzh-cnMon, 19 May 2008 13:11:37 GMTMon, 19 May 2008 13:11:37 GMT60鍑犵寮婧怱IP鍗忚鏍堝姣?http://m.shnenglu.com/niewenlong/archive/2007/09/24/32792.html鑱傛枃榫?/dc:creator>鑱傛枃榫?/author>Mon, 24 Sep 2007 09:08:00 GMThttp://m.shnenglu.com/niewenlong/archive/2007/09/24/32792.htmlhttp://m.shnenglu.com/niewenlong/comments/32792.htmlhttp://m.shnenglu.com/niewenlong/archive/2007/09/24/32792.html#Feedback0http://m.shnenglu.com/niewenlong/comments/commentRss/32792.htmlhttp://m.shnenglu.com/niewenlong/services/trackbacks/32792.html 

    OPAL鏄疧pen Phone Abstraction Library錛屾槸Openh323鐨勪笅涓涓増鏈紝瀹冧粛鐒朵嬌鐢ㄤ簡Openh323鐨勪綋緋葷粨鏋勶紝騫跺湪鍏跺熀紜涓婅繘琛屾墿灞曪紝鍚屾椂瀹炵幇浜哠IP,H.323錛屼絾鍦ㄩ煶棰戝拰瑙嗛鐨勭紪鐮佸拰浼犺緭閮ㄥ垎鏈夎緝澶ф敼鍔ㄣ侽PAL鍒濊》璁捐鏄寘鍚換浣曠數璇濋氫俊鍗忚錛屾墍浠ュ叾搴曞眰榪涜浜嗛珮搴︾殑鎶借薄鍖栵紝鎵浠ヤ篃鑳藉寰堝鏄撶殑鏀寔MGCP,PSTN鍜屽皢鏉ヤ細鍑虹幇鐨勫崗璁備笉榪囩敱浜嶰penh323鐨勬渶鍚庝竴涓増鏈繕鍦ㄥ紑鍙戜腑錛屾墍浠ュ師鏈?鏈堝彂甯冪殑OPAL涔熻鎺ㄨ繜錛岀幇鏈夌殑OPAL榪橀潪甯鎬笉瀹屽杽錛孊UG涔熼潪甯稿錛屼笉榪囩浉淇′互Openh323鐨勫紑鍙戠彮搴曪紝涓瀹氳兘璁㎡PAL鍗佸垎浼樼銆?

CVS : :pserver:anonymous@cvs.sourceforge.net:/cvsroot/openh323/opal
Language : C++
VxWorks port : Yes 
Win32 port : Yes 
Linux port : Yes 
Supports RFC 3261 : Yes 
Supports RFC 2327 : Yes 
Supports RFC 3264 : Yes 
Supports RFC 3263 : No 
Supports RFC 3515 : Yes 
Supports RFC 3262 : No 
Supports RFC 3311 : No 
TCP : Yes 
UDP : Yes 
SIZE :  8MB
License : MPL
Document : None
Samples : UA,GK

    VOCAL鏄痸ovida.org寮鍙戠殑SIP緋葷粺錛孷OCAL搴旇鏄洰鍓嶅姛鑳芥渶瀹屽杽錛屼嬌鐢ㄨ呮渶澶氱殑寮婧怱IP鍗忚鏍堜簡.瀹冧笉鍙寘鎷簡鍗忚鏍堬紝榪樺寘鎷簡h323涓巗ip杞崲緗戝叧錛屽SIP鐨勫悇縐峉erver鐨勫姛鑳芥敮鎸佷篃闈炲父瀹屽杽.涓嶈繃寰堝彲鎯滐紝涓嶆敮鎸亀indows騫沖彴錛岃屼笖鑷粠vovida琚獵ISCO鏀惰喘浠ュ悗灝卞仠姝簡寮鍙戯紝鏈鍚庣殑鐗堟湰鏄?003騫?鏈堢殑1.5.0銆?
CVS : :pserver:anonymous@cvs.vovida.org:/cvsroot/vocal
Language : C++
VxWorks port : No 
Win32 port : Partial 
Linux port : Yes 
Supports RFC 3261 : Partial 
Supports RFC 2327 : Yes 
Supports RFC 3264 : 
Supports RFC 3263 : 
Supports RFC 3515 : Yes 
Supports RFC 3262 : 
Supports RFC 3311 : 
TCP : Yes 
UDP : Yes 
SIZE : 6MB
License: Vovida software licencse
Document : Few
Samples : UA,GK,GW

    sipX鏄竴涓猄IP緋葷粺錛岀敱SIPFoundry寮鍙戙俿ipX鏄粠reSIProcate鍒嗙鍑烘潵鐨勶紝sipX闄や簡鍖呮嫭SIP stack澶栵紝榪樺寘鎷簡sipXphone,sipXproxy,sipXregistry絳夌瓑...,鐢卞畠浠瀯鎴愪簡瀹屾暣鐨凷IP緋葷粺錛岃屼笖sipx榪樻敮鎸佸祵鍏ュ紡緋葷粺錛屽悇涓ā鍧楀彲浠ユ寜闇鍙栬垗銆備笉榪囧彲鎯滄槸鍑犱箮娌℃湁浠諱綍寮鍙戞枃妗c?
SVN : http://scm.sipfoundry.org/viewsvn/
Language : C++
VxWorks port : Yes 
Win32 port : Yes 
Linux port : Yes 
Supports RFC 3261 : Yes 
Supports RFC 2327 : Yes 
Supports RFC 3264 : Yes 
Supports RFC 3263 : Yes 
Supports RFC 3515 : Yes 
Supports RFC 3262 : No 
Supports RFC 3311 : No 
TCP : Yes 
UDP : Yes 
SIZE : <4 Mb 
License : LGPL 
Document : None
Samples : UA,GK,GW

    ReSIProcate鍚屾牱涔熸槸鐢盨IPFoundry寮鍙戯紝ReSIProcate鏈寮濮嬭搗婧愪簬Vocal,鐢變簬Vocal寮濮嬪彧鏀寔rfc3254錛屼負浜嗘敮鎸佹渶鏂扮殑rfc3261,ReSIProcate璇炵敓浜嗭紝浣嗙幇鍦紝ReSIProcate宸茬粡鎴愪負涓涓嫭绔婼IP鍗忚鏍堜簡錛屽畠鍗佸垎紼沖畾錛屽茍涓斿緢澶氬晢涓氱▼搴忛兘鍦ㄤ嬌鐢ㄣ?
SVN : http://scm.sipfoundry.org/viewsvn/resiprocate/main/sip/
Language : C++
VxWorks port : No 
Win32 port : Yes 
Linux port : Yes 
Supports RFC 3261 : Yes 
Supports RFC 2327 : Yes 
Supports RFC 3264 : Yes 
Supports RFC 3263 : Partial 
Supports RFC 3515 : Yes 
Supports RFC 3262 : No 
Supports RFC 3311 : No 
TCP : Yes 
UDP : Yes 
SIZE : < 2.5 Mb 
License : Vovida 
Document : Few
Samples : None

    oSIP鐨勫紑鍙戝紑濮嬩簬2000騫?鏈堬紝絎竴涓増鏈湪2001騫?鏈堝彂甯冿紝鍒扮幇鍦ㄥ凡緇忓彂灞曞埌2.0.9浜嗐傚畠閲囩敤ANSI C緙栧啓錛岃屼笖緇撴瀯綆鍗曞皬宸э紝鎵浠ラ熷害鐗瑰埆蹇紝瀹冨茍涓嶆彁渚涢珮灞傜殑SIP浼氳瘽鎺у埗API,瀹冧富瑕佹彁渚涗竴浜涜В鏋怱IP/SDP娑堟伅鐨凙PI鍜屼簨鍔″鐞嗙殑鐘舵佹満錛宱SIP鐨勪綔鑰呰繕寮鍙戜簡鍩轟簬oSIP鐨刄A lib:exosip鍜宲roxy server lib:partysip.
CVS : :ext:anoncvs@savannah.gnu.org:/cvsroot/osip
Language : C
VxWorks port : Yes 
Win32 port : Yes 
Linux port : Yes 
Supports RFC 3261 : Yes 
Supports RFC 2327 : Yes 
Supports RFC 3264 : Yes 
Supports RFC 3263 : Yes
Supports RFC 3515 : No 
Supports RFC 3262 : No 
Supports RFC 3311 : Yes 
TCP : Yes
UDP : Yes
SIZE : 400kb 
License : LGPL
Samples : UA,GK

    緇煎悎涓婅堪璇勬祴錛屽彲浠ョ湅鍑?縐峉IP鍗忚鏍堝悇鏈夊崈縐嬶紝OPAL鏈夊彂灞曟綔鍔涳紝VOCAL姣旇緝瀹屽杽錛宻ipX鍏煎鎬уソ錛孯eSIProcate鏁欑ǔ瀹氾紝oSIP灝忓閥鑰屽揩閫熴傛墍浠ヨ鏍規嵁搴旂敤鐨勪笉鍚岄夋嫨鎭板綋鐨勫崗璁爤榪涜鐮旂┒寮鍙戙?/p>

]]>
鍩轟簬DirectShow鐨凪PEG-4瑙嗛浼犺緭緋葷粺鐨勭爺絀朵笌瀹炵幇http://m.shnenglu.com/niewenlong/archive/2007/09/24/32782.html鑱傛枃榫?/dc:creator>鑱傛枃榫?/author>Mon, 24 Sep 2007 06:47:00 GMThttp://m.shnenglu.com/niewenlong/archive/2007/09/24/32782.htmlhttp://m.shnenglu.com/niewenlong/comments/32782.htmlhttp://m.shnenglu.com/niewenlong/archive/2007/09/24/32782.html#Feedback0http://m.shnenglu.com/niewenlong/comments/commentRss/32782.htmlhttp://m.shnenglu.com/niewenlong/services/trackbacks/32782.html鍏抽敭璇?瑙嗛; 閲囬泦; 鍘嬬緝; DirectShow; MPEG-4,RTP

1 寮曡█
    榪戝勾鏉ワ紝闅忕潃鍥芥皯緇忔祹鐨勫彂灞曪紝紺句細鍚勪釜閮ㄩ棬瀵逛簬瑙嗛鐩戣緋葷粺鐨勯渶姹傝秺鏉ヨ秺澶氥備絾鐩墠鐨勫緢澶氱洃瑙嗙郴緇熼兘璺熷叿浣撶殑紜歡鐩稿叧錛屽繀欏昏鍏蜂綋鐨勯噰闆嗗崱鐨勬敮鎸佹墠鑳藉疄鐜般傛墍浠ユ湁蹇呰寮鍙戜竴縐嶅叿鏈夐氱敤鎬х殑瑙嗛鐩戣緋葷粺錛岀敤鏅氱殑鎽勫儚澶村氨鑳藉疄鐜拌棰戠殑閲囬泦銆?br>    鍩轟簬DirectShow鐨勫紑鍙戣兘寰堢伒媧誨湴鎺у埗闊寵棰戠殑鏁堟灉錛屾墍浠ラ夋嫨DirectShow榪欑鍙墿灞曟уソ鐨勬妧鏈仛寮鍙戝浠ュ悗鐨勫簲鐢ㄥ崌綰у緢鏈夊府鍔┿傛澶栵紝 涓轟簡瀹炵幇嫻佸獟浣撲紶杈撴帶鍒剁殑絳栫暐錛屾祦濯掍綋鐨勪紶杈撳拰鍥炴斁涔熸槸搴旇В鍐崇殑闂涔嬩竴銆傜敱Microsoft鎻愪緵鐨凞irectShow鎶鏈熀浜庣粍浠跺璞℃ā鍨嬫妧鏈紝鏀?鎸佸鏉劇殑鏍煎紡鍙樺寲錛屾彁渚涢珮鍝佽川鐨勫濯掍綋嫻佸洖鏀俱傚埄鐢ㄥ畠鍙互鍦ㄦ櫘閫氬井鏈轟腑瀹炵幇嫻佸獟浣撶殑瀹㈡埛绔鐞嗭紝騫跺彲浠ユ彁楂樼郴緇熺殑閫氱敤鎬у拰鍙墿灞曟с?br>    瀵逛簬瑙嗛鏁版嵁鐨勪紶杈擄紝鍘嬬緝鐜囨槸涓涓繀欏昏冭檻鍒扮殑鍥犵礌銆侻PEG-4鏄敱ISO鍜孖EC鐨凪PEG緇勫埗瀹氱殑涓涓叧浜庢椿鍔ㄥ浘鍍忓拰澹伴煶鐨勭紪鐮佸浗闄呮爣鍑嗐傚畠鍦ㄥ熀浜?鍐呭鐨勪氦浜掓с佸帇緙╃巼銆侀氱敤璁塊棶鑳藉姏絳夋柟闈㈡彁渚涗簡涓緋誨垪鏂扮殑鎴栨敼榪涚殑鍔熻兘銆侻PEG-4瑙嗛鍦ㄦ彁渚涜緝濂界殑鍥懼儚璐ㄩ噺鐨勫悓鏃舵嫢鏈夎緝楂樼殑鍘嬬緝鐜囷紝閫傚悎浜庝綔涓轟紶杈?鐨勫浘鍍忓帇緙╂爣鍑嗐?

2  鐩稿叧鎶鏈?br>
2.1 DirectShow鎶鏈畝浠?br>
     DirectShow鏄疢icrosoft涓哄紑鍙戦珮鎬ц兘澶氬獟浣撳簲鐢ㄨ屽紑鍙戠殑搴曞眰搴旂敤紼嬪簭鎺ュ彛錛圓PI錛?瀹冩槸DirectX瀹舵棌鐨勬牳蹇冩垚鍛樹箣涓銆?DirectShow鑷韓鏄氳繃涓縐嶇郴緇熷唴緗殑鎴栫▼搴忓憳寮鍙戠殑榪囨護鍣紙Filter錛夋潵鎺у埗鍜屽鐞嗗濯掍綋鏁版嵁鐨勪綋緋葷粨鏋勩傝浣撶郴緇撴瀯瀹氫箟浜嗗浣曞鐞嗗拰鎺у埗 榪囨護鍣ㄥ唴閮ㄥ強鐩鎬簰涔嬮棿鐨勫濯掍綋鏁版嵁嫻併傛瘡涓繃婊ゅ櫒閮芥湁杈撳叆鎴栬緭鍑洪拡錛圥in錛? 鎴栦袱鑰呴兘鏈夈?br>    榪囨護鍣紙Filter錛夋槸DirectShow鐨勫熀鏈粍鎴愰儴鍒嗭紝鏄疐ilter Graph(榪囨護鍣ㄥ浘)涓渶灝忕殑鍔熻兘妯″潡錛孌irectShow灝嗗濯掍綋鏁版嵁鐨勫鐞嗗垎紱繪垚涓嶅悓鐨勬楠わ紝榪欎簺涓嶅悓鐨勬楠ょ敱鐩稿簲鐨凢ilter鍘誨鐞嗐傝繖鏍鋒垜 浠彲浠ユ妸涓嶅悓鐨勮繃婊ゅ櫒鎼厤鍦ㄤ竴璧瘋揪鍒版垜浠姹傜殑鏉ュ鐞嗗濯掍綋鏁版嵁銆傝繃婊ゅ櫒鏍規嵁瀹炵幇鍔熻兘鐨勪笉鍚屽ぇ鑷村彲鍒嗕負3綾伙細
錛?錛?nbsp;婧愯繃婊ゅ櫒錛圫ource Filters錛夈傛簮榪囨護鍣ㄨ礋璐e緱鍒板師濮嬪獟浣撴暟鎹傝繖浜涘獟浣撴暟鎹殑鏉ユ簮鍖呮嫭鏈湴紜洏鎴栫綉緇滀笂鐨勫獟浣撴枃浠躲佸悇縐嶉噰闆嗗崱絳夈?br>錛?錛?nbsp;杞崲榪囨護鍣紙Transform Filters錛夈傝漿鎹㈣繃婊ゅ櫒鐨勪換鍔℃槸澶勭悊浠庡叾浠栬繃婊ゅ櫒涓帴鏀剁殑鏁版嵁錛岀粡榪囦竴瀹氱殑澶勭悊鍚庡啀浼犻掔粰涓嬩竴涓繃婊ゅ櫒銆傜紪瑙g爜鍣ㄥ氨鏄吀鍨嬬殑杞崲榪囨護鍣ㄣ?br>錛?錛?nbsp;琛ㄧ幇榪囨護鍣紙Rendering Filters錛夈傝〃鐜拌繃婊ゅ櫒瀵規帴鏀跺埌鐨勬暟鎹繘琛屾渶鍚庣殑澶勭悊銆傚畠鍋氱殑宸ヤ綔鏈夛細鎶婂獟浣撴暟鎹繚瀛樹負鏂囦歡銆佸皢鏁版嵁鍙戦佸埌緗戠粶銆佹樉紺鴻棰戙佸洖鏀鵑煶棰戠瓑[1]銆?br>    鍦―irectShow 緋葷粺涔嬩笂鏄簲鐢ㄧ▼搴?Application) 銆傚簲鐢ㄧ▼搴忚鎸夌収紼嬪簭鎵瑕佸疄鐜扮殑鍔熻兘寤虹珛璧風浉搴旂殑Filter Graph ,鐒跺悗鍊熷姪浜嶧ilter Graph Manager 鏉ユ帶鍒舵暣涓暟鎹殑澶勭悊榪囩▼銆侱irectShow 鑳藉湪Filter Graph 榪愯鐨勬椂鍊欐帴鏀跺埌鍚勭浜嬩歡,騫墮氳繃娑堟伅鐨勬柟寮忓彂閫佸埌搴旂敤紼嬪簭銆傝繖鏍峰氨瀹炵幇浜嗗簲鐢ㄧ▼搴忎笌DirectShow 緋葷粺涔嬮棿鐨勪氦浜掋?br>2.2 RTP/RTCP鍗忚浠嬬粛
    瀹炴椂浼犺緭鍗忚RTP(Realtime Transport Protocol)鏄拡瀵笽nternet 涓婂濯掍綋鏁版嵁嫻佺殑涓涓紶杈撳崗璁紝1996 騫寸敱IETF( Internet 宸ョ▼浠誨姟緇? 鐨凙VT灝忕粍浣滀負RFC1889 鍙戝竷AVT灝忕粍鍚庢潵瀵硅鏂囨。榪涜浜嗕笉鏂敼榪涳紝浜?003騫?鏈堟彁鍑轟簡浠f浛RFC1889鐨凴FC3550銆俁TP鍏呭垎浣撶幇浜嗗簲鐢ㄥ眰鍒嗗撫榪欎竴鐜頒唬閫氫俊鍗忚鐨?璁捐鎬濇兂錛屽厑璁稿叾鐢ㄦ埛浜嗚В銆佽皟鏁寸敋鑷沖埗瀹氳繛緇獟浣撶殑鎵撳寘鏂規錛岃鍗忚琚箍娉涚敤浜嶸oIP銆佽棰戠瓑瀹炴椂濯掍綋鐨勪紶閫併俁TP 鍗忚鍖呮嫭RTP 鍜孯TCP(RTP 鎺у埗鍗忚) 涓や釜鍏崇郴鍗佸垎瀵嗗垏鐨勫瓙鍗忚錛?br>    (1)  RTP鍗忚錛嶄紶杈撳叿鏈夊疄鏃剁壒鎬х殑鏁版嵁錛?br>    錛?錛塕TCP鍗忚-鐩戞祴QoS 鍜屼紶閫佸弬涓庝紶杈撹呯殑淇℃伅銆?br>    RTP(瀹炴椂浼犺緭鍗忚) 閫氬父宸ヤ綔鍦║DP鐨勪笂灞傦紝浠庝笂灞傛帴鏀跺濯掍綋淇℃伅鐮佹祦(濡侻PEG-4瑙嗛) 錛岀粍瑁呮垚RTP 鏁版嵁鍖?鐒跺悗鍙戦佺粰涓嬪眰UDP 錛岀浉褰撲簬OSI 鐨勪細璇濆眰錛屾彁渚涘悓姝ュ拰鎺掑簭鏈嶅姟銆傛晠RTP 鍗忚閫傜敤浜庝紶閫佽繛緇у己鐨勬暟鎹紝濡傝棰戙侀煶棰戠瓑錛屽茍瀵圭綉緇滃紩璧風殑鏃跺歡宸敊鏈変竴瀹氱殑鑷傚簲鑳藉姏銆俁TCP 涓哄疄鏃舵帶鍒跺崗璁紝鐢ㄤ簬綆$悊鎺у埗淇℃伅錛屽鐩戣緗戠粶鐨勫歡鏃跺拰甯﹀錛屼竴鏃︽墍浼犺緭鐨勫濯掍綋淇℃伅鐨勫甫瀹藉彂鐢熷彉鍖栵紝鎺ユ敹绔垯閫氱煡鍙戦佺錛屽箍鎾鍙峰寲璇嗗埆鐮佸拰緙栫爜鍙傛暟錛?杈懼埌鎺у埗浼犺緭璐ㄩ噺鐨勭洰鐨勩傛澶?濡傛灉搴曞眰緗戠粶鏀寔澶氱偣浼犳挱鐨勮瘽錛孯TP 榪樻敮鎸佷嬌鐢ㄥ鐐逛紶鎾悜澶氫釜鐩殑绔偣鍙戦佹暟鎹?br>    RTP鍗忚鍏鋒湁濡備笅鐗圭偣[5]錛?br>錛?錛夌伒媧繪?br>    RTP鍗忚鐨勬暟鎹姤鏂囧拰鎺у埗鎶ユ枃浣跨敤涓嶅悓鐨勭鍙o紝鏁版嵁嫻佸拰鎺у埗嫻佸垎紱伙紝榪欐牱澶уぇ鍦版彁楂樹簡鍗忚鐨勭伒媧繪э紝澶勭悊涔熺畝鍗曘?br>錛?錛夋敮鎸佸鎾?br>    濡傛灉涓嬪眰緗戣礬鏀寔錛屽彲浠ユ敮鎸佸鎾?br>錛?錛夊彲鎵╁睍鎬?br>    RTP鍗忚閫氬父涓轟竴涓叿浣撶殑搴旂敤鎻愪緵鏈嶅姟錛岄氳繃涓涓叿浣撶殑搴旂敤榪涚▼瀹炵幇錛岃屼笉浣滀負OSI浣撶郴緇撴瀯涓崟鐙殑涓灞傛潵瀹炵幇錛孯TP鍙彁渚涘崗璁鏋訛紝寮鍙戣呭彲浠ユ牴鎹簲鐢ㄧ殑鍏蜂綋瑕佹眰瀵瑰崗璁繘琛屽厖鍒嗙殑鎵╁睍銆?br>
3 鍏抽敭鎶鏈殑瀹炵幇

    璇ョ郴緇熺殑鍙戦佺瀹炵幇鎬濊礬濡備笅錛氱敤USB鎽勫儚澶撮噰闆嗘暟鎹紝鐢―ivx 5.1.1 Codec 瀵歸噰闆嗗埌鐨勬暟鎹繘琛孧PEG-4鐨勭紪鐮侊紝鐒跺悗榪炲埌涓涓彂閫丗ilter鎶婄紪鐮佸悗鐨勬暟鎹彂閫佸嚭鍘匯傚叾Filter Graph濡傚浘1鎵紺?錛?

                      鍥?   鍙戦佺鐨凢ilter Graph
   鎺ユ敹绔殑瀹炵幇鎬濊礬濡備笅:閫氳繃涓涓帴鏀禙ilter鎺ユ敹鍙戦佺鍙戦佺殑鏁版嵁錛岀劧鍚庡啀鐢―ivx Decoder Filter瀵規帴鏀跺埌鐨勬暟鎹繘琛岃В鐮併傛渶鍚庣敤Video Renderer鎶婅В鐮佸悗鐨勬暟鎹挱鏀懼嚭鏉ャ傚叾Filter Graph濡傚浘2鎵紺猴細

                      鍥?   鎺ユ敹绔殑Filter Graph
3.1  鏁版嵁閲囬泦鍙婄紪鐮佺殑瀹炵幇
3.1.1 閲囬泦Filter Graph鐨勫疄鐜?/strong>
    閲囬泦搴旂敤鐨凢ilter Graph涓鑸瘮杈冨鏉傦紝鑰岀洿鎺ヤ嬌鐢‵ilter Graph Manager涓婄殑IGraphBuilder鎺ュ彛鏋勫緩榪欑Filter Graph,鏈夋椂鍊欓毦搴﹀張寰堝ぇ銆備負姝わ紝DirectShow鐗瑰埆鎻愪緵浜嗕竴涓緟鍔╃粍浠禖apture Graph Builder,鏉ョ畝鍖栬繖縐岶ilter Graph鐨勫垱寤恒?br>    棣栧厛鏄垱寤篎ilter Graph Manager 緇勪歡錛屾牳蹇冧唬鐮佸涓嬶細
 

3.1.2 鍔犲叆閲囬泦Filter

3.1.3鍔犲叆MPEG-4緙栫爜鍣‵ilter
    榪欓噷鎴戜滑閲囩敤Divx 鎻愪緵鐨勫紑婧愮紪鐮丗ilter銆傚畨瑁匘ivX.Pro.v5.1.1鍚庝細鑷姩瀹夎Divx鐨勭紪鐮佸櫒Filter鍜岃В鐮佸櫒Filter錛堟敞錛氳В鐮佸櫒 Filter鍦ㄦ帴鏀剁瑕佺敤鍒幫級銆傚湪紼嬪簭涓姞鍏ivx鐨勭紪鐮佸櫒Filter錛屽疄鐜版濇兂鏄湪Video Compressors鐩綍涓嬫灇涓懼埌鍚嶇О涓?DivX Pro(tm) 5.1.1 Codec"鐨凢ilter欏瑰悗錛屾妸瀹冨姞鍏ュ埌Filter Graph涓嵆鍙?br>3.2 鏁版嵁鐨勫彂閫佸拰鎺ユ敹
3.2.1 鏁版嵁鐨勫彂閫丗ilter鐨勫疄鐜?/strong>  
    鏁版嵁鐨勫彂閫佽寮鍙戜竴涓彂閫丗ilter錛屼負浜嗙紪紼嬩笂鐨勬柟渚匡紝榪欓噷閲囩敤紼嬪簭鍐匜ilter鐨勫艦寮忔潵瀹炵幇銆傚嵆鐢ㄧ被鐨勫艦寮忚屼笉鏄紪鍐欎竴涓垚涓涓悗緙涓篴x鐨勭粍浠?娉ㄥ唽鍚庡啀浣跨敤銆傝繖閲屾垜浠畾涔変竴涓戶鎵胯嚜CBaseFilter鐨勭被CFilterMpeg4Sender銆傝繖涓被蹇呴』瀹炵幇浠ヤ笅鍔熻兘[3]錛?br>   (1) 鍦ㄧ被涓畾涔塁FilterMpeg4Sender涓婄殑Pin鐨勫疄渚媘InputPin銆?br>   (2) 瀹炵幇緇ф壙鑷狢BaseFilter::GetPin,鐢ㄤ簬榪斿洖Filter涓婂悇涓狿in鐨勫璞℃寚閽堛?br>   (3) 瀹炵幇緇ф壙鑷狢BaseFilter::GetPin,鐢ㄤ簬榪斿洖Filter涓婂悇涓狿in鐨勬暟閲忋?br>    瀹氫箟涓涓戶鎵胯嚜CRenderedInputPin鐨勭被CMpeg4InputPin錛岀敤浜庡疄鐜癈FilterMpeg4Sender涓婄殑杈撳叆pin錛屽彂閫丗ilter閫氳繃璇ヨ緭鍏in鎺ユ敹緙栫爜Filter杈撳嚭鐨勬暟鎹紝鐒跺悗鎸変竴瀹氱殑瑙勫垯鍙戦併?br>    榪欎釜綾誨繀欏誨疄鐜頒互涓嬪姛鑳絒2]錛?br>   (1) 閲嶅啓鏂規硶EndOfStream銆?br>   (2) 瀹炵幇IPin::BeginFlush鍜孖Pin::EndFlush涓や釜鍑芥暟銆?br>   (3) 閲嶅啓鏂規硶CBasePin::CheckMediaType榪涜榪炴帴鏃跺獟浣撶被鍨嬬殑媯鏌ャ?br>   (4) 閲嶅啓鏂規硶CBasePin:: Receive(),鎺ユ敹Sample騫跺彂閫?br>3.2.2 鏁版嵁鐨勬帴鏀禙ilter鐨勫疄鐜?
鏁?鎹殑鎺ユ敹鍏跺疄鏄緙栧啓涓涓猄ource Filter, 榪欎釜Source Filter鍚嶇О涓篊FilterMpeg4Receiver錛屼篃緇ф壙鑷狢BaseFilter銆傝繖璺熷彂閫丗ilter鐨勫疄鐜版湁浜涚被浼鹼紝鏈変竴鐐歸渶瑕佹敞鎰忕殑 鏄Filter杈撳嚭鐨凪ediaType鐨勮緗?br>     Char  MediaType[]=//濯掍綋鏁版嵁綾誨瀷,閫氳繃鍦ㄥ彂閫佺鎶婂獟浣撶被鍨嬪啓鍒頒竴涓枃浠朵腑鑰屽緱鍒扮劧鍚庨氳繃璇彞錛欳FilterMpeg4Receiver:: SetupMediaType((char *)MediaType,88)璁劇疆杈撳嚭鏁版嵁鐨凪ediaType銆?br>    CFilterMpeg4Receiver::SetupMediaType鍐嶈皟鐢–Mpeg4OutPin::SetupMediaType錛堬級璁劇疆銆佹帴鏀跺埌鐨勫獟浣撴暟鎹殑鏍煎紡錛?br>3.2.3 鏁版嵁鐨勭綉緇滀紶杈撶殑瀹炵幇
 
 
     鏁版嵁鐨勫彂閫佹垜浠噰鐢ㄥ紑婧愪唬鐮丣RTPLIB銆?銆戞彁渚涚殑RTP鍗忚鏍堛傛渶鏂扮殑JRTPLIB瀵筊FC3550鐨勫疄鐜拌繘琛屼簡灝佽錛屽紑鍙戜漢鍛樺彧瑕佸垵姝ヤ簡瑙?RTP鍗忚灝卞彲浠ュ紑鍙戝嚭楂樿川閲忕殑闊寵棰戜紶杈撶▼搴忋備嬌鐢↗RTPLIB鏃訛紝鍙渶瑕侀氳繃緇ф壙RTPSession綾伙紝鍐嶉噸鏂頒互涓嬪嚑涓嚱鏁板氨鍙互瀹炵幇瑙嗛鏁版嵁鐨?鎺ユ敹銆?/p>


     鍦ㄧ綉緇滃甫瀹芥瘮杈冧綆鐨勬儏鍐典笅錛堝鍗佸嚑KBps錛夛紝鏁版嵁涓㈠撫鐜拌薄姣旇緝涓ラ噸錛岃繖瀵逛簬鍥懼儚璐ㄩ噺鏈夊緢澶х殑褰卞搷銆傛垜浠噰鐢ㄦ媶甯э紙鎷嗘垚1400涓瓧鑺傦級浠ュ悗鍐嶅彂閫佺殑鏂規硶錛屾潵闄嶄綆涓㈠撫鐜囥傛帴鏀剁鏀跺埌鏁版嵁鍚庯紝鍐嶆妸灞炰簬鍚屼竴瑙嗛甯х殑鏁版嵁鍐嶇粍璧鋒潵銆?br>    緗戠粶鍙戦佹帴鏀剁▼搴忔祦紼嬪浘濡傚浘3鎵紺猴細

鍥?  緗戠粶鍙戦佹帴鏀剁▼搴忔祦紼嬪浘


    瀵圭▼搴忔祦紼嬪浘鐨勮鏄庡涓嬶細
錛?錛夊彂閫佺鎷嗗撫鐨勭畻娉曞涓嬶細

   鐒跺悗鎶婂睘浜庡悓涓瑙嗛甯х殑鏁版嵁緇勫ソ錛屽彂閫佸埌瑙g爜Filter銆?br>   緇忚繃嫻嬭瘯錛堝湪CDMA1.X緗戠粶涓嬶級錛岄噰鐢ㄦ媶甯ф柟娉曚紶杈撹棰戞暟鎹瘮鐩存帴鍙戦佷涪鍖呯巼鏇翠綆錛屼紶杈撹川閲忔湁浜嗗緢澶х殑鎻愰珮銆?br>3.3 鏁版嵁瑙g爜鍙婂洖鏀劇殑瀹炵幇
    瑙g爜Filter浣跨敤鐨勬槸Divx鎻愪緵鐨勫紑婧愯В鐮佸櫒錛屽湪鎺ユ敹Filter鐨勫悗闈㈡帴涓婅瑙g爜Filter鍗沖彲錛屾渶鍚庢帴涓奟enderer Filter灝卞彲浠ユ妸鎺ユ敹鍒扮殑鏁版嵁鍥炴斁鍑烘潵銆?br>3.4 瀹炵幇甯х巼鎺у埗鍔熻兘
    閫氳繃鍦ㄩ噰闆嗚澶囧拰緙栫爜Filter錛圖ivX Pro(tm) 5.1.1 Codec錛変箣闂村姞鍏ヤ竴涓撫鐜囨帶鍒禙ilter鏉ュ疄鐜板撫鐜囩殑鎺у埗錛岃Filter鐩稿綋浜庝竴涓棰戝撫鏁拌鏁板櫒錛屾瘡鎺ユ敹鍒頒竴甯э紝騫朵笉绔嬪嵆鎶婅甯у彂緇欎笅娓哥殑緙栫爜 Filter錛岃屾槸鎶婅鏁板櫒鐨勫煎姞1錛屽綋璁℃暟鍣ㄧ殑鍊艱揪鍒版渶澶у兼椂鎵嶆妸褰撳墠鏀跺埌鐨勫撫鍙戝嚭鍘匯傚湪鎺ユ敹绔彂鎺у埗甯х巼鍛戒護緇欓噰闆嗙鍙互寰堟柟渚跨殑瀹炵幇甯х巼鐨勮繙绔帶 鍒躲?br>    紼嬪簭鐗囨柇濡備笅錛?br>
    鍔犱簡甯х巼鎺у埗Filter鐨勫彂閫佺 Filter Graph 濡傚浘4鎵紺猴細


鍥?   瀹炵幇浜嗗撫鐜囨帶鍒剁殑Filter Graph 

4 鎬葷粨

    璇ョ郴緇熼噰鐢ㄤ簡DirectShow鎶鏈疄鐜頒簡MPEG-4瑙嗛鏁版嵁鐨勪紶杈擄紝瑙嗛鏁版嵁鐨勪紶杈撻噰鐢ㄤ簡RTP鍗忚銆傝屼笖榪樺疄鐜頒簡榪滅甯х巼鐨勬帶鍒訛紝璇ョ郴緇熷彲浠ュ緢鏂?渚跨殑縐繪鍒版湭鏉?G緗戠粶鐨勫浘鍍忎紶杈撶郴緇熶腑銆傚緙栬В鐮佸櫒榪涜鐮旂┒錛岄噰鐢℉.264鎶鏈疄鐜扮紪瑙g爜Filter鏄笅涓姝ヨ瀹屾垚鐨勫伐浣滐紝褰撶劧鍦ㄤ紶杈撹川閲?錛圦oS錛夋柟闈篃瑕佹繁鍏ヨ繘琛岀爺絀躲?/p>

鍙傝冩枃鐚?/strong>

1  閭墊灄,鏇規眽寮?鍩轟簬DiectShow鐨勮棰戝箍鎾郴緇熻璁′笌瀹炵幇[J].寰瀷鏈轟笌搴旂敤,2004, 4 :58-60
2  Microsoft DirectX C++ SDK Document [EB/OL],2003
3  闄嗗叾鏄?DiectShow寮鍙戞寚鍗梉M].鍖椾含.娓呭崕澶у鍑虹増紺?2004
4  闄嗗叾鏄?DiectShow瀹炲姟綺鵑塠M].鍖椾含:縐戝鍑虹増紺?2004
5  寮犳槑鍗?銆婂熀浜嶳TP鐨勮棰戜紶杈撴帶鍒舵柟娉曠殑鐮旂┒銆媅D].閮戝窞甯傦細閮戝窞澶у, 2004.3
6  Jori Liesenborgs   JRTPLIB 3.1.0 [EB/OL] 

]]>
鐢―irectShow瀹炵幇QQ鐨勯煶瑙嗛鑱婂ぉ鍔熻兘http://m.shnenglu.com/niewenlong/archive/2007/09/24/32781.html鑱傛枃榫?/dc:creator>鑱傛枃榫?/author>Mon, 24 Sep 2007 06:45:00 GMThttp://m.shnenglu.com/niewenlong/archive/2007/09/24/32781.htmlhttp://m.shnenglu.com/niewenlong/comments/32781.htmlhttp://m.shnenglu.com/niewenlong/archive/2007/09/24/32781.html#Feedback0http://m.shnenglu.com/niewenlong/comments/commentRss/32781.htmlhttp://m.shnenglu.com/niewenlong/services/trackbacks/32781.html 銆銆緗戠粶瑙嗛煶棰戠郴緇熶富瑕佸姛鑳藉氨鍦ㄤ簬瑙嗛煶棰戠殑閲囬泦錛岀綉緇滀紶杈撲袱涓柟闈紝閫氳繃Video Capture緋誨垪API鍑芥暟錛屼綘灝卞彲浠ヨ交鏉劇殑鎼炲畾瑙嗛鎹曟崏錛屼絾鏄浜庤棰戠殑緗戠粶浼犺緭錛屽垯瑕佽垂涓鐣姛澶簡銆?瀵逛簬瑙嗛煶棰戞暟鎹殑浼犺緭錛屽彧綆鍗曞湴浣跨敤鏁版嵁鎶ュ鎺ュ瓧浼犺緭闊寵棰戞暟鎹槸涓嶅彲琛岀殑錛岃繕蹇呴』鍦║DP灞備笂閲囩敤RTP錛堝疄鏃朵紶杈撳崗璁級鍜孯TCP錛堝疄鏃朵紶杈撴帶鍒跺崗璁級鏉ユ敼鍠勬湇鍔¤川閲忋傚疄鏃朵紶杈撳崗璁彁渚涘叿鏈夊疄鏃剁壒寰佺殑銆佺鍒扮鐨勬暟鎹紶杈撴湇鍔°傛垜浠湪闊寵棰戞暟鎹墠鎻掑叆鍖呭惈鏈夎澆鑽鋒爣璇嗐佸簭鍙楓佹椂闂存埑鍜屽悓姝ユ簮鏍囪瘑絎︾殑RTP鍖呭ご錛岀劧鍚庡埄鐢ㄦ暟鎹姤濂楁帴瀛楀湪IP緗戠粶涓婁紶杈揜TP鍖咃紝浠ユ鏀瑰杽榪炵畫閲嶆斁鏁堟灉鍜岄煶瑙嗛鍚屾銆傚疄鏃朵紶杈撴帶鍒跺崗璁甊TCP鐢ㄤ簬RTP鐨勬帶鍒訛紝瀹冩渶鍩烘湰鐨勫姛鑳芥槸鍒╃敤鍙戦佽呮姤鍛婂拰鎺ユ敹鑰呮姤鍛婃潵鎺ㄦ柇緗戠粶鐨勬湇鍔¤川閲忥紝鑻ユ嫢濉炵姸鍐典弗閲嶏紝鍒欐敼鐢ㄤ綆閫熺巼緙栫爜鏍囧噯鎴栭檷浣庢暟鎹紶杈撴瘮鐗圭巼錛屼互鍑忓皯緗戠粶璐熻嵎錛屾彁渚涜緝濂界殑Q.S淇濊瘉銆?br>
銆銆Directshow瀵逛簬闊寵棰戠殑閲囬泦鎻愪緵浜嗗緢濂界殑鎺ュ彛錛屽埄鐢↖CaptureGraphBuilder2鎺ュ彛鍙互寰堣交鏉劇殑寤虹珛璧瘋棰戞崟鎹夌殑graph鍥撅紝閫氳繃鏋氫婦闊抽璁懼Filter錛屼篃鍙互寰堣交鏉劇殑瀹炵幇闊抽鐨勬崟鎹夛紝鏈夌偣楹葷儲鐨勬槸闊寵棰戞暟鎹殑浼犺緭錛屾垜浠彲浠ヨ嚜宸卞皝瑁匯TP鍜孯TCP鐨勫崗璁紝鏉ヨ嚜宸卞疄鐜頒竴涓猣ilter錛岀敤鏉ュ彂閫佸拰鎺ユ敹闊寵棰戞暟鎹紝褰撶劧浜咲irectshow涔熸彁渚涗簡涓緇勬敮鎸佷嬌鐢≧TP鍗忚鐨勭綉緇滀紶杈撳濯掍綋嫻佺殑Filters銆備綘涔熷畬鍏ㄥ彲浠ョ敤Directshow鎻愪緵鐨凴TP緋誨垪鐨刦ilter瀹炵幇鏁版嵁鐨勪紶杈撱?br>
銆銆涓嬮潰鍒嗘瀽涓涓嬭繖浜汻TP Filters銆?br>
銆銆鏂板畾涔夌殑Filter鍖呮嫭 RTP Source Filter 錛孯TP Render Filter錛孯TP Demux Filter錛孯TP Receive Playload Handler (RPH) filter錛孯TP Send Payload (SPH) filter錛屼嬌鐢ㄨ繖5涓猣ilter鏋勫緩涓涓氳繃RTP鍗忚浼犺緭闊寵棰戞暟鎹殑Graph鏄病鏈夐棶棰樼殑銆?br>
銆銆RTP Source filter琚敤鏉ヤ粠涓涓崟鐙殑RTP浼氳瘽涓帴鏀禦TP鍜孯TCP鍖呫傝繖涓猣ilter鎻愪緵涓涓寚瀹氬彂閫佺粰鍏跺畠涓繪満RTCP鎺ユ敹鍣ㄦ姤鍛婂拰鎸囧畾緗戠粶鍦板潃鍜岀鍙f帴鍙f潵鎺ユ敹RTP浼氳瘽鐨勬帴鍙c?br>
銆銆RTP Rend filter鏄敤鏉ュ皢鏁版嵁鍙戝埌緗戠粶涓婄殑涓涓猣ilter錛岃繖涓猣ilter涔熸彁渚涗簡鍜孯TP source Filter 綾諱技鐨勬帴鍙c?br>
銆銆RTP Demux filter鐢ㄦ潵澶氳礬鍒嗙鏉ヨ嚜 RTP Source filter鐨凴TP 鍖咃紝榪欎釜filter鏈変竴涓垨鑰呭涓緭鍑虹殑pin銆傝繖涓狥ilter鎻愪緵浜嗗浣曟帶鍒跺璺垎紱誨拰濡備綍鍒嗛厤鍒扮壒瀹氳緭鍑簆in鐨勬帴鍙c?br>
銆銆RTP RPH Filter 鏄敤鏉ョ綉緇滆繃鏉ョ殑RTP鍖呰繕鍘熸垚鍘熸潵鐨勬暟鎹牸寮忥紝涓昏鏀寔H.261錛孒.263錛孖ndeo錛孏.711錛孏.723鍜孏.729鍜屽父瑙佺殑澶氱闊寵棰戣礋杞界被鍨嬨?br>
銆銆RTP SPH filter鍒欏拰RPH filter鐨勫姛鑳界浉瀵癸紝瀹冪殑浠誨姟鏄皢闊寵棰?鍘嬬緝filter杈撳嚭鐨?鏁版嵁鍒嗚В涓篟TP鍖咃紝瀹冩彁渚涚殑鎺ュ彛鏈夋寚瀹氭渶澶х敓鎴愬寘澶у皬鍜宲t鍊箋?br>
銆銆涓嬮潰鎴戜滑鐪嬬湅濡備綍鐢?/font>榪欎簺filter鏉ユ惌寤烘垜浠噰闆嗗拰浼犺緭鐨刧raph鍥俱?br>



銆銆鍥?鍜屽浘2灞曠ず浜咲irectShow RTP涓畾涔夌殑filters濡備綍榪愮敤銆傚浘1鏄竴涓噰闆嗘湰鍦板濯掍綋鏁版嵁騫朵嬌鐢≧TP鍗忚閫氳繃緗戠粶鍙戦佺殑filter graph銆傚畠鍖呭惈涓涓緭鍑哄師濮嬭棰戝撫鐨勮棰戦噰闆唂ilter錛岀揣璺熶竴涓帇緙╁撫鐨勭紪鐮乫ilter銆備竴鏃﹀帇緙╋紝榪欎簺甯у氨浼氳鍙戦佸埌RTP SPH filter錛屽垎鐗囨墦鍖咃紝鐢熸垚RTP鍖咃紝瀵瑰簲鐨勫彂閫佸埌 RTP Render filter錛岄氳繃緗戠粶浼犺緭榪欎簺鍖呫傚浘2灞曠幇浜嗕竴涓猣ilter graph錛岀敤鏉ユ帴鏀跺寘鍚棰戞祦RTP鍖咃紝鎾斁瑙嗛銆傝繖涓猤raph鐢變竴涓敤鏉ユ帴鏀跺寘鐨凴TP Source filter錛屼竴涓牴鎹簮鍜岃礋杞界被鍨嬭繘琛屽垎綾葷殑RTP Demux filter錛屼竴涓妸RTP鍖呰漿涓哄帇緙╄棰戝撫鐨凴TP RPH filter緇勬垚銆傝繖浜沠ilter闅忓悗鐨勬槸鐢ㄦ潵瑙e帇甯х殑瑙g爜filter錛屼竴涓樉紺烘湭鍘嬬緝甯х殑娓叉煋filter銆?br>
銆銆鏈変簡RTP filter鐨勫府鍔╂垜浠氨鍙互瀹屾垚綾諱技qq鐨勫姛鑳戒簡錛屽彲浠ュ疄鐜板湪緗戠粶涓婅繘琛岃棰戝拰闊抽鐨勪氦浜掍簡錛屼笅闈㈡垜緇欏嚭鍦ㄧ綉緇滀笂涓や釜瀹㈡埛绔疉鍜孊榪涜闊抽鍜岃棰戜氦浜掔殑Graph鍥俱傝繖閲屾垜瀵瑰浘1鍜屽浘2涓殑RTP filter榪涜浜嗚嚜宸卞皝瑁咃紝灝嗙紪瑙g爜filter鐩存帴灝佽鍒頒簡RTP Source filter 鍜孯TP Render filter涓紝榪欐牱Graph鍥懼氨鏄懼緱寰堢畝媧侊紝RTP Source filter鍙槸鐢ㄦ潵鎺ユ敹緗戠粶榪囨潵鐨勯煶瑙嗛鏁版嵁錛岀劧鍚庡皢鏁版嵁浼犻掔粰瀹㈡埛紼嬪簭錛孯TP Render filter鍒欐槸灝嗛噰闆嗗埌鐨勯煶瑙嗛鏁版嵁鍙戦佸埌緗戠粶涓婄殑鍙︿竴涓鎴風錛岀紪瑙g爜鍒欑殑宸ヤ綔鍒欏皝瑁呭埌榪欎袱涓猣ilter涔嬩腑銆?br>

鍥? 緗戠粶瑙嗛鍜岄煶棰戜氦浜掔殑Graph鍥?/div>

銆銆濡傛灉浣犱篃鎯寵嚜宸卞皝瑁呰嚜宸辯殑Source 鍜孯ender filter錛岄鍏堜綘瑕侀夋嫨鑷繁鐨勭紪瑙g爜錛岃棰戠紪瑙g爜鏄夋嫨H261錛孒263錛岃繕鏄?MEPG4錛岄煶棰戞槸閫夋嫨G729榪樻槸G711錛岃棣栧厛紜畾濂姐傞夊ソ緙栬В鐮侊紝灝佽鐨勫伐浣滃氨綆鍗曚簡銆?br>
銆銆涓嶅璇翠簡錛屼笅闈㈢湅鐪嬫垜緇欏嚭鐨勪唬鐮佸惂銆?br>
銆銆棣栧厛瑕佸畾涔変竴涓嬬敤鍒扮殑鍥涗釜RTP filter鐨凜LSID銆?br>
static const GUID CLSID_FG729Render = { 0x3556f7d8, 0x5b5, 0x4015, { 0xb9, 0x40, 0x65, 0xb8, 0x8, 0x94, 0xc8, 0xf9 } }; //闊抽鍙戦?
static const GUID CLSID_FG729Source = { 0x290bf11a, 0x93b4, 0x4662, { 0xb1, 0xa3, 0xa, 0x53, 0x51, 0xeb, 0xe5, 0x8e } };//闊抽鎺ユ敹
static const GUID CLSID_FH263Source = { 0xa0431ccf, 0x75db, 0x463e, { 0xb1, 0xcd, 0xe, 0x9d, 0xb6, 0x67, 0xba, 0x72 } };//瑙嗛鎺ユ敹
static const GUID CLSID_FH263Render = { 0x787969cf, 0xc1b6, 0x41c5, { 0xba, 0xa8, 0x4e, 0xff, 0xa3, 0xdb, 0xe4, 0x1f } };//瑙嗛鍙戦?br>//鍙戦佸拰鎺ユ敹闊寵棰戞暟鎹殑filter
CComPtr< IBaseFilter > m_pAudioRtpRender ;
CComPtr< IBaseFilter > m_pAudioRtpSource ;
CComPtr< IBaseFilter > m_pVideoRtpRender ;
CComPtr< IBaseFilter > m_pVideoRtpSource ;

char szClientA[100];
int iVideoPort = 9937;
int iAudioPort = 9938;

//鏋勫緩瑙嗛鐨刧raph鍥?騫跺彂閫佹暟鎹?br>CComPtr< IGraphBuilder > m_pVideoGraphBuilder; //瑙嗛鍥懼艦綆$悊鍣?
CComPtr< ICaptureGraphBuilder2 > m_pVideoCapGraphBuilder;
CComPtr< IBaseFilter > m_pFilterVideoCap;
CComPtr< IVideoWindow > m_pVideoWindow;
CComPtr< IMediaControl > m_pVideoMediaCtrl ;
CComPtr< IBaseFilter > m_pVideoRenderFilter;

HRESULT CMyDialog::VideoGraphInitAndSend()
{
銆HRESULT hr;
銆hr =m_pVideoGraphBuilder.CoCreateInstance( CLSID_FilterGraph );
銆if(FAILED(hr))
銆銆return hr;
銆hr =m_pVideoCapGraphBuilder.CoCreateInstance( CLSID_CaptureGraphBuilder2);
銆if(FAILED (hr))
銆銆return hr;
銆m_pVideoCapGraphBuilder->SetFiltergraph(m_pVideoGraphBuilder);
銆m_pVideoGraphBuilder->QueryInterface(IID_IMediaControl, (void **)&m_pVideoMediaCtrl);
銆m_pVideoGraphBuilder->QueryInterface(IID_IVideoWindow,(void**)&m_pVideoWindow)

銆FindDeviceFilter(&m_pFilterVideoCap,CLSID_VideoInputDeviceCategory);
銆if(m_pFilterVideoCap)
銆銆m_pVideoGraphBuilder->AddFilter( m_pFilterVideoCap,T2W("VideoCap") ) ;
銆銆//鍒涘緩棰勮鐨刦ilter
銆hr = m_pRenderFilterVideo.CoCreateInstance(CLSID_VideoRenderer);
銆if(FAILED(hr))
銆銆return hr;
銆m_pVideoGraphBuilder->AddFilter( m_pRenderFilterVideo, L"VideoRenderFilter" );
銆Connect(m_pFilterVideoCap ,m_pRenderFilterVideo) ;
銆//璁劇疆棰勮鐨勭獥鍙?br>
銆CRect rc ;
銆GetClientRect(m_hOwnerWnd, &rc );
銆int iWidth = rc.right - rc.left ;
銆int iHeight = rc.bottom - rc.top ;
銆int iLeft, iTop;
銆if((iHeight*1.0)/(iWidth*1.0) >= 0.75)
銆{
銆銆//鎸夊搴︾畻
銆銆int tmpiHeight = iWidth*3/4;
銆銆iTop = (iHeight - tmpiHeight)/2;
銆銆iHeight = tmpiHeight;
銆銆iLeft = 0;
銆}
銆else
銆{
銆銆//鎸夐珮搴︾畻
銆銆int tmpiWidth = iHeight*4/3;
銆銆iLeft = (iWidth - tmpiWidth)/2;
銆銆iWidth = tmpiWidth;
銆銆iTop = 0;
銆}
銆m_pVideoWindow->put_Owner( (OAHWND) m_hPreviewWnd ) ;
銆m_pVideoWindow->put_Visible( OATRUE );
銆m_pVideoWindow->put_WindowStyle( WS_CHILD | WS_CLIPSIBLINGS ) ;

銆//榪炴帴鍒扮綉緇滃茍鍙戦?br>銆CComPtr< IRtpOption > pRenderOption;
銆CComPtr< IVideoOption > pVideoOption;

銆tagVideoInfo vif(160,120,24);
銆int t=((int)(m_iFrameRate/5)*5)+5;
銆vif.nBitCount=24;
銆vif.nWidth=160;
銆vif.nHeight=120;

銆hr = ::CoCreateInstance(CLSID_FH263Render, NULL, CLSCTX_INPROC, IID_IBaseFilter, (void **)&m_pVideoRtpRender);
銆if(FAILED(hr))
銆銆return hr;
銆m_pVideoRtpRender->QueryInterface(IID_IJRTPOption, (void**)&pRenderOption);
銆m_pVideoRtpRender->QueryInterface(IID_IVideoOption,(void**)&pVideoOption);
銆pVideoOption->SetProperty(&vif);
銆pVideoOption->SetSendFrameRate(m_iFrameRate,1);//1 涓嶅彂閫佹暟鎹紝0 瀹為檯鍙戦佹暟鎹?br>銆Connect(m_pFilterVideoCap ,m_pVideoRtpRender) ;
銆//榪炴帴瀵規柟
銆hr= pRenderOption->Connect(szClientA,iVideoPort,1024);
銆if(FAILED(hr))
銆銆return hr;
銆m_pVideoMediaCtrl->Run();
}
//瑙嗛鐨勬帴鏀?br>CComPtr< IGraphBuilder > m_pVideoGraphBuilder; //瑙嗛鍥懼艦綆$悊鍣?
CComPtr< IBaseFilter > m_pFilterVideoCap;
CComPtr< IVideoWindow > m_pVideoWindow;
CComPtr< IMediaControl > m_pVideoMediaCtrl ;
CComPtr< IBaseFilter > m_pVideoRenderFilter;
HWND m_hRenderWnd ;
HRESULT VideoRecive()
{
銆HRESULT hr;
銆hr=CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,
銆IID_IFilterGraph,(void**)&m_pVideoGraphBuilder);

銆m_pVideoGraphBuilder->QueryInterface(IID_IMediaControl, (void **)&m_pVideoMediaCtrl);
銆m_pVideoGraphBuilder->QueryInterface(IID_IVideoWindow,(void**)&m_pVideoWindow)

銆hr = ::CoCreateInstance(CLSID_FH263Source, NULL, CLSCTX_INPROC, IID_IBaseFilter, (void **)&m_pVideoRtpSource);
銆if(FAILED(hr))
銆銆return hr;
銆m_pVideoGraphBuilder->AddFilter(m_pVideoRtpSource, L"My Custom Source");

銆CComPtr< IRtpOption > m_pRtpOption;
銆CComPtr< IVideoOption > m_pVideoOption;
銆m_pVideoRtpSource->QueryInterface(IID_IJRTPOption, (void **)&m_pRtpOption);
銆m_pVideoRtpSource->QueryInterface(IID_IVideoOption, (void **)&m_pVideoOption);

銆tagVideoInfo vif(160, 120 ,24);
銆m_pVideoOption->SetProperty(&vif);
銆hr= pRenderOption->Connect(szClientA,iVideoPort +1,1024);
銆if(FAILED(hr))
銆銆return hr;

銆//鍒涘緩棰勮鐨刦ilter
銆hr = m_pRenderFilterVideo.CoCreateInstance(CLSID_VideoRenderer);
銆if(FAILED(hr))
銆銆return hr;
銆m_pVideoGraphBuilder->AddFilter( m_pRenderFilterVideo, L"VideoRenderFilter" );
銆Connect(m_pVideoRtpSource ,m_pRenderFilterVideo) ;

銆CRect rc ;
銆GetClientRect(m_hOwnerWnd, &rc );
銆int iWidth = rc.right - rc.left ;
銆int iHeight = rc.bottom - rc.top ;
銆int iLeft, iTop;
銆if((iHeight*1.0)/(iWidth*1.0) >= 0.75)
銆{
銆銆//鎸夊搴︾畻
銆銆int tmpiHeight = iWidth*3/4;
銆銆iTop = (iHeight - tmpiHeight)/2;
銆銆iHeight = tmpiHeight;
銆銆iLeft = 0;
銆}
銆else
銆{
銆銆//鎸夐珮搴︾畻
銆銆int tmpiWidth = iHeight*4/3;
銆銆iLeft = (iWidth - tmpiWidth)/2;
銆銆iWidth = tmpiWidth;
銆銆iTop = 0;
銆}
銆m_pVideoWindow->put_Owner( (OAHWND) m_hRenderWnd ) ;
銆m_pVideoWindow->put_Visible( OATRUE );
銆m_pVideoWindow->put_WindowStyle( WS_CHILD | WS_CLIPSIBLINGS ) ;
銆m_pVideoMediaCtrl->Run();

銆return S_OK;
}
//
HRESULT FindDeviceFilter(IBaseFilter ** ppSrcFilter,GUID deviceGUID)
{
銆HRESULT hr;
銆IBaseFilter * pSrc = NULL;
銆CComPtr <IMoniker> pMoniker =NULL;
銆ULONG cFetched;

銆if (!ppSrcFilter)
銆銆return E_POINTER;

銆// Create the system device enumerator
銆CComPtr <ICreateDevEnum> pDevEnum =NULL;

銆hr = CoCreateInstance (CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
銆IID_ICreateDevEnum, (void **) &pDevEnum);
銆if (FAILED(hr))
銆銆return hr;

銆// Create an enumerator for the video capture devices
銆CComPtr <IEnumMoniker> pClassEnum = NULL;

銆hr = pDevEnum->CreateClassEnumerator (deviceGUID, &pClassEnum, 0);
銆if (FAILED(hr))
銆銆return hr;

銆if (pClassEnum == NULL)
銆銆return E_FAIL;

銆if (S_OK == (pClassEnum->Next (1, &pMoniker, &cFetched)))
銆{
銆銆hr = pMoniker->BindToObject(0,0,IID_IBaseFilter, (void**)&pSrc);
銆銆if (FAILED(hr))
銆銆銆return hr;
銆}
銆else
銆銆return E_FAIL;

銆*ppSrcFilter = pSrc;

銆return S_OK;
}

//鏋勫緩闊抽Graph鍥撅紝騫跺彂閫?br>CComPtr< IGraphBuilder > m_pAudioGraphBuilder; //闊抽鍥懼艦綆$悊鍣?
CComPtr< ICaptureGraphBuilder2 > m_pCapAudioGraphBuilder;
CComPtr< IBaseFilter > m_pFilterAudioCap;
CComPtr< IMediaControl > m_pAudioMediaCtrl ;

HRESULT AudioGraphInit()
{
銆HRESULT hr;
銆hr =m_pAudioGraphBuilder.CoCreateInstance( CLSID_FilterGraph );
銆if(FAILED(hr))
銆銆return hr;
銆hr =m_pCapAudioGraphBuilder.CoCreateInstance( CLSID_CaptureGraphBuilder2);
銆if(FAILED (hr))
銆銆return hr;
銆m_pAudioGraphBuilder->SetFiltergraph(m_pCapAudioGraphBuilder);
銆m_pAudioGraphBuilder->QueryInterface(IID_IMediaControl, (void **)&m_pAudioMediaCtrl);

銆FindDeviceFilter(&m_pFilterVideoCap,CLSID_AudioInputDeviceCategory);
銆if(m_pFilterAudioCap)
銆銆m_pAudioGraphBuilder->AddFilter( m_pFilterAudioCap,T2W("AudioCap") ) ;

銆//鍙戦佸埌緗戠粶
銆hr =::CoCreateInstance(CLSID_FG729Render,NULL,CLSCTX_INPROC,
銆IID_IBaseFilter,(void**)&m_pFilterRtpSendAudio)
銆if(FAILED(hr))
銆銆return hr;
銆m_pAudioGraphBuilder->AddFilter(m_pAudioRtpRender, L"FilterRtpSendAudio");
銆Connect(m_pFilterAudioCap,m_pAudioRtpRender);

銆CComPtr< IRtpOption > pOption ;
銆m_pAudioRtpRender->QueryInterface(IID_IJRTPOption,(void**)&pOption)
銆hr =pOption->Connect(szClientA,iAudioPort,1024);
銆if(FAILED(hr))
銆銆return hr;

銆m_pAudioMediaCtrl->Run();
銆return S_OK;
}
//闊抽鐨勬帴鏀?
CComPtr< IGraphBuilder > m_pAudioGraphBuilder; //闊抽鍥懼艦綆$悊鍣?
CComPtr< ICaptureGraphBuilder2 > m_pCapAudioGraphBuilder;
CComPtr< IBaseFilter > m_pFilterAudioCap;
CComPtr< IMediaControl > m_pAudioMediaCtrl ;
CComPtr<IBaseFilter> m_pAudioRender;
HRESULT AudioRecive()
{
銆HRESULT hr;
銆hr =m_pAudioGraphBuilder.CoCreateInstance( CLSID_FilterGraph );
銆if(FAILED(hr))
銆銆return hr;
銆m_pAudioGraphBuilder->QueryInterface(IID_IMediaControl, (void **)&m_pAudioMediaCtrl);

銆hr = m_pAudioRtpSource->CoCreateInstance(CLSID_FG729Source) ;
銆if(FAILED(hr))
銆銆return hr;
銆m_pAudioGraphBuilder->AddFilter(m_pAudioRtpSource,L"AudioRtp");
銆//鍒涘緩澹板崱Renderfilter
銆FindDeviceFilter(&m_pAudioRender,CLSID_AudioRendererCategory);
銆m_pAudioGraphBuilder->AddFilter(m_pAudioRender,L"AudioRender");
銆CComPtr< IRtpOption > pRtpOption ;
銆m_pAudioRtpSource->QueryInterface(IID_IJRTPOption,(void**)&pRtpOption)
銆hr= pRtpOption->Connect(szClientA,iAudioPort+2,1024);
銆if(FAILED (hr))
銆銆return hr;

銆Connect(m_pAudioRtpSource,m_pAudioRender);

銆m_pAudioMediaCtrl->Run();
銆return S_OK;
}


]]>
久久人人爽人人澡人人高潮AV| 久久se这里只有精品| 男女久久久国产一区二区三区| 久久精品国产久精国产思思| 日韩一区二区久久久久久| 久久久精品人妻无码专区不卡 | 久久久久久久97| 久久精品无码一区二区三区免费| 一本色道久久88综合日韩精品 | 中文精品久久久久人妻不卡| 久久免费视频观看| 久久99精品久久久大学生| 精品人妻伦九区久久AAA片69| 人妻精品久久久久中文字幕69 | 日韩精品久久久久久久电影蜜臀 | 亚洲欧美日韩中文久久| 国产高清国内精品福利99久久| 亚洲精品乱码久久久久久自慰| 日韩欧美亚洲综合久久影院d3| 久久亚洲春色中文字幕久久久| 狠狠久久综合伊人不卡| 青青草原综合久久大伊人精品| 日日躁夜夜躁狠狠久久AV| 久久这里的只有是精品23| 国产真实乱对白精彩久久| 久久午夜电影网| 久久精品国产亚洲AV嫖农村妇女| 亚洲性久久久影院| 久久久久久亚洲精品不卡 | 久久嫩草影院免费看夜色| 日本免费一区二区久久人人澡 | 久久se精品一区精品二区| 久久久一本精品99久久精品66| 伊人久久大香线蕉综合影院首页| 久久99久久无码毛片一区二区| 国产国产成人久久精品| 99久久国产热无码精品免费久久久久 | 国产精品99久久久久久宅男小说| 亚洲欧美成人久久综合中文网 | 伊人久久无码精品中文字幕| 人人狠狠综合久久亚洲|