求directshow/ffdshow播放h264的流程、或相关代码、相关说明

liwenrui2008 2008-12-24 10:44:33
各位好!我在做一个directshow播放h264的程序,下载了ffdshow,也安装了。可以在graphEdit中播放h264的AVI文件了。但是我的需求是从客户端接收udp或者rtp协议传过来的h264数据,在服务端widnows上进行播放。因此采用directshow。

但是我是初次接触directshow,参照书上写了个netreceiverfilter,但是不知道如何设置h264媒体类型参数、以及连接ffdshow的filter。希望有知道的朋友能解答一下。多谢!
也可我发邮件,我的邮箱: 9587780@qq.com, msn邮箱: liwenrui2000@hotmail.com
...全文
976 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
berite 2011-03-18
  • 打赏
  • 举报
回复
看directshow实务精选里面的 不过不太懂
liwenrui2008 2009-01-15
  • 打赏
  • 举报
回复
up2me_gis,能详细解释下,ffdshow需要的h.264的媒体类型如何设吗?我现在设了,可是连接不上。
liwenrui2008 2009-01-14
  • 打赏
  • 举报
回复
多谢回复!我先试下,再过几天就结贴。
liwenrui2008 2009-01-14
  • 打赏
  • 举报
回复
自己再顶一下!
up2me_gis 2009-01-13
  • 打赏
  • 举报
回复
可行,需要设置mediatype,包括图像大小,还有compression,这两个是最关键的
liwenrui2008 2009-01-12
  • 打赏
  • 举报
回复
自己顶一下!哪位大侠能讲解一下,ffdshow实时播放h.264码流 是否可行?
liwenrui2008 2009-01-09
  • 打赏
  • 举报
回复
我根据一个网友的提示,设置了媒体类型。
但是我现在又遇到另外一个问题,就是在filter智能连接的时候报错,就是在设置SetupMediaType后,完成链路void CRoleAdmin::CompleteVideoReceivingGraph(void)
里,这一句HRESULT hr = mRemoteVideoGraph->GetGraph()->Connect(pOut, pIn);报Unhandled exception in VideoPlay.exe.(NTDLL.DLL) : 0XC0000017 No Memory.

请问这是什么原因?期待高人回复。

我修改《Directshow实务精选》AvChat这个例子的如下部分:

1.改为UDP协议;

2.改写了void CNetOutPin::SetupMediaType(long inType, char * inFormat, long inLength)

3.直接在主对话框initaldialog里调用 mActor->Activate();没有用UDP命令消息创建视频filter graph。

4.去掉了CSelfCheckDlg chkDlg;直接设置为服务器端。


注:部分代码:
void CNetOutPin::SetupMediaType(long inType, char * inFormat, long inLength)
{
if (inType == PT_VideoMediaType)
{
mPreferredMt.SetType(&MEDIATYPE_Video);
mPreferredMt.SetFormatType(&FORMAT_VideoInfo);
// Determine the video subtype
mPreferredMt.SetSubtype(&MEDIASUBTYPE_H264);
mPreferredMt.bFixedSizeSamples = FALSE;


// Verify image size
VIDEOINFOHEADER * pvi = (VIDEOINFOHEADER *)mPreferredMt.AllocFormatBuffer(sizeof(VIDEOINFOHEADER));

// Initialize the VideoInfo structure before configuring its members
ZeroMemory(pvi, sizeof(VIDEOINFO));

// Adjust the parameters common to all formats
pvi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pvi->bmiHeader.biWidth = 640;
pvi->bmiHeader.biHeight = 480;
pvi->bmiHeader.biPlanes = 1;
// we want the whole image area rendered.
SetRectEmpty(&(pvi->rcSource));
// no particular destination rectangle
SetRectEmpty(&(pvi->rcTarget));

// mPreferredMt.SetFormat((BYTE *)&pvi, sizeof(VIDEOINFOHEADER));

}
else
{
mPreferredMt.SetType(&MEDIATYPE_Audio);
mPreferredMt.SetSubtype(&MEDIASUBTYPE_PCM);
mPreferredMt.SetFormatType(&FORMAT_WaveFormatEx);

// Verify sample size (one second)
WAVEFORMATEX * wave = (WAVEFORMATEX *) inFormat;
wave->nAvgBytesPerSec = wave->nSamplesPerSec * wave->nChannels
* wave->wBitsPerSample / 8;
mPreferredMt.SetFormat((BYTE*)inFormat, inLength);

mFilter->SetAudioBytesPerSecond(wave->nAvgBytesPerSec);
}

mPreferredMt.SetTemporalCompression(FALSE);
}
koko200147 2009-01-08
  • 打赏
  • 举报
回复
我也有同样的问题啊。
myh0305 2008-12-26
  • 打赏
  • 举报
回复
同样的问题, 哪位给点指点啊
liwenrui2008 2008-12-24
  • 打赏
  • 举报
回复
最好有VC代码参考!多谢!

2,543

社区成员

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

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