您的位置:首页 > 其它

如何使用推模式下使用MPEG-2 Demultiplexer

2012-07-09 12:48 197 查看
MPEG-2 Demultiplexer,让初学者的我纠结了很久。简单的扫扫盲,呵呵。http://technet.microsoft.com/zh-cn/library/dd390715,先看看微软的吧。

你在graphEdit中连接 MPEG-2 Demultiplexer 时,Demux是没有输出PIN的。所以需要我自己在构建图的时候创建outPin。

//*******添加图片

如何创建Demux的OutPin?我们可以通过COM的提供IMpeg2Demultiplexer类型来完成OutPin的创建工作。这个函数是使用在推模式下的。IMpeg2Demultiplexer提供CreateOutputPin来实现我们的创建工作。

HRESULT CreateOutputPin(

[in] AM_MEDIA_TYPE *pMediaType,

[in] LPWSTR pszPinName,

[out] IPin **ppIPin

);

pMediaType : 此参数涉及到播放的相关信息,推模式下这些信息很关键。IMpeg2Demultiplexer* pMpeg2Demux = NULL;

hr = (Demuxer.p)->QueryInterface(IID_IMpeg2Demultiplexer, (void**)&pMpeg2Demux);

IPin* pDemuxOutVideo;

hr = pMpeg2Demux->CreateOutputPin(&mtVideo, L"1", &pDemuxOutVideo);

IPin* pDemuxOutAudio;

hr = pMpeg2Demux->CreateOutputPin(&mtAudio, L"2", &pDemuxOutAudio);

对于我使用的实时的TS流,进行播放。那么我就需要制定对应的PID,告诉哪些流到Video,哪些到Audio中。我使用LifeView PSI Parser来完成在graphEdit上的手动设置。当然我们也是程序中进行设置。

IMPEG2PIDMap* pPIDMap;

hr = pDemuxOutVideo->QueryInterface(IID_IMPEG2PIDMap, (void**)&pPIDMap);

ULONG pidVideo = 256;

hr = pPIDMap->MapPID(1, &pidVideo, MEDIA_ELEMENTARY_STREAM);

pPIDMap = NULL;

hr = pDemuxOutAudio->QueryInterface(IID_IMPEG2PIDMap, (void**)&pPIDMap);

ULONG pidAudio = 257;

hr = pPIDMap->MapPID(1, &pidAudio, MEDIA_ELEMENTARY_STREAM);

其中的256、257就是对应的PID值。

这样设置之后我们的程序就可以正常的播放了...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