QQ视频语音原码_0.docx

上传人:王** 文档编号:1403945 上传时间:2024-07-06 格式:DOCX 页数:13 大小:24.79KB
下载 相关 举报
QQ视频语音原码_0.docx_第1页
第1页 / 共13页
QQ视频语音原码_0.docx_第2页
第2页 / 共13页
QQ视频语音原码_0.docx_第3页
第3页 / 共13页
QQ视频语音原码_0.docx_第4页
第4页 / 共13页
QQ视频语音原码_0.docx_第5页
第5页 / 共13页
QQ视频语音原码_0.docx_第6页
第6页 / 共13页
QQ视频语音原码_0.docx_第7页
第7页 / 共13页
QQ视频语音原码_0.docx_第8页
第8页 / 共13页
QQ视频语音原码_0.docx_第9页
第9页 / 共13页
QQ视频语音原码_0.docx_第10页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《QQ视频语音原码_0.docx》由会员分享,可在线阅读,更多相关《QQ视频语音原码_0.docx(13页珍藏版)》请在优知文库上搜索。

1、QQ视频语音原码QQ视频语音原码用DirectShow实现QQ的音视频闲聊功能开发者在线Builder更新时间:2007T0T7作者:才智的鱼来源:天极网本文关健词:DirectShowQQ音视频闲聊当下比较流行的即时通信工具,比如MSN,QQ等都实现了视音频的功能,通过视频,音频,我们可以更好的和挚友通过网络进行沟通,本文通过DirectShow技术模拟QQ实现了视频和音频的采集,传输,基本实现了QQ的视音频闲聊的功能。网络视音频系统主要功能就在于视音频的采集,网络传输两个方面,通过VideoCapture系列APl函数,你就可以轻松的搞定视频捕获,但是对于视频的网络传输,则要费一番功夫了。

2、对于视音频数据的传输,只简洁地运用数据报套接字传输音视频数据是不行行的,还必需在UDP层上采纳RTP(实时传输协议)和RTCP(实时传输限制协议)来改善服务质量。实时传输协议供应具有实时特征的、端到端的数据传输服务。我们在音视频数据前插入包含有载荷标识、序号、时间戳和同步源标识符的RTP包头,然后利用数据报套接字在IP网络上传输RTP包,以此改善连续重放效果和音视频同步。实时传输限制协议RTCP用于RTP的限制,它最基本的功能是利用发送者报告和接收者报告来推断网络的服务质量,若拥塞状况严峻,则改用低速率编码标准或降低数据传输比特率,以削减网的RTP包,这个filter有一个或者多个输出的pin

3、。这个Filter供应了如何限制多路分别和如何安排到特定输出Pin的接口。RTPRPHFilter是用来网络过来的RTP包还原成原来的数据格式,主要支持H.261,H.263,Indeo,G.711,G.723和G.729和常见的多种音视频负载类型。RTPSPHfilter则和RPHfilter的功能相对,它的任务是将音视频压缩filter输出的数据分解为RTP包,它供应的接口有指定最大生成包大小和Pt值。下面我们看看如何用这些filter来搭建我们采集和传输的graph图。图1和图2展示了DirectShowRTP中定义的filters如何运用。图1是一个采集本地多媒体数据并运用RTP协议通

4、过网络发送的filtergraph0它包含一个输出原始视频帧的视频采集filter,紧跟一个压缩帧的编码filter。一旦压缩,这些帧就会被发送到RTPSPHfiIter,分片打包,生成RTP包,对应的发送到RTPRenderfilter,通过网络传输这些包。图2呈现了一个filtergraph,用来接收包含视频流RTP包,播放视频。HcpVideoCapGraphBuiIder;CComPtrIBaseFilterm_pFi1terVideoCap;CComPtrIVideoWindowm_pVidcoWindow;CComPtrIMediaControlm_pVideoMediaCtr1:

5、CComPtrIBaseFilterm_pVideoRcnderFi1ter:!RESU1.TCMyDialog:IVideoGraphInitAndSendOHRESU1.Thr;hr=m_pVidcoGraphBui1tier.CoCreatcInstance(C1.SID_FiItcrGraph);if(FAI1.ED(hr)returnhr:hr=m_pVideoCapGraphBui1der.CoCreateInstance(C1.SID_CapturcGraphBui)dcr2);if(FAI1.ED(hr)returnhr;m_pVideoCapGraphBuiIder-SetF

6、i1Iergraph(m_pVidcoGraphBui1dor);m_pVidcoGraphBui1der-QucryInterface(IID_IMediaControl,(void*)m_pVideoMediaCtr1);m_pVidcoGraphBuiIder-QucryInterface(IID_IVideoWindow,(void*)m_pVideoWindow)FindDeviceFiIter(m_pFiIterVidcoCap,C1.siD-VideolnputDeviceCategory);if(m_pFi1terVideoCap)m_pVidcoGraphBuilder-Ad

7、dFilter(m_pFi1terVideoCap,T2W(VideoCap);创建预览的filterhr=m_pRenderFi1terVidoo.CoCreaIeInstancc(C1.SID_VidcoRcnderer);if(FAI1.ED(hr)returnhr;pRenderOption);m_pVideoRtpRender-QueryInterface(11DVideo0ption,(voicl*)pVideoOption);pVideo0ption-SetProperty(vif);pVideo0ption-SetSendFrameRate(m_iFrameRate,1);/1

8、不发送数据,0实际发送数据ConnCCtGn_pFiIterVideoCap,m_pVideoRtpRender);连接对方hr=PRenderOption-Connect(szClientA,iVideoPort,1024);if(FAI1.ED(hr)returnhr;m_pVideoMediaCtrI-RunO;视频的接收CComPtrIGraphBuiIderm_pVideoGraphBui1dcr:视频图形管理器CComPtrIBaseFilterm_pFi11erVideoCap;CComPtrIVideoWindowm_pVideoWindow;CComPtrIMediaCont

9、rolm_pVideoMediaCtr1;CComPtrIBaseFilterm_pVideoRenderPliter;HWNDm_hRcnderWnd;!RESU1.TVideoReciveO(HRESU1.Thr;hr=CoCreateInstance(C1.SID_FilteGraph,NU1.1.,C1.SCTX_INPROC,IID_IFilterGraph,(void*)m_pVideoGraphBui1tier);m_pVideoGraphBui1der-QueryInterface(I11)-IMediaControl,(void*)m_pVideoMediaCtr1);m_p

10、VideoGraphBui1der-QucryInterface(11D_IVidCONindow,(void*)m_pVideoWindow)hr:CoCreateInsta11ce(C1.SID_FH263Source,NU1.1.,C1.SCTX_1NPROC,IIDBaSeFilter,(void*)i1.eft=(iWidth-tmpiWidth)/2;iWidth=tmpiWidth;iTop=0:m_pVideoWindow-put_Owner(O.HWND)m_hRcnderWnd);m_pVideoWindow-put_Visible(OATRUE);m_pVideoWind

11、ow-put_WindowSty1e(WS_CHI1.DWS_C1.IPSIB1.INGS);m_pVideoMediaCIrI-Run0;returnS_OK:/HRESU1.TFindDeviceFi1ter(IBaseFi1ter*PpSrcFilter,GUIDdeviceGUID)HRESU1.Thr:IBaseFilter*pSrc=NU1.1.;CComPtrIMonikerpMoniker=NU1.1.;U1.ONGcFetched;if(JppSrcFiIter)returnE_POINTER;/CreatethesystemdeviceenumeratorCComPtrIC

12、reatcDevEnunip)cvEnum=NU1.1.;hr=CoCreateInstance(C1.SD.SystemDeviceEnum,NU1.1.,C1.SCTX.INPROC,IID_ICreateDevEnum,(void*)pDerE11um);if(FAI1.ED(hr)returnhr;/CreateanenumeratorforthevideocapturedevicesCComPtrIEnumMonikerpClassEnum=NU1.1.;hr=PDevEnuin-CreateClassEnumerator(deviceGUID,pClassEnum,O);if(FA

13、I1.ED(hr)returnhr;if(pClassEnum=NU1.1.)returnE_FAI1.;if(S_OK=(pClassEnum-Next(1,pMoniker,cFetched)hr=PMoniker-BindToObject(O,O,IID_IBaseFiIter,(void*)pSrc);if(FI1.ED(hr)returnhr;elsereturnE_FAI1.;*ppSrcFi1ter=pSrc;returnS_OK;构建音频Graph图,并发送CComPtrIGraphBuiIdcrmpAudioGraphBui1der;音频图形管理器CComPtrICaptur

14、eGraphBuilder2m_pCapAudioGraphBui1der;CComPtrIBaseFilterm_pFi1terAudioCap;CComPtrIMediaControlm_pAudioMediaCtrl;HRESU1.TAudioGraphInitOHRESU1.Thr;hr=m-pudioGraphBui1der.CoCreateInstance(C1.SID_FiIterGraph);if(FAI1.ED(hr)returnhr:hr=m_pCapAudioGraphBui1der.CoCreateInstance(C1.SID-CaptureGraphBuilder2

15、);if(FAI1.ED(hr)returnhr:m-pudioGraphBuiIder-SetFiItergraph(m-pCapudioGraphBui1der);m_pAudioGraphBuiIder-QueryInterface(IID_IMediaControl,(void*)m_pAudioMediaCtr1);FindDeviceFi1ter(m_pFi11erVideoCap,C1.STD_AudioInputDeviceCategory);if(m_pFiIIerAudioCap)m_pAudioGraphBu1.lder-AddFilter(m_pFi1terudioCap,T2W(AudioCap);发送到网络hr=:CoCreateInstance(C1.SlD_FG729Render,NU1.1.,C1.SCTX_INPROC,IIDJBaseFilter,(void*)m_pFiIterRtpSendAudio)if(FAI1.ED(hr)returnhr:m_pAudIoGraphBuiIdcr-AddFi1ter(m_pAudioRtpRcndcr,1.FilterRtpSendAudio);Connec

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 通信/电子 > 监控

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!