视频经过压缩,传送,再解压,然后显示。怎么出来的图像质量很差,
代码全都是书本的,不过出来的图像就是质量很差,有乱码,延时又大。。 是和压缩编码有关吧?麻烦说说应该怎么设置?
//初始化编码器
void CServerPlusDlg::InitCompressor()
{
//初始化m_CV
memset(&m_CV,0,sizeof(COMPVARS));
//设置COMPVARS结构
//手工设置COMPVARS结构
m_CV.dwFlags=ICMF_COMPVARS_VALID;
//COMPVARS结构大小
m_CV.cbSize=sizeof(m_CV);
//使用divx编码器
m_CV.fccHandler=mmioFOURCC('d','i','v','x');
//编码器类型
m_CV.fccType=ICTYPE_VIDEO;
//打开编码器,hic为编码器句柄
m_CV.hic=ICOpen(ICTYPE_VIDEO,mmioFOURCC('d','i','v','x'),ICMODE_COMPRESS);
//数据速率(kb/s)
m_CV.lDataRate=780;
//关键帧率
m_CV.lKey=15;
//默认质量设置
m_CV.lQ=ICQUALITY_DEFAULT;
//保留字段
m_CV.lKeyCount=0;
m_CV.lpbiIn=NULL;
m_CV.lpBitsOut=NULL;
m_CV.lpBitsPrev=NULL;
m_CV.lpState=NULL;
m_CV.cbState=0;
m_CV.lFrame=0;
//编码器打开成功
if (m_CV.hic!=NULL)
{
//编码器输出格式大小
m_OutFormatSize=ICCompressGetFormatSize(m_CV.hic,&m_InInfo);
//编码器输出格式
m_pOutInfo=(BITMAPINFO *)new BYTE[m_OutFormatSize];
ICCompressGetFormat(m_CV.hic,&m_InInfo,m_pOutInfo);
//编码器输出缓存大小
m_OutBufferSize=ICCompressGetSize(m_CV.hic,&m_InInfo,m_pOutInfo);
//初始化资源,为编码帧序列做好准备
ICSeqCompressFrameStart(&m_CV,&m_InInfo);
}
}
//编码压缩并发送
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;
}