播放h264视频流怎么改变帧率?
我用DirectShow的PushSource例子改写一个h264流播发器,作为我的客户端。具体的方案如下:
My PushSource filter--->CoreAvc Decoder filter-->Render filter
我的服务器是一次一帧(经过h264压缩)的给我的客户端发送视频帧,速度是25fps,我采用tcp/ip协议。
我的客服端是服务器发送多少数据就接收多少数据,然后解码播放,具体的做法如下:
HRESULT CPushPinTestPush::FillBuffer(IMediaSample *pSample)
{
。。。。
lRevData=recv(sockClient,(char*)pData,cbData,0);
if(SOCKET_ERROR == lRevData)
{
pSample->SetActualDataLength(0);
return E_FAIL;
}
else
{
pSample->SetActualDataLength(lRevData);
}
rtStart = m_iFrameNumber * m_rtFrameLength;
rtStop = rtStart + m_rtFrameLength;
pSample->SetTime(&rtStart, &rtStop);
m_iFrameNumber++;
pSample->SetSyncPoint(false);
return S_OK;
}
现在我客户端可以正常运行了,Render Filter的质量报告中显示平均帧率是20fps。我现在有个两个问题:
(1)为什么我的帧率比服务器端少?
(2)我的客户端中一个sample就是一帧视频,如果我在FillBuffer中改变sample的持续时间m_rtFrameLength,为什么对我的帧率没作用,我把m_rtFrameLength=1/30 1/25 1/20 1/15 1/10 1/5second 对我的帧率都没影响!!
请高手指点一下!!!