AGB  ·  Datenschutz  ·  Impressum  







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

DivX Tonspur umstellen (Switch Audio)

Ein Thema von SwordfishCenter · begonnen am 21. Okt 2006 · letzter Beitrag vom 23. Okt 2006
Antwort Antwort
SwordfishCenter

Registriert seit: 2. Sep 2005
62 Beiträge
 
Delphi 7 Enterprise
 
#1

DivX Tonspur umstellen (Switch Audio)

  Alt 21. Okt 2006, 17:38
Hallo zusammen,
habe ein kleines problem mit den 2 Tonspuren im DivX AVI.
Wie kann ich die Audiospuren mit dem DSPack umstellen.
Das mitgelieferte tool "divxsm.exe" kann ich nicht gebrauchen da ich meine videos auf dem TV sehe und
ich das ganze mit einer IR-FB steuere und der Rechner auch keine maus hat.
  Mit Zitat antworten Zitat
xaromz

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

Re: DivX Tonspur umstellen (Switch Audio)

  Alt 21. Okt 2006, 17:55
Hallo,

ich habe mir dazu den Morgan Stream Switcher installiert und steuere den fern. Über den Filtergraph kannst Du feststellen, welcher Filter mehrere Tonspuren zur Verfügung stellt und dann eine auswählen.

Delphi-Quellcode:
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
      begin
        EP := nil;
        Exit;
      end;
      Result := nil;
    end;
    EP := nil;
  end;
end;

function FindAudioSwith(const FG: IFilterGraph): IBaseFilter;
// Sucht einen Filter, der das Umschalten von Audiospuren erlaubt
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 (Pin <> nil) and (Pin.ConnectionMediaType(MT) = S_OK) then
          begin
            if IsEqualGUID(MT.majortype, MEDIATYPE_AnalogAudio) or
               IsEqualGUID(MT.majortype, MEDIATYPE_Audio) then
            begin
              SS := nil;
              EF := nil;
              Pin := nil;
              Exit;
            end;
          end;
          Pin := nil;
        end;
        SS := nil;
      end;
      Result := nil;
    end;
    EF := nil;
  end else
    Result := nil;
end;

procedure SetAudioStream(AFilterGraph: TFilterGraph; const Index: Integer);
// Schaltet auf den angegebenen Kanal um
var
  FilterGraph: IFilterGraph;
  BF: IBaseFilter;
  SS: IAMStreamSelect;
begin
  if AFilterGraph.QueryInterface(IID_IFilterGraph, FilterGraph) = S_OK then
  begin
    BF := FindAudioSwith(FilterGraph);
    if BF <> nil then
    begin
      if BF.QueryInterface(IID_IAMStreamSelect, SS) = S_OK then
      begin
        if SS.Enable(Index, AMSTREAMSELECTENABLE_ENABLE) <> S_OK then
          Beep;
        SS := nil;
      end;
      BF := nil;
    end;
    FilterGraph := nil;
  end;
end;
Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
SwordfishCenter

Registriert seit: 2. Sep 2005
62 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: DivX Tonspur umstellen (Switch Audio)

  Alt 21. Okt 2006, 19:37
na das war aber eine schnelle hilfe doch bei mir passiert garnichts
die tonspur bleibt an und wechselt nicht.
SetAudioStream(FilterGraph,1); es ist egal ob ich 1 or 2 or 3 einsetze.
mach ich was falsch oder bin ich jetzt zu blöd

habe auch die divxsm.tlb bzw DivXSettingsManagerTypeLib_TLB.pas
das ist die TypeLib von divxsm.exe Version 6.4 im "Windows\System32" von DivX.
Das progi legt sich als tryicon in die startleiste und ist zum steuern der divx Filme
aber damit komme ich nicht klar, bekomme immer eine fehlermeldung.
Delphi-Quellcode:
unit DivXSettingsManagerTypeLib_TLB;

// ************************************************************************ //
// WARNUNG
// -------
// Die in dieser Datei deklarierten Typen wurden aus Daten einer Typbibliothek
// generiert. Wenn diese Typbibliothek explizit oder indirekt (über eine
// andere Typbibliothek) reimportiert wird oder wenn die Anweisung
// 'Aktualisieren' im Typbibliotheks-Editor während des Bearbeitens der
// Typbibliothek aktiviert ist, wird der Inhalt dieser Datei neu generiert und
// alle manuell vorgenommenen Änderungen gehen verloren.
// ************************************************************************ //

