首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

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

2012-02-15 
VC++ 音视频 编解码 技术及实践 视频通信, 疑问求解VisualC++ 音视频 编解码 技术及实践 求是科技编写的。

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

热点排行