Aufnahme von TV-Audio
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]
Verwenden Sie den Audioaufnahmefilter, um Audiodaten vom analogen Fernsehen in eine Datei zu erfassen. Verwenden Sie den Systemgeräteenumerator, um den Audioaufnahmefilter zu erstellen. Es können mehrere Audioaufnahmegeräte auf dem System des Benutzers vorhanden sein; Der Benutzer muss das Gerät auswählen, das den Sound Karte darstellt.
Schließen Sie den Audioaufnahmeausgabe-Pin an den Mux-Filter an:
hr = pBuild->RenderStream(
&PIN_CATEGORY_CAPTURE, // Capture pin.
&MEDIATYPE_Audio, // Audio media type.
pAudioCap, // Pointer to the audio capture filter.
NULL, // Optional audio compressor filter.
pMux); // Pointer to the mux filter.
Die Eingabestifte müssen an nichts angeschlossen werden. Jeder Eingabenadel stellt eine physische Eingabe auf dem Audioaufnahmegerät dar. Verwenden Sie die IAMAudioInputMixer-Schnittstelle , um die Eingabe zu aktivieren, die den Audiodatenstrom vom Tuner empfängt. Die Eingabepins werden anhand des Namens identifiziert, z. B. "Line In" oder "CD Audio". Leider können sich die Namen von einem Gerät zum nächsten ändern. Außerdem verwenden verschiedene TV-Tunerkarten unterschiedliche Eingaben zum Sound Karte. Daher liegt es am Benutzer, zu identifizieren, welche Eingabe verwendet werden soll.
IEnumPins *pEnum = NULL;
hr = pAudioCap->EnumPins(&pEnum);
if (SUCCEEDED(hr))
{
IPin *pPin = NULL;
while (S_OK == pEnum->Next(1, &pPin, NULL))
{
IAMAudioInputMixer *pMix;
hr = pPin->QueryInterface(IID_IAMAudioInputMixer, (void**)&pMix);
if (SUCCEEDED(hr))
{
// Use IPin::QueryPinInfo to get the pin name.
pPin->Release();
if (...) // If the user selects this pin:
{
pMix->put_Enable(TRUE);
pMix->put_MixLevel(1.0);
pMix->Release();
break;
}
pMix->Release();
}
}
}
pEnum->Release();
Zugehörige Themen