// PASTLWTR : 1.2
// Datei generiert am 21.10.2006 17:10:56 aus der unten beschriebenen Typbibliothek.

// ************************************************************************ //
// Typbib: C:\WINDOWS\system32\divxsm.tlb (1)
// LIBID: {957BF83F-EE5A-42EB-8CE5-6267011F0EF9}
// LCID: 0
// Hilfedatei:
// Hilfe-String: DivX Settings Manager typeLib
// DepndLst:
// (1) v2.0 stdole, (C:\WINDOWS\system32\stdole2.tlb)
// ************************************************************************ //
{$TYPEDADDRESS OFF} // Unit muß ohne Typüberprüfung für Zeiger compiliert werden.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interface

uses Windows, ActiveX, Classes, Graphics, StdVCL, Variants;
  

// *********************************************************************//
// In dieser Typbibliothek deklarierte GUIDS . Es werden folgende
// Präfixe verwendet:
// Typbibliotheken : LIBID_xxxx
// CoClasses : CLASS_xxxx
// DISPInterfaces : DIID_xxxx
// Nicht-DISP-Schnittstellen: IID_xxxx
// *********************************************************************//
const
  // Haupt- und Nebenversionen der Typbibliothek
  DivXSettingsManagerTypeLibMajorVersion = 1;
  DivXSettingsManagerTypeLibMinorVersion = 0;

  LIBID_DivXSettingsManagerTypeLib: TGUID = '{957BF83F-EE5A-42EB-8CE5-6267011F0EF9}';

  IID_IDivXSettingsManager: TGUID = '{959F112D-EA4D-4117-803A-28AC6465FEC0}';
  CLASS_DivXSettingsManager: TGUID = '{A0717E52-8AC8-4DD9-8682-0B76775125E6}';
type

// *********************************************************************//
// Forward-Deklaration von in der Typbibliothek definierten Typen
// *********************************************************************//
  IDivXSettingsManager = interface;

// *********************************************************************//
// Deklaration von in der Typbibliothek definierten CoClasses
// (HINWEIS: Hier wird jede CoClass zu ihrer Standardschnittstelle
// zugewiesen)
// *********************************************************************//
  DivXSettingsManager = IDivXSettingsManager;


// *********************************************************************//
// Schnittstelle: IDivXSettingsManager
// Flags: (256) OleAutomation
// GUID: {959F112D-EA4D-4117-803A-28AC6465FEC0}
// *********************************************************************//
  IDivXSettingsManager = interface(IUnknown)
    ['{959F112D-EA4D-4117-803A-28AC6465FEC0}']
    function RegisterDecoderFilter(out eventName: WideString; processID: LongWord): HResult; stdcall;
    function InitializeDecoderSettings(out aspectRatioX: SYSINT; out aspectRatioY: SYSINT;
                                       out brightness: SYSINT; out contrast: SYSINT;
                                       out saturation: SYSINT; out warmth: SYSINT;
                                       out warmthStrength: SYSINT; out disableLogo: SYSINT;
                                       out doubleBufering: SYSINT; out extendedOverlay: SYSINT;
                                       out extendedYUV: SYSINT; out autoPP: SYSINT;
                                       out autoPPLevel: SYSINT; out ppLevel: SYSINT;
                                       out disablePP: SYSINT; out smoothPlayback: SYSINT;
                                       out supportMPEG4: SYSINT): HResult; stdcall;
    function ShowConfigDialog: HResult; stdcall;
    function UnregisterDecoderFilter: HResult; stdcall;
    function SetFilename(const fname: WideString): HResult; stdcall;
    function RegisterDemuxFilter(out eventName: WideString; processID: LongWord): HResult; stdcall;
    function GetPendingEvent(out name: WideString; out param: SYSINT): HResult; stdcall;
    function DemuxInformationStart: HResult; stdcall;
    function AddAudioTrack(trackId: SYSINT; const trackName: WideString;
                           const trackLanguage: WideString): HResult; stdcall;
    function AddSubtitleTrack(trackId: SYSINT; const trackName: WideString;
                              const trackLanguage: WideString): HResult; stdcall;
    function AddMenu(id: SYSINT; const name: WideString): HResult; stdcall;
    function AddChapter(id: SYSINT; const name: WideString): HResult; stdcall;
    function SetMetadata(const buffer: WideString; size: SYSINT): HResult; stdcall;
    function DemuxInformationEnd: HResult; stdcall;
    function UnregisterDemuxFilter: HResult; stdcall;
    function GetDefaultAudioLanguage(out lang: WideString): HResult; stdcall;
    function GetDefaultSubtitleLanguage(out lang: WideString): HResult; stdcall;
    function SetAudioTrack(trackNum: SYSINT): HResult; stdcall;
    function SetSubtitleTrack(trackNum: SYSINT): HResult; stdcall;
    function SetFileDuration(seconds: SYSINT): HResult; stdcall;
    function SetFileSize(fileSizeHi: Integer; fileSizeLow: Integer): HResult; stdcall;
  end;

