Я пытаюсь использовать метод IMFSourceResolver :: CreateObjectFromByteStream для создания экземпляра IMFMediaSource для файла WMA с защитой DRM. Я адаптирую образец ProtectedPlayback из Windows SDK в качестве игровой площадки. Конечная цель, которую я хочу достичь, состоит в том, чтобы процесс воспроизведения подпитывался пользовательской реализацией, если IMFByteStream, который я напишу.
Однако я не могу заставить работать мою простую реализацию IMFByteStream или реализации, возвращаемые функцией MFCreateFile. Каждый возвращает HRESULT MF_E_UNSUPPORTED_BYTESTREAM_TYPE при передаче в CreateObjectFromByteStream.
Я протестировал образец проекта в его состоянии по умолчанию (используя CreateObjectFromUrl для файла) с файлом WMA, защищенным DRM, и он работал нормально. Файл не поврежден и лицензия действительна. Я не понимаю, почему замена этого бита кода с CreateObjectFromByteStream (MFCreateFile ()) не работает. Мне удалось найти небольшую документацию, которая описывает использование пользовательских потоков байтов или то, что распознаватель ожидает от экземпляра потока байтов.
Если у кого-то есть опыт работы с этим материалом или какая-либо идея, что я делаю неправильно, некоторые указатели будут признательны.
Код, который я использую здесь:
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));
Я не включил все это, потому что это в основном то же самое, что и образец, я только изменил эту часть.
Спасибо
Steve