播放h264视频流怎么改变帧率?

fymcnm 2010-06-22 05:21:53
我用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 对我的帧率都没影响!!

请高手指点一下!!!
...全文
906 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dengzikun 2010-09-26
  • 打赏
  • 举报
回复
也许是时间戳的问题.把参考时钟设为NULL,看帧率能达到多少.
伪装者1982 2010-09-26
  • 打赏
  • 举报
回复
我也遇到了,好像x264编码出来的帧率和视频大小都跟输入的相同,不知道如何设置能改变输出帧率和视频宽高的大小?请教各位高手了
vslinux 2010-06-25
  • 打赏
  • 举报
回复
UP UP

2,543

社区成员

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

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