回 帖 发 新 帖 刷新版面

主题:跪求,小弟用delphi开发DirectShow开发SourceFilter遇到困难,请各位指点

我在写一个SourceFilter 把经过GSM6.10压缩的数据流,送给音频解压 Filter,最后送给播放Filter.问题出在我的SourceFilter提供的WAVE_FORMAT_GSM610媒体类型后面的Filter不支持,所以连接失败。
可是把SourceFilter提供的媒体类型改为WAVE_FORMAT_PCM,直接连接Default DirectSoundDevice (播放声音)Filter ,正常连接。
媒体类型如下:
   MediaType.majortype := MEDIATYPE_Audio;

    MediaType.formattype := FORMAT_WaveFormatEx ;
   //子类型是压缩数据
    MediaType.subtype := MEDIASUBTYPE_PCM;
    MediaType.bTemporalCompression := False;
    MediaType.bFixedSizeSamples :=True;
    MediaType.pbFormat := pWfx ;
    MediaType.lSampleSize := 0;
    MediaType.cbFormat := 18;


  FWaveFormat.wFormatTag :=1;   //WAVE_FORMAT_PCM 
  FWaveFormat.nChannels :=1;     //mono
  FWaveFormat.nSamplesPerSec := 8000;
  FWaveFormat.nAvgBytesPerSec:= 16000;
  FWaveFormat.nBlockAlign:=2;
  FWaveFormat.wbitspersample := 16;
  FWaveFormat.cbSize :=0;    
谢谢各位指点,为什么子类型改为WAVE_FORMAT_GSM610就不能连接。


回复列表 (共1个回复)

沙发


我自己做了一个试验:
音频采集Filter------->音频播放FIlter
下面是媒体类型:
    MediaType.majortype := MEDIATYPE_Audio;

    MediaType.formattype := FORMAT_WaveFormatEx ;
   //子类型是压缩数据
    MediaType.subtype := MEDIASUBTYPE_PCM;
    MediaType.bTemporalCompression := False;
    MediaType.bFixedSizeSamples :=True;
    MediaType.pbFormat := pWfx ;
    MediaType.lSampleSize := 0;
    MediaType.cbFormat := 18;
试验2
音频采集Filter----GSM6.10音频压缩Filter----播放音频Filter(中间还一些directshow自己连接解压Filter)
媒体类型:
    MediaType.majortype := MEDIATYPE_Audio;

    MediaType.formattype := FORMAT_WaveFormatEx ;
   //子类型是压缩数据
    MediaType.subtype :=???;(我在directshow9单元中找不到与他的序号匹配的MEDIASUBTYPE_GSM)
    {序号:{D1:00000031;D2,D3,D4和MEDIATYPE_Audio的序号一样的}}
    MediaType.bTemporalCompression := False;
    MediaType.bFixedSizeSamples :=True;
    MediaType.pbFormat := pWfx ;
    MediaType.lSampleSize := 0;
    MediaType.cbFormat := 20;
我很疑惑为什么DirectShow提供Gsm类型的序号但没有MEDIASUBTYPE_GSM,还有一点
MediaType.cbFormat := 20媒体格式怎么是20个字节?
请各位高手顶一下,小弟在此谢过!
---------------------------------------------- 

我来回复

您尚未登录,请登录后再回复。点此登录或注册