Android MediaDrm PlayReady - зависают вызовы API

Я использую Android NDK MediaDrm API для расшифровки блоков доступа к видео с помощью PlayReady.

Я обнаружил, что определенные вызовы API зависают бесконечно. Все эти вызовы успешны в следующем порядке:

AMediaDrm_createByUUID()
AMediaDrm_openSession()
AMediaDrm_getKeyRequest()
AMediaDrm_provideKeyResponse()

Но после AMediaDrm_provideKeyResponse() вызов, любой вызов AMediaDrm_closeSession() или же AMediaDrm_decrypt() будет висеть вечно. Глядя на разборку в обоих случаях, мы застряли на линии, переходящей к самой себе, такой как:

0xf2ea9dec: jmp 0xf2ea9dec

AMediaDrm_closeSession() работает при вызове сразу после AMediaDrm_openSession() или же AMediaDrm_getKeyRequest(),

Кто-нибудь сталкивался с этой проблемой раньше? Есть ли что-то, с чем я могу ошибаться? AMediaDrm_provideKeyResponse()?

2 ответа

Возможно, вы пытаетесь это под эмулятором или с отладчиком прилагается? Технологии DRM, как правило, имеют очень смутное представление об одном из них и отключают себя, когда предпринимаются такие действия.

Так что я сам столкнулся с этим. Я сейчас тестирую на Android 6, поэтому я надеюсь, что это исправлено в A7 или в каком-либо будущем выпуске (API для закрытия зависшего сеанса кажется ужасной идеей, поэтому я предполагаю, что это должно быть ошибкой).

Я пришел к решению, хотя. Я подозреваю, что мы оба не использовали API, как предполагалось, потому что, если я освобождаю ключи от сеанса до закрытия сеанса drm, все работает просто отлично. Вот так:

AMediaDrm*           mediadrm = NULL;
AMediaDrmKeySetId    keySetId;
AMediaDrmSessionId   drmsessionid;

< ... Code to do everything else that you need to do before you get to this point ... >

AMediaDrm_provideKeyResponse(mediadrm, &drmsessionid, &drmKey[0], drmKey.size(), &keySetId); 

< ... Use your session to playback some DRM protected content ... >

AMediaDrm_removeKeys(mediadrm,&keySetId);
AMediaDrm_closeSession(mediadrm, &drmsessionid);
AMediaDrm_release(mediadrm);

Я знаю, что уже немного поздно, поэтому я надеюсь, что вы нашли решение вашей проблемы.

Другие вопросы по тегам