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

本文详细介绍了如何使用MPEG-2解复用器(MPEG-2 Demultiplexer)创建输出PIN,以实现对实时TS流中视频和音频流的分离与播放。通过具体的代码示例,讲解了利用IMpeg2Demultiplexer接口创建输出PIN的过程,并展示了如何为视频和音频流指定PID值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


   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值。

 

这样设置之后我们的程序就可以正常的播放了...

 

 


 

 

 

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会唱歌的老樊

老少爷们,来个赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值