关于H.264,jrtp,directShow视频采集等的整合开发研究

    2003-2005年前后开发directShow的程序,只是知道照猫画虎,根据一个例子写另外一个filter,当时写了好多独立的com组件,H.261,H.263,H.264,Mpeg4等视频编解码的Filter,音频方面,G.711,G.729,G.723等Filter。当时把jrtplib对应的也写成了jrtpSendVideo,jrtpRecvVideo,jrtpSendAudio,jrtpRecvAudio等Filter。在进行H.323系统开发的时候,也曾使用Graphedit将其链接起来,进行过处理。并成功开发了H.323项目。后来独立写过处理这些Filter的Demo程序,也就是我在以前提到过的MediaSever程序。

   后来开发sip程序,发现这种使用方式,虽然每个模块完全独立,但是在使用过程中,因为每一个组件都可以独立注册,反注册,一旦有人反注册了自己使用的组件,整个应用程序便不能正常工作了。于是就想着把这部分重新整理下。后来因为忙,当然也可以说是懒,就放下了。最近,想起来要整理下这些东西了。

    刚刚使用H.264,jrtp做了一个demo程序,实现了对视频的采集和编解码以及rtp收发。这个将所有的组件放在一个模块里面实现。保证不会因别人反注册某个组件影响我们的进程工作。本模块外部调用方法如下:

void CMediaProDemoDlg::OnButtonStart()
{
 // TODO: Add your control notification handler code here
 CWnd* pWnd = (CWnd*)GetDlgItem(IDC_BUTTON_START);
 if(!m_bOpenCamera)
 {
  pWnd->SetWindowText(_T("停止收发视频"));
  m_bOpenCamera = TRUE;
  BOOL bOpenRes = CCameraMgr::GetInstance()->OpenCameraMgr();
  CWnd* pWndLocalVideo = (CWnd*)GetDlgItem(IDC_STATIC_LOCAL_VIDEO);
  CWnd* pWndRemoteVideo = (CWnd*)GetDlgItem(IDC_STATIC_REMOTE_VIDEO);
  m_pIndexChannel->SetLocaLVideoHandle(pWndLocalVideo->GetSafeHwnd());
  m_pIndexChannel->SetRemoteVideoHandle(pWndRemoteVideo->GetSafeHwnd());
  UpdateData(true);
  m_pIndexChannel->SetRtpParam(m_nLocalRtpPort,m_nDestRtpPort,m_strDestIp);

  m_pIndexChannel->StartThread();
 }
 else
 {
  pWnd->SetWindowText(_T("开始收发视频"));
  m_bOpenCamera = false;
  bool bOpenRes = CCameraMgr::GetInstance()->CloseCameraMgr();
  m_pIndexChannel->StopThread();
 }
}

关于H.264,jrtp,directShow视频采集等的整合开发研究_第1张图片

你可能感兴趣的:(关于H.264,jrtp,directShow视频采集等的整合开发研究)