首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android MediaDrm API - PlayReady调用挂起

Android MediaDrm API - PlayReady调用挂起
EN

Stack Overflow用户
提问于 2015-01-29 21:28:05
回答 2查看 747关注 0票数 1

我正在使用Android NDK MediaDrm API通过PlayReady来解密视频访问单元。

我发现某些API调用会无限期地挂起。这些调用都是成功的,顺序如下:

代码语言:javascript
运行
复制
AMediaDrm_createByUUID()
AMediaDrm_openSession()
AMediaDrm_getKeyRequest()
AMediaDrm_provideKeyResponse()

但是在AMediaDrm_provideKeyResponse()调用之后,对AMediaDrm_closeSession()AMediaDrm_decrypt()的任何调用都将永远挂起。看看这两种情况下的反汇编,我们都会陷入跳转到自身的行上,比如:

代码语言:javascript
运行
复制
0xf2ea9dec: jmp 0xf2ea9dec

当直接在AMediaDrm_openSession()AMediaDrm_getKeyRequest()之后调用时,AMediaDrm_closeSession()可以工作。

以前有没有人遇到过这个问题?我是不是对AMediaDrm_provideKeyResponse()做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2015-02-03 15:02:11

您是否正在尝试在仿真器或附加调试器的情况下执行此操作?DRM技术倾向于对这两种行为中的任何一种都持非常悲观的看法,并在尝试这样的动作时禁用自己。

票数 0
EN

Stack Overflow用户

发布于 2016-10-15 00:58:49

所以我自己也遇到了这个问题。我现在正在测试Android6,所以我希望这个问题能在A7或未来的某个版本中得到修复(关闭挂起的会话似乎是一个糟糕的想法,所以我认为这一定是个bug)。

不过,我确实想出了一个解决方案。我怀疑我们都没有像预期的那样使用API,因为如果我在关闭drm会话之前从会话中释放密钥,一切都会完美地工作。如下所示:

代码语言:javascript
运行
复制
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);

我知道这有点晚了,所以我希望你能找到解决你的问题的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28215948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档