// *********************************************************************//
// Die Klasse CoDivXSettingsManager stellt die Methoden Create und CreateRemote zur
// Verfügung, um Instanzen der Standardschnittstelle IDivXSettingsManager, dargestellt von
// CoClass DivXSettingsManager, zu erzeugen. Diese Funktionen können
// von einem Client verwendet werden, der die CoClasses automatisieren
// möchte, die von dieser Typbibliothek dargestellt werden.
// *********************************************************************//
  CoDivXSettingsManager = class
    class function Create: IDivXSettingsManager;
    class function CreateRemote(const MachineName: string): IDivXSettingsManager;
  end;

implementation

uses ComObj;

class function CoDivXSettingsManager.Create: IDivXSettingsManager;
begin
  Result := CreateComObject(CLASS_DivXSettingsManager) as IDivXSettingsManager;
end;

class function CoDivXSettingsManager.CreateRemote(const MachineName: string): IDivXSettingsManager;
begin
  Result := CreateRemoteComObject(MachineName, CLASS_DivXSettingsManager) as IDivXSettingsManager;
end;

end.
  Mit Zitat antworten Zitat
xaromz

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

Re: DivX Tonspur umstellen (Switch Audio)

  Alt 21. Okt 2006, 20:25
Hallo,
Zitat von SwordfishCenter:
na das war aber eine schnelle hilfe doch bei mir passiert garnichts
die tonspur bleibt an und wechselt nicht.
SetAudioStream(FilterGraph,1); es ist egal ob ich 1 or 2 or 3 einsetze.
Die Aufzählung der Kanäle beginnt immer bei Null.
Zitat von SwordfishCenter:
habe auch die divxsm.tlb bzw DivXSettingsManagerTypeLib_TLB.pas
das ist die TypeLib von divxsm.exe Version 6.4 im "Windows\System32" von DivX.
Das progi legt sich als tryicon in die startleiste und ist zum steuern der divx Filme
aber damit komme ich nicht klar, bekomme immer eine fehlermeldung.
Wie gesagt, ich benutze immer den Morgan Stream Switcher und hatte damit nie Probleme. Die Aussage, es käme eine Fehlermeldung, ist allerdings etwas dünn.

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

Registriert seit: 2. Sep 2005
62 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: DivX Tonspur umstellen (Switch Audio)

  Alt 22. Okt 2006, 22:56
Hallo xaromz,
wie machst du das mit der Fernsteuerung mit dem Morgan Stream Switcher ?
kannst du mir ein kleines demo geben ?
  Mit Zitat antworten Zitat
xaromz

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

Re: DivX Tonspur umstellen (Switch Audio)

  Alt 22. Okt 2006, 23:14
Hallo,
Zitat von SwordfishCenter:
Hallo xaromz,
wie machst du das mit der Fernsteuerung mit dem Morgan Stream Switcher ?
kannst du mir ein kleines demo geben ?
Ich verwende exakt den oben geposteten Code. Der stammt aus einem Medienplayer, den ich schon seit ca. vier Jahren schreibe (ich komm' nur so selten dazu). Bei mir funktioniert das einwandfrei. Ich suche eben einfach einen Filter, der mehrere Audioeingänge hat, aber nur einen Ausgang. Dann sage ich diesem Filter, welchen Eingang er nehmen soll.
Schau doch mal im Debugger, welchen Filter mein Code findet.

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

Registriert seit: 2. Sep 2005
62 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: DivX Tonspur umstellen (Switch Audio)

  Alt 23. Okt 2006, 09:50
habe mein problem beseitigt und jetzt geht es auch echt supi
es lag an den DivX 6.4 Treiber der bringt doch einen umschalter mit und
dann ging der Morgan Stream Switcher nicht mehr.
der Morgan Stream Switcher zeigte auch im mediaplayer nur eine audiospur an.
habe jetzt wieder DivX5.2 darauf und alles ist supper.
nochmal vielen dank für deine hilfe
  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 16:19 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