视频经过压缩,传送,再解压,然后显示。怎么出来的图像质量很差,

254519638 2007-05-07 08:11:39
代码全都是书本的,不过出来的图像就是质量很差,有乱码,延时又大。。 是和压缩编码有关吧?麻烦说说应该怎么设置?



//初始化编码器
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;
}
...全文
759 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
loaad 2007-08-22
  • 打赏
  • 举报
回复
//数据速率(kb/s)
m_CV.lDataRate=20;
//关键帧率
m_CV.lKey=30;
//默认质量设置
m_CV.lQ=100*100;
fantasyemperor 2007-05-08
  • 打赏
  • 举报
回复
可能是压缩算法的问题,或者是你压缩时参数的问题
CathySun118 2007-05-08
  • 打赏
  • 举报
回复
压缩方法有问题吧,换别的压缩方法试试
thinkinnight 2007-05-08
  • 打赏
  • 举报
回复
可以这样,
1.压缩前,写入文件1
2.压缩,写入文件2
3.传输后,解压缩前,写入文件3
4.解压缩,写入文件4

比较文件1与文件4,文件2与文件3
rageliu 2007-05-08
  • 打赏
  • 举报
回复
这些都是封装后的使用代码,谁也看不出问题出在哪儿
syy64 2007-05-08
  • 打赏
  • 举报
回复
换换别的压缩方法试试。
knightshenbin 2007-05-08
  • 打赏
  • 举报
回复
应该用的压缩方法是属于有损压缩,无损的话应该不会出现这种情况的。
changy 2007-05-07
  • 打赏
  • 举报
回复
没法设置,另外找资料做吧
DentistryDoctor 2007-05-07
  • 打赏
  • 举报
回复
是不是有丢帧?
daidongsheng 2007-05-07
  • 打赏
  • 举报
回复
是不是有损压缩啊

16,548

社区成员

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

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

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