J'essaie d'utiliser la méthode IMFSourceResolver :: CreateObjectFromByteStream pour créer une instance IMFMediaSource pour un fichier WMA protégé par DRM. J'adapte l'exemple ProtectedPlayback du Kit de développement Windows en tant que terrain de jeu. L'objectif final que je souhaite atteindre est d'avoir le processus de lecture alimenté par une implémentation personnalisée si IMFByteStream que je vais écrire.Utilisation de IMFSourceResolver :: CreateObjectFromByteStream
Cependant, je ne peux pas utiliser mon implémentation IMFByteStream simple ou les implémentations retournées par la fonction MFCreateFile. Chaque renvoie un HRESULT de MF_E_UNSUPPORTED_BYTESTREAM_TYPE lorsqu'il est transmis à CreateObjectFromByteStream.
J'ai testé l'exemple de projet dans son état par défaut (en utilisant CreateObjectFromUrl sur un fichier) avec un fichier WMA protégé par DRM et cela a fonctionné correctement. Le fichier n'est pas corrompu et la licence est valide. Je ne comprends pas pourquoi substituer ce morceau de code avec CreateObjectFromByteStream (MFCreateFile()) ne fonctionne pas. J'ai pu trouver peu de documentation qui couvre l'utilisation de flux d'octets personnalisés ou ce que le résolveur attend d'une instance de flux d'octets.
Si quelqu'un a une expérience avec ce genre de choses ou une idée de ce que je fais mal, certains pointeurs seraient appréciés.
Le code J'utilise est ici:
IMFByteStream* stream = NULL;
HRESULT hr2 = MFCreateFile(
MF_ACCESSMODE_READ,
MF_OPENMODE_FAIL_IF_NOT_EXIST,
MF_FILEFLAGS_NONE,
L"C:\\IFB.wma",
&stream);
CHECK_HR(hr = pSourceResolver->CreateObjectFromByteStream(
stream,
NULL,
MF_RESOLUTION_MEDIASOURCE,
NULL,
&ObjectType,
&pSource));
Je n'ai pas inclus la chose parce que son fondamentalement les mêmes que l'échantillon, je n'ai changé cette partie.
Merci,
Steve