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);
Я знаю, что уже немного поздно, поэтому я надеюсь, что вы нашли решение вашей проблемы.