相信大家对dirctshow体系已经十分熟悉了。大部分的播放器都是建立在此基础上。但是在处理音频上,winamp和他众多的dll型插件还是很有优势。
现在有一些方法把两者结合起来。最常用的是通过ffdshow.这本来是个不错的视频Dshow滤镜,现在它的音频滤镜可以支持winamp的DSP插件。任何一个普通播放器调用ffdshow解音频的时候就可以调用winamp的DSP插件。
从winamp出发也行,现在发行的零售版winamp自带的direct解码器能够把指定扩展名的文件直接交给系统注册表中的Dshow滤镜处理。而后把解码后的视频用它自带的输出滤镜渲染的同时,解码出来的PCM音频交给winamp自己参数设置中的插件——DSP和输出dll来处理。
这种方法比起用ffdshow多出来可以用out插件的部分。
还有一种就是用KMplayer。千万不要被它的内置界面所迷惑,虽然很像winamp,但是它是基于dshow系统的。
它支持的是winamp的输入和DSP插件和音频可视化插件。虽然这两个在KMP的设定处是在一个目录下的,但是KMP是用两种完完全全不同的方法来实现的。
先讲输入插件,如果放在dShow系统也就是音频解码器,所以KMP如果要将他转移的话怎么也得在解码滤镜里头吧??结果。KMP把它放在第一级的源滤镜!直接用winamp插件当源滤镜和分离滤镜和解码滤镜,一物三用。直接导致的是混杂视频文件中的音频流不能使用winamp的输入插件来解码!
因为我们都知道winamp体系不像dshow系统,有分离系统,可以把一个多媒体文件分成什么视频流、音频流、字幕流等N股流,然后单个处理后同时输出,可调节性非常强!
而winamp从一开始就定位在音频播放器,整个文件处理流程就是一条直线:输入——DSP——输出。而且每个处理部分只能处理一个插件。比如你有N个可以解码MP3的输入插件,并且同时启用着,它只会光顾按照由上至下的排列第一顺位的解码插件,并且解码出来后直接进入DSP后处理,再到输出插件。而不会把解码出的PCM或者用有分离功能的in插件分离出的mp3在输入部分再次处理。所以唯一的依靠是基于DSHow的播放器了。
而现在把winamp输入插件当源滤镜根本不能实现分离。 也就是说根本没有办法在播放视频电影时使用winamp的音频in插件来处理,只有依靠有dshow 的设计高手做一个容器了。这个容器本身是Direct的音频解码滤镜,而不是源滤镜和分离滤镜(因为电影格式纷繁复杂,必须有相应的专业滤镜来分离,不可替代的),而后可以用户指定载入的winamp输入插件(dll格式)来实现核心的解码功能。就像ffdshow一样,只是不止支持DSP插件,而是希望支持IN插件。
请高手出马,谢谢。
[/KH]