压缩视频并传输后,无法解压缩,怎么办???急死了!!!

taiyongyu 2010-01-04 09:05:19
视频压缩代码:char* buffer = new char [lpVHdr->dwBytesUsed+1];
//char buffer[362*288*3+1]="";

memset(buffer,10,lpVHdr->dwBytesUsed+1);
DWORD dwCkID ;
DWORD dwCompFlags ;
DWORD dwQuality = 100;

char* pout;
char*p;
long s=10000;
BOOL k;

p=(char*)ICSeqCompressFrame(&pDlg->m_Com,0,(char*)lpVHdr->lpData,&k,&s);
用TCP方式传送和接收:
传送send(sockClient,p,s+1,0);
接收: char recvBuf[10000];
memset(recvBuf,0,10000);
recv(sockConn,recvBuf,10000,0);
解压代码:BITMAPINFO m_BmpU;
BITMAPINFO m_BmpC;
COMPVARS m_cv;
HIC m_hIC;
m_hIC=NULL;

ZeroMemory(&m_cv,sizeof(m_cv));
m_cv.cbSize=sizeof(m_cv);
m_cv.dwFlags=ICMF_COMPVARS_VALID ;
m_cv.hic=m_hIC;//ICOpen(ICTYPE_VIDEO,m_cv.fccHandler,ICMODE_COMPRESS);
m_cv.fccType=ICTYPE_VIDEO ;
m_cv.fccHandler=859189837;//875967096;//mmioFOURCC('d','i','v','x');
m_cv.lpbiOut=0;//(BITMAPINFO*)&m_OutInfo;
m_cv.lKey=15;
m_cv.lDataRate=300;
m_cv.lQ=10000;

//将视频格式固定(这是非常常用的格式,一般的视频捕捉设备应该会支持)
ZeroMemory(&m_BmpU,sizeof(m_BmpU));
m_BmpU.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
m_BmpU.bmiHeader.biWidth=352;
m_BmpU.bmiHeader.biHeight=288;
m_BmpU.bmiHeader.biPlanes=1;
m_BmpU.bmiHeader.biBitCount=24;
m_BmpU.bmiHeader.biSizeImage=352*288*3;

m_hIC=ICOpen(ICTYPE_VIDEO,m_cv.fccHandler,ICMODE_COMPRESS|ICMODE_DECOMPRESS);//既可以当做压缩器也可以当做解压缩器使用

ICCompressGetFormat(m_hIC,&m_BmpU,&m_BmpC);
ICSendMessage(m_hIC,0x60c9,0xf7329ace,0xacdeaea2);
//只能用这个函数,使用ICDecompressGetFormat();不能成功
m_cv.hic=m_hIC;
m_cv.dwFlags=ICMF_COMPVARS_VALID;
ICSeqCompressFrameStart(&m_cv,&m_BmpU);//以上四句格式、顺序非常重要,一处不正确就无法成功。
long ret=ICDecompressBegin(m_cv.hic,(BITMAPINFO*)&m_BmpC,(BITMAPINFO*)&m_BmpU);
if(ret!=ICERR_OK)
{
printf("%s\n","Chu shi hua wei cheng gong");
}

DWORD flag=ICDECOMPRESS_UPDATE;
char decbuffer[352*288*3];
/**********************视频格式初始化结束*********************************/

if(!recvBuf||!decbuffer||!m_hIC)
printf("%s\n","bu cheng gong");
flag=ICDECOMPRESS_NOTKEYFRAME;
ret=ICDecompress (m_cv.hic,ICDECOMPRESS_NOTKEYFRAME ,&m_BmpC.bmiHeader,recvBuf,&m_BmpU.bmiHeader,decbuffer);
if(ret!=ICERR_OK);
{
printf("%s\n","Jie ya suo wei cheng gong");
}
视频的压缩和传输、接收都没有问题。
出错就出在解压缩这里,总是无法将数据解压缩出来。无论flag设置为0还是设置为ICDECOMPRESS_NOTKEYFRAME都不行
这是怎么回事啊?怎么解决???谢谢啦!
...全文
215 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
时候后 2011-04-30
  • 打赏
  • 举报
回复
m_hIC=ICOpen(ICTYPE_VIDEO,m_cv.fccHandler,ICMODE_COMPRESS|ICMODE_DECOMPRESS);//在这个地方返回值为0 的原因 迷茫
taiyongyu 2010-01-05
  • 打赏
  • 举报
回复
数据从发送端到接收端,我大体看了一遍。数据的开始和结尾是一致的,中间也没什么差错。
zoulie 2010-01-04
  • 打赏
  • 举报
回复
数据传输的完整不?有没有校验?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