AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DirectShow Audio- (Video-) Switch
Thema durchsuchen
Ansicht
Themen-Optionen

DirectShow Audio- (Video-) Switch

Ein Thema von TERWI · begonnen am 23. Mai 2010 · letzter Beitrag vom 23. Mai 2010
Antwort Antwort
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#1

DirectShow Audio- (Video-) Switch

  Alt 23. Mai 2010, 16:21
Ich habe einen Graphen, in dem 2 AV-Quellen (z.B. File, DVB) auf einen VMR9 laufen (Input 0 und 1).
Jeweils eine Quelle ist sozusagen der 'Master' und läuft im Vollbild.
Die andere Quelle liegt dann wie ein PIP transparent darüber.
Das funktioniert so weit gut.

Nun suche ich nach einem DS-Filter, mit dem ich die Audio's der jeweiligen Quellen umschalten kann.
Hat jemand so was schon mal gemacht oder weiß, wo es so was gibt ?

Völlig genial wäre ein DS-Sound-Device mit mehreren Eingängen wie der VMR, wo man die Lautsärke der jeweiligen Inputs regeln könnte....
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: DirectShow Audio- (Video-) Switch

  Alt 23. Mai 2010, 16:33
Hallo,

es gibt doch den Morgan Stream Switcher, der ist eigentlich für Videos mit mehreren Soundspuren gedacht. Der Switcher hat mehrerer Audio-Eingänge und einen Ausgang. Findest Du im Netz.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: DirectShow Audio- (Video-) Switch

  Alt 23. Mai 2010, 16:58
.... wer 'RICHTIG' lesen kann ist klar im Vorteil
Ich hatte vorhin schon in diesem Thread gelesen, aber das mit der Ton-Spur wohl falsch interpretiert.
Dachte, er meint die verschiedenen Audio-PID's ...

Eben mal schnell gezogen, installiert und mit GraphStudio was gebaut - siehe da:
Genau das was ich suche !

Muss ich nur noch mal was im Proggie basteln und deinen Source zum Umschalten einfügen.
Hast du da evtl. den Source ? Der Link zur COrdeCodec-Seite auf der Morgan-Page lüppt nicht wirklich.

TERWI
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: DirectShow Audio- (Video-) Switch

  Alt 23. Mai 2010, 17:00
Aprospos Audio-PID's im Stream:
Hast du oder jemand anderes zufällig eine Idee, wie man im Haali-Splitter (oder andere) die Audio-PID's per Proggie auslesen und umstellen kann ?
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: DirectShow Audio- (Video-) Switch

  Alt 23. Mai 2010, 17:14
Hallo,

ich hab das damals so gelöst:
Delphi-Quellcode:
uses DirectShow, ActiveX;

function GetOutputPin(const BF: IBaseFilter): IPin;
var
  EP: IEnumPins;
  PD: PIN_DIRECTION;
begin
  if BF.EnumPins(EP) = S_OK then
  begin
    while (EP.Next(1, Result, nil) = S_OK) do
    begin
      if (Result.QueryDirection(PD) = S_OK) and (PD = PINDIR_OUTPUT) then
        Exit;
      Result := nil;
    end;
  end;
end;

function FindAudioSwith(const FG: IFilterGraph): IBaseFilter;
var
  EF: IEnumFilters;
  Pin: IPin;
  SS: IAMStreamSelect;
  SCount: Cardinal;
  MT: TAMMediaType;
begin
  if FG.EnumFilters(EF) = S_OK then
  begin
    while (EF.Next(1, Result, nil) = S_OK) do
    begin
      if Result.QueryInterface(IID_IAMStreamSelect, SS) = S_OK then
      begin
        if (SS.Count(SCount) = S_OK) and (SCount > 1) then
        begin
          Pin := GetOutputPin(Result);
          if Assigned(Pin) and (Pin.ConnectionMediaType(MT) = S_OK) then
          begin
            if IsEqualGUID(MT.majortype, MEDIATYPE_AnalogAudio) or
               IsEqualGUID(MT.majortype, MEDIATYPE_Audio) then
              Exit;
          end;
        end;
      end;
      Result := nil;
    end;
  end else
    Result := nil;
end;

procedure SetAudioStream(const FilterGraph: IFilterGraph; const Index: Integer);
var
  BF: IBaseFilter;
  SS: IAMStreamSelect;
begin
  BF := FindAudioSwith(FilterGraph);
  if Assigned(BF) then
  begin
    if BF.QueryInterface(IID_IAMStreamSelect, SS) = S_OK then
    begin
      SS.Enable(Index, AMSTREAMSELECTENABLE_ENABLE); // Evtl. Fehlerabfrage einfügen
    end;
  end;
end;
Ich hoffe, da fehlt jetzt nichts. Der Code sucht einfach nach einem Filter, der mehrere Eingänge und einen Audio-Ausgang hat. Das musst Du eventuell noch anpassen.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: DirectShow Audio- (Video-) Switch

  Alt 23. Mai 2010, 17:24
So stand es ja auch in diesem Thread.
Brauche ich eigentlich nur die Func SetAudioStream, da ich den Filter ja selber lade.
Woher hast du die Info, das es mit BF.QueryInterface(IID_IAMStreamSelect, SS) geht ?

Funktioniert das beim Haali-Splitter auch zum umschalten der Tonspuren ?
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: DirectShow Audio- (Video-) Switch

  Alt 23. Mai 2010, 17:29
Hallo,
Zitat von TERWI:
Woher hast du die Info, das es mit BF.QueryInterface(IID_IAMStreamSelect, SS) geht ?
keine Ahnung mehr. Das ist schon lange her. Ich weiß aber noch, das ich wochenlang gesucht habe.

Zitat von TERWI:
Funktioniert das beim Haali-Splitter auch zum umschalten der Tonspuren ?
Ich habs lange nicht mehr ausprobiert, aber ich glaube, mit dem Haali-Splitter funktioniert es nicht.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz