VC++ 音视频 编解码 技术及实践 视频通信, 疑问求解解决思路

VC++ 音视频 编解码 技术及实践 视频通信, 疑问求解
VisualC++ 音视频 编解码 技术及实践 求是科技编写的。
  第十章,视频通信例的例子。
  接收端看到的,是乱糟糟糕的东西。
  有谁运行成功看到东西么?


 
C/C++ code

//1.初始化卡
      void CServerPlusDlg::InitVideoCard()
{
    //创建视频捕获窗口
    this->m_hWndCapture=::capCreateCaptureWindow("Capture Window",
        WS_VISIBLE|WS_CHILD,0,0,320,240,this->m_hWnd,1);

    //关联到第1个采集设备
    capDriverConnect(this->m_hWndCapture,0);

    //设置视频格式 
    capSetVideoFormat(this->m_hWndCapture,
        &this->m_InInfo,sizeof(BITMAPINFO));

    //设置预览模式(preview mode)的显示速率
    capPreviewRate(this->m_hWndCapture,40);

    //设置预览模式
    capPreview(this->m_hWndCapture,TRUE);

    //设置帧采集回调函数
    capSetCallbackOnFrame(this->m_hWndCapture,FrameCallBack);
}
    return TRUE;   
}
//---------------------
//帧采集回调函数
//采集到一帧数据时就调用该函数
LRESULT CALLBACK CServerPlusDlg::FrameCallBack(HWND hWnd, LPVIDEOHDR lpVHdr)
{ 
 CServerPlusDlg* pDlg=(CServerPlusDlg*)::AfxGetMainWnd();

    //处于连接状态
    if (pDlg->m_bConnect==TRUE)
    {
        //编码并发送
        pDlg->CompressFrame(lpVHdr);
    }

    //返回
    return TRUE;
}

//编码压缩并发送
void CServerPlusDlg::CompressFrame(LPVIDEOHDR lpVHdr)
{
    //是否为关键帧
    BOOL bKeyFrame;

    //视频帧实际大小
    m_OutActSize=this->m_InInfo.bmiHeader.biSizeImage;

    //编码压缩
    BYTE* Buf=(BYTE*)ICSeqCompressFrame(&m_CV,0,
        lpVHdr->lpData,&bKeyFrame,(long*)&m_OutActSize);

    //处于连接状态,并且视频数据大小合适
    if (this->m_bConnect==TRUE && m_OutActSize<8180)
    {
        //视频数据
        VIDEO_DATA VideoData;

        //初始化
        memset(&VideoData,0,sizeof(VIDEO_DATA));

        //标记是否为关键帧
        VideoData.bKeyFrame=bKeyFrame;

        //复制视频(裸)数据
        memcpy(VideoData.Buf,Buf,m_OutActSize);

        //复制视频帧序号
        VideoData.nSampleNum=this->m_SampleNum;

        //编码器输出实际大小
        VideoData.nUsedSize=m_OutActSize;

        //发送完整的视频帧数据
        this->m_ServerStreamSock.Send(&VideoData,sizeof(VIDEO_DATA));

        //更新视频帧序号
        m_SampleNum+=1;
    }
}

//视频数据
typedef struct _VIDEO_DATA
{
    //是否关键帧
    BOOL bKeyFrame;
    //视频帧序号
    DWORD nSampleNum;
    //视频帧实际大小
    DWORD nUsedSize;
    //缓存
    BYTE Buf[8180];
}VIDEO_DATA;






请问
1.这个回掉函数FrameCallBack(HWND hWnd, LPVIDEOHDR lpVHdr)

的指针lpVHdr,指向什么?

我怀疑是DIB位图,但是,保存为位图,发现图像不对劲啊。

2.该例子程序运行起来,接收端图像时花屏,什么都看不清

------解决方案--------------------
我也正在研究这,也遇到相同的问题,希望一起研究,QQ229938999