【求助】视频会议--马赛克现象

goodbest 2004-07-09 03:55:12
本人初来贵地,一下午看完了300帖,受益不浅!谢谢各位:)

小弟做了一个视频的东西,现在客户端能收到视频,不过有马赛克现象。困扰很久不知如何解决,请各位指教。

filter链路:capture--divx codec --netsend (服务端)
netrec -- divx decodec -- renderer (客户端)

编解码器我采用xvid时,将其bitrate设置为10时,图像质量很可以,不过有少量的马赛克现象。但是用divx编解码器时,马赛克现象严重,不过不知道在哪里能设置divx的bitrate,也就是在应用程序中如何调出divx的属性页!

说明:capture--xvid codec--xvid decodec -- renderer
我用如上的filter链接时,也出现了马赛克效应,是不是xvid的编解码器不行呀!
...全文
178 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodbest 2004-07-09
  • 打赏
  • 举报
回复
我在graphedit中连接了,就有的呀!
不知道为何呀?
goodbest 2004-07-09
  • 打赏
  • 举报
回复
补充:我在调试过程中,服务端发送时丢帧了!我刚接触ds不到两个月!

我的netsend根据sdk中textout filter改写的,在dorender()函数中得到数据并发送的。下面是我部分代码:
发送端:
HRESULT CSSFilter::DoRenderSample(IMediaSample *pMediaSample)
{
ASSERT(pMediaSample);
BYTE *pData;
pMediaSample->GetPointer(&pData);
if (pData == NULL) return ERROR;

DWORD Data_length;
if ((Data_length = pMediaSample->GetActualDataLength()) == 0) {
return ERROR;
}
/* FILE *ssfile = fopen("C:\\0123.DAT","ab+");
if (ssfile) {
fwrite(&Data_length,sizeof(DWORD),1,ssfile);
fwrite(pData,sizeof(BYTE),Data_length,ssfile);
fclose(ssfile);
}*/
//等待发送完成
if (WaitForSingleObject(SendEvent,0)==WAIT_OBJECT_0) {
EnterCriticalSection( &cs );
//更新发送缓存
memcpy(sendbuf,pData,Data_length);
LeaveCriticalSection( &cs );
DWORD DW1;
CreateThread(NULL,0,Sendhreadpro,(LPVOID)Data_length,0,&DW1);
}
return NOERROR;
} // DoRenderSample
//其中sendThreadpro是一个线程函数,就是完成数据分包发送。
接收端:clientfilter是根据sdk中pushsoure desktop filter改写的
HRESULT CRSFilterPushPin::FillBuffer(IMediaSample *pSample)
{
BYTE *pData;
long cbData;
CheckPointer(pSample, E_POINTER);
CAutoLock cAutoLockShared(&m_cSharedState);
// Access the sample's data buffer
pSample->GetPointer(&pData);
cbData = pSample->GetSize();
// Check that we're still using video
ASSERT(m_mt.formattype == FORMAT_VideoInfo);
VIDEOINFOHEADER *pVih = (VIDEOINFOHEADER*)m_mt.pbFormat;
//等待一帧接收完成
if (WaitForSingleObject(ReceiveEvent,0)==WAIT_OBJECT_0){
EnterCriticalSection( &css );
memcpy(last_Frame_Stream,cur_Frame_Stream,cur_Frame_Length);
last_Frame_Length = cur_Frame_Length;
LeaveCriticalSection( &css );
}
memcpy(pData,last_Frame_Stream,last_Frame_Length);
/* if (m_objFile.Seek(m_lBytesSent, CFile::begin) == m_lBytesSent)
{
DWORD length = 0;
int nRead = m_objFile.Read(&length, sizeof(DWORD));

m_lBytesSent += sizeof(DWORD);
if(m_objFile.Seek(m_lBytesSent, CFile::begin) == m_lBytesSent)
{
BYTE*INFFF = new BYTE[length];
nRead = m_objFile.Read(INFFF,length);
memcpy(pData,INFFF,length);
delete INFFF;
m_lBytesSent += length;
}
// Sleep(200);
}*/



REFERENCE_TIME rtStart = m_iFrameNumber * m_rtFrameLength;
REFERENCE_TIME rtStop = rtStart + m_rtFrameLength;

pSample->SetTime(&rtStart, &rtStop);
m_iFrameNumber++;
// Set TRUE on every sample for uncompressed frames
pSample->SetSyncPoint(TRUE);

return S_OK;
}
hold 2004-07-09
  • 打赏
  • 举报
回复
我在本地用capture--xvid codec--xvid decodec -- renderer 的时候没有任何马赛克现象,几乎和不经过编解码的效果一样,应该不是xvid的问题。

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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