[DirectShow] Demultiplexer 搭配 Source Filter 问题 [225] (45分)

  • 主题发起人 主题发起人 S3D4
  • 开始时间 开始时间
S

S3D4

Unregistered / Unconfirmed
GUEST, unregistred user!
我开发了一个pull模式的Multicast 网络环境收Transport Stream MPEG2媒体流的Source Filter,
但是这个Source Filter只能够和 Elcard(moonlight) demultiplexer配合工作,不能够和
Microsoft Demultiplexer 一起工作,请问应该如何配置我的Source Filter和Microsoft
Demultiplexer一起工作? 我试过改动Source Filter为 push 模式, 但是仍然不可以工作,
而且Elcard Demultiplexer 是基于pull模式的,所以我的Source Filter必须基于pull模式

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1575397
 
Elcard的Filter应该是第三方的软件,看你的描述,里面应该做了MPEG-2的编码和解码工作。
而MS的Filter应该是不带这个功能的,在连接Microsoft Demultiplexer前加一个MPEG-2的Decoder试试。
我用Graphi工具时可以找到许多MPEG-2 Decoder的Filter(我装的东西太多)。不知道MS自己有没有。
 
总算来人了,LeeChange大侠当年的DS帖子我印象深刻的很,不过我的这种情况,LeeChange
大侠说得不太正确,我的 Graph 模式是

+-- Video Decoder (Scala Decoder) - Video Render (MS)
[Source Filter] - [Demultiplexer] +
+-- Aaudio Decoder (MS) - DirectSound Output (MS)

我最为讨厌的是 Demultiplexer 这个 Filter,这个 Filter 将会 Query Source Filter,
然后将 Deliver/Push 的 IMediaSample 分析,获得媒体的长宽、类型、频率等等技术参
数,并分解原始的 IMediaSample 为 Video Stream 和 Audio Stream,具体的流解码工作
由下一级的Audio、Video Decoder来处理,我现在的环境是自己开发的 Source Filter,但
是在 Demultiplexer 这一级上面,我只能使用 Elcard Moonlight MPEG2 Demultoplexer ( www.elecard.com )
而这里面涉及到商业许可证,我只能选择 Microsoft MPEG2 Demultoplexer和我的Source Filter
搭配,可惜试验不成功,我对 Microsoft MPEG2 Demultoplexer 的技术参数不是很了解,想
在此问问高人,不知道我说清楚没有


 
Microsoft 对于 Demultoplexer 的开发细节没有太明确的指示,也没有范例,不然真想自
己写个算了,唉,都说 Microsoft 开发资料足,其实那也是相对比较多,真正深入的资料
也是寥寥无几
 
见笑见笑,一张嘴就说错话.
仔细看了你遇到的问题,几点体会如下:
1.一般来说,象网络接收之类的Source Filter都是Push模式的,您用Pull模式在丢包多的时候会很惨.
2.与Demultoplexer对应的Source Filter一般也都是Push模式的,而据您描述Elcard Demultoplexer
是Pull模式的.看来他的本意是让你回放本地的文件,而非网络接收.但似乎这类Filter应该叫Spliter,
而moonlight把他起名叫Demultoplexer有点不妥.
3.无论是Push还是Pull模式,您的Source Filter与Elcard Demultoplexer能协同工作,那么就应该恭喜
您.您编写的Source Filter是正确的.
4.所以,如果是因为moonlight的Demultoplexer本质上就是一个Spliter,那么您可以用MPEG-2 Spliter
替代MPEG-2 Demultoplexer试试.
5.如果不成功,则可能就是您最不愿意听到的消息了.那就是:只要moonlight在服务端的Encoder上做一点
点手脚,那么您就不可能用MS的MPEG-2 Demultoplexer将Elcard的流分解.MPEG-2 Demultoplexer不会将任
何他自己认为有错的包送出.
6.为了验证上一点假设,您可以用moonlight录制好的文件做实验.用File Source, Elcard Demultoplexer,
Decoder, Render.肯定是能播放的.然后把Elcard Demultoplexer换成MPEG-2 Demultoplexer,如果不行,那么...
 
收到,一点回应先
>1.一般来说,象网络接收之类的Source Filter都是Push模式的,您用Pull模式在丢包多的时候会很惨.
我对这两种模式之间的优缺点不是很熟悉,此建议待考。

>2.与Demultoplexer对应的Source Filter一般也都是Push模式的,而据您描述Elcard Demultoplexer
>是Pull模式的.看来他的本意是让你回放本地的文件,而非网络接收.但似乎这类Filter应该叫Spliter,
>而moonlight把他起名叫Demultoplexer有点不妥.
感觉上 Spliter 是 一分为二 的概念(Video+Audio),而Demultoplexer好像是一分为几个的概念,
另外Microsoft 分别自带Microsoft Demultiplexer 和 Microsoft Splitter 两个Filter,我不清楚
这俩冬冬的具体使用方式,但是这俩个我都没有配搭成功

>3.无论是Push还是Pull模式,您的Source Filter与Elcard Demultoplexer能协同工作,那么就应该恭喜
>您.您编写的Source Filter是正确的.
谢谢,瞎猫捡了死老鼠而已

>4.所以,如果是因为moonlight的Demultoplexer本质上就是一个Spliter,那么您可以用MPEG-2 Spliter
>替代MPEG-2 Demultoplexer试试.
如上所述,没有成功

>5.如果不成功,则可能就是您最不愿意听到的消息了.那就是:只要moonlight在服务端的Encoder上做一点
>点手脚,那么您就不可能用MS的MPEG-2 Demultoplexer将Elcard的流分解.MPEG-2 Demultoplexer不会将任
>何他自己认为有错的包送出.
这点您就错了,我的服务器是另外一家公司的产品叫做 MediaBase Server (www.kasenna.com),它发放的
是标准的 Transport Stream 格式的 MPEG2 媒体流。Kasenna 自己也提供了播放器,可惜只能播放 MPEG1
和 AVI 视频,不能播放 MPEG2 格式,而 Moonlight 的播放器可以和 Kasenna 集成并播放MPEG2 媒体,我
们当然想撇开 Moonlight 的产品,所以一步一步从 Source Filter起,在一级一级替换,你看上贴的Graph
示范( 1616768 ),现在除了 Demultiplexer 这一级,其它的都换成了无须版权的产品了(当然,是可以正
常工作的),偏偏这个玩意还没有什么资料供开发参看,这配又配不上,写又写不出,您说我苦恼不苦恼?
当然了,就技术而言,Source Filter是最简单的,全部是原始数据流操作,而 Demultiplexer 这级模块应
该比较难开发,他可能需要分析媒体格式,至少要分清楚视频流和音频流,所以俺可能写不出来,唉,这个
玩意真是麻烦。
 
几位大佬,有关于directx开发的资料吗?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部