网络播放MPEG4问题:如何设置MediaType?

eego 2003-08-21 10:43:22
小弟用Memfile例子实现了网络播放MPEG流,现在想播放MEPG4流,但是不知Mediatype应该设置为什么?

修改Async例子,把MediaType 改为
majortype = MEDIATYPE_Stream
subtype = MEDIASUBTYPE_Avi
后,使用该Filter可以播放MPEG4的文件,但是在播放MEPG4流时却不行,

各位给点意见,,,
...全文
100 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xielm 2003-08-26
  • 打赏
  • 举报
回复
// Setup data
//mpeg4
DEFINE_GUID(MEDIASUBTYPE_MPEG4,
0x3447504D, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);

const AMOVIESETUP_MEDIATYPE sudVideoPinTypes =
{
&MEDIATYPE_Video, // Major type
&MEDIASUBTYPE_MPEG4 // Minor type
};

HRESULT CVAVideoRecverStream::GetMediaType(int iPosition, CMediaType *pmt)
{
CheckPointer(pmt,E_POINTER);

CAutoLock cAutoLock(m_pFilter->pStateLock());


HRESULT hr ;

if (iPosition == 0) {

ASSERT (pmt) ;

pmt->InitMediaType () ;
pmt->SetType(& MEDIATYPE_Video) ;
pmt->SetSubtype(&MEDIASUBTYPE_MPEG4);
pmt->SetFormatType(&FORMAT_VideoInfo);

VIDEOINFOHEADER vih;
memset( &vih, 0, sizeof( vih ) );
vih.bmiHeader.biCompression = 0;//BI_RGB;
vih.bmiHeader.biBitCount = 24;
vih.bmiHeader.biSize = 40;//sizeof(BITMAPINFOHEADER);
vih.bmiHeader.biWidth = 352;
vih.bmiHeader.biHeight = 288;
vih.bmiHeader.biPlanes = 1;
vih.bmiHeader.biSizeImage = 304128;//GetBitmapSize(&vih.bmiHeader);
vih.bmiHeader.biClrImportant = 0;
vih.AvgTimePerFrame = 666670;
vih.dwBitRate = 34062336;
pmt->SetFormat((unsigned char *)&vih,sizeof(VIDEOINFOHEADER));
pmt->SetTemporalCompression(TRUE);
hr = S_OK ;
}

return NOERROR;

} // GetMediaType

eego 2003-08-25
  • 打赏
  • 举报
回复
gxqcdit(都市旷野):CSource使用Push Model,它连接什么Filter呢?难道直接把数据传到Decoder Filter? 可否解释一下。
eego 2003-08-25
  • 打赏
  • 举报
回复
gxqcdit(都市旷野):有没有CSource的实例提供参考??
eego 2003-08-25
  • 打赏
  • 举报
回复
PlayStation: 在GF里调试时,SOURCEFILTER怎么也无法同AVI SPLITTER 打通,但却没有任何出错信息.不知道你那边是否有什么出错信息.

-------
我试过的,没有问题。可以直接连接播放。
另外,MediaType设置为
majortype = MEDIATYPE_Stream
subtype = MEDIASUBTYPE_Avi
后,如果把整个文件都接收完整,播放流没有问题。(MPEG4文件开头部分好像是必需的)

但是,如果仅接收部分内容(即发送一段时间后再开始接收),就无法播放。而这种情况,对于MPEG1文件来说是没有问题的。

那位有好建议?
eego 2003-08-25
  • 打赏
  • 举报
回复
gxqcdit(都市旷野): 你的说法与我的想法一致,就不知道实现起来是否可行。检查一下类似的Filter,发现使用CSource的有 "Avi/Wav File Source" Filter.

但是细想一下,CSource Filter是否收到数据就向下送,有没有时间控制的概念?

大家再讨论一下,就结贴拉。
gxqcdit 2003-08-25
  • 打赏
  • 举报
回复
连接Filter Graph其实说到底就是媒体类型一致.
gxqcdit 2003-08-25
  • 打赏
  • 举报
回复
从CSource继承的源Filter从网络接收数据,然后直接连接到Decoder Filter,它们之间Pin的媒体类型就是在采集端的压缩Filter的输出Pin的媒体类型.
gxqcdit 2003-08-22
  • 打赏
  • 举报
回复
从CSource和CSourceStream继承相对简单一点.
PlayStation 2003-08-22
  • 打赏
  • 举报
回复
我把你给我的那个文件试了一下,当以流的形式播放时确实不行.
在GF里调试时,SOURCEFILTER怎么也无法同AVI SPLITTER 打通,但却没有任何出错信息.不知道你那边是否有什么出错信息.
另外,我还发现一个比较奇怪的现象,那就是我把那个文件扩大两倍后,播发时居然还是原来的长度,我觉得很奇怪,因为对于MPEG1或者MPEG2类型的文件,当我扩大两倍播放时,播放长度也就自然扩大成了两倍
forestassure 2003-08-21
  • 打赏
  • 举报
回复
应该可以
eego 2003-08-21
  • 打赏
  • 举报
回复
forestassure(今天人)试过吗?

2,541

社区成员

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

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