Pour identifier les entrées par nombre
[La fonctionnalité associée à cette page, le Kit de développement logiciel (SDK) Windows Media Format 11, est une fonctionnalité héritée. Il a été remplacé par lecteur source et enregistreur récepteur. Le lecteur source et l’enregistreur récepteur ont été optimisés pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise le lecteur source et l’enregistreur récepteur au lieu du Kit de développement logiciel (SDK) Windows Media Format 11, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]
Chaque exemple que vous passez au rédacteur doit être associé à un numéro d’entrée. Chaque numéro d’entrée correspond à un ou plusieurs flux dans le profil que l’enregistreur utilise pour écrire le fichier. Dans un profil, les sources multimédias sont identifiées par un nom de connexion. L’enregistreur associe un numéro d’entrée à chaque nom de connexion lorsque vous définissez le profil de l’enregistreur. Avant de pouvoir passer des exemples au rédacteur, vous devez déterminer les données attendues par chaque entrée. Vous ne pouvez pas supposer que les entrées seront dans le même ordre que les flux dans un profil, même si c’est souvent le cas. Par conséquent, la seule façon fiable de faire correspondre des entrées avec des flux consiste à comparer le nom de connexion de l’entrée avec le nom de connexion du flux.
Pour identifier les noms de connexion et les numéros d’entrée correspondants pour un profil chargé, effectuez les étapes suivantes :
- Créez un objet writer et définissez un profil à utiliser. Pour plus d’informations sur la définition de profils dans l’enregistreur, consultez Pour utiliser des profils avec l’enregistreur. Vous devez connaître les noms de connexion utilisés pour les flux dans le profil. Vous pouvez obtenir le nom de connexion à partir du profil en obtenant l’objet de configuration de flux pour chaque flux et en appelant IWMStreamConfig::GetConnectionName. Pour plus d’informations sur les profils et les objets de configuration de flux, consultez Utilisation des profils.
- Récupérez le nombre total d’entrées en appelant IWMWriter::GetInputCount.
- Effectuez une boucle dans toutes les entrées, en effectuant les étapes suivantes pour chacune d’elles.
- Récupérez l’interface IWMInputMediaProps pour l’entrée en appelant IWMWriter::GetInputProps.
- Récupérez le nom de connexion qui correspond au numéro d’entrée en appelant IWMInputMediaProps::GetConnectionName. Une fois que vous avez le nom de la connexion, vous connaissez les flux associés aux numéros d’entrée attribués par l’enregistreur.
L’exemple de code suivant affiche le nom de connexion pour chaque entrée. Pour plus d’informations sur l’utilisation de ce code, consultez Utilisation des exemples de code.
HRESULT GetNamesForInputs(IWMWriter* pWriter)
{
DWORD cInputs = 0;
HRESULT hr = S_OK;
WCHAR* pwszName = NULL;
WORD cchName = 0;
IWMInputMediaProps* pProps = NULL;
// Get the total number of inputs for the file.
hr = pWriter->GetInputCount(&cInputs);
GOTO_EXIT_IF_FAILED(hr);
// Loop through all supported inputs.
for (DWORD inputIndex = 0; inputIndex < cInputs; inputIndex++)
{
// Get the input properties for the input.
hr = pWriter->GetInputProps(inputIndex, &pProps);
GOTO_EXIT_IF_FAILED(hr);
// Get the size of the connection name.
hr = pProps->GetConnectionName(0, &cchName);
GOTO_EXIT_IF_FAILED(hr);
if (cchName > 0)
{
// Allocate memory for the connection name.
pwszName = new WCHAR[cchName];
if (wszName == NULL)
{
hr = E_OUTOFMEMORY;
goto Exit;
}
// Get the connection name.
hr = pProps->GetConnectionName(pwszName, &cchName);
GOTO_EXIT_IF_FAILED(hr);
// Display the name.
printf("Input # %d = %S\n", pwszName);
} // end if
// Clean up for next iteration.
SAFE_ARRAY_DELETE(pwszName);
SAFE_RELEASE(pProps);
} // end for inputIndex
Exit:
SAFE_ARRAY_DELETE(pwszName);
SAFE_RELEASE(pProps);
return hr;
}
Rubriques connexes