如何使用推模式下使用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值。
这样设置之后我们的程序就可以正常的播放了...
你在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值。
这样设置之后我们的程序就可以正常的播放了...
相关文章推荐
- 如何正确理解和使用Activity的4种启动模式
- 使用Code First模式开发如何更新数据库(转载)
- 如何使用 awk 的特殊模式 BEGIN 与 END
- 使用markdown编辑器, licence和如何使用锚点扩展模式
- 如何使用 awk 按模式筛选文本或字符串
- 如何在多线程leader-follower模式下正确的使用boost::asio。
- 如何使用设计模式来构造系统--(3)
- 如何使用grep查询出不包含某匹配模式的文件
- 如何使用设计模式系列
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
- JSP设计模式基础:View Helper模式——学习如何使用View Helper模式使得Model数据适应表现层的需要(1)
- 如何使用Proxy模式及Java内建的动态代理机制
- python中如何正确使用正则表达式的详细模式(Verbose mode expression)
- 在 Windows Server 2003 上的 IIS 6.0 中使用 IIS 5 隔离模式时,如何为 ASP.NET 1.1 的 ASPNET 帐户配置进程标识
- 手机使用了QWERTY keypad,想要在idle home screen时长按SHIFT键进行静音模式切换,该如何修改代码
- 如何使用Spark的local模式远程读取Hadoop集群数据
- [FAQ18419][audio speech]通话免提模式如何使用副mic
- 如何使用 IBM Rational Software Architect 创建复合模式
- 如何使用委托与事件来实现观察者模式
- 深度学习TensorFlow如何使用多GPU并行模式?