安卓应用无法播放DRM音乐文件

对于第三方应用如Google music等应用无法播放DRM音乐的问题。这里面我们重点记录一下MTK项目上的处理方法。

1.首先我们需要知道我们要添加应用的包名。adb shell ;top 查看我们要添加的应用的包名。

31597 u0_a95       20   0 4.2G 145M 123M S  1.3   5.1   0:04.81 com.google.android.music:main

   作为备用我们需要执行 ps -Z 31597 去查看一下 这个应用的分组,方便我们后面权限申请的使用。这里面我们可以看见谷歌音乐的分组是untrusted_app。

u:r:untrusted_app:s0:c512,c768 u0_a95       31597   624 4441008 150504 0                   0 S com.google.android.music:main

2.我们需要在下面的几个文件中添加谷歌音乐的包名。

vendor/mediatek/proprietary/packages/providers/MediaProvider/src/com/android/providers/media/DrmHelper.java

 private static void initDrmPermistProcessList() {
        String[] permitProcessNames = new String[] {
                ///modify by xiangzaixiansheng @{
                "com.google.android.music:ui",
                ///}@
                "system"
        };

vendor/mediatek/proprietary/frameworks/av/drm/mtkwhitelist/DrmMtkDef.cpp

bool DrmMtkDefender::init() {
    // Add drm trust client here, it will be checked in DrmManagerService and MediaPlayerService
    // 1. inhouse apps(for OMA DRM)
    DRM_TRUSTED_PROC.push(String8("com.android.gallery3d")); // image and video, image crop
    DRM_TRUSTED_PROC.push(String8("com.android.gallery3d:widgetservice")); // gallery widget
    DRM_TRUSTED_PROC.push(String8("com.android.music")); // audio
    ///modify by xiangzaixiansheng @{ 
    DRM_TRUSTED_PROC.push(String8("com.google.android.music:ui"));    
    ///}@
}
    
bool DrmTrustedApp::init() {
    TRUSTED_APP.push_back(String8("android.process.media"));//for mediaprocess
    TRUSTED_APP.push_back(String8("com.android.gallery3d:widgetservice"));//for gallery widget
    ///modify by xiangzaixiansheng@{
    TRUSTED_APP.push_back(String8("com.google.android.music:ui"));
    ///}@
    //Add your special process name here

    return true;
}

 

bool DrmTrustedClient::init() {
    ///modify by xiangzaixiansheng@{
    TRUSTED_PROC.push_back(String8("com.google.android.music:ui"));
    ///}@
    //Add your special process name here

    return true;
}

3.在添加完上面的应用包名后,有可能还是不能播放。这个时候我们就需要看log

03:02:35.886000 514 514 W Binder:514_5: type=1400 audit(0.0:915): avc: denied { read } for name="cmdline" dev="proc" ino=104543 scontext=u:r:mediaserver:s0 tcontext=u:r:untrusted_app:s0:c512,c768 tclass=file permissive=0

这是我们可以看见其实是应用没有读的权限,我们添加权限即可。

在这里插播一下当然不添加权限之前你也可以用adb指令先实验一下。即

1) adb shell setenforce 0

2) adb shell getenforce (This should return PERMISSIVE)

经过上面两步操作之后不要重启手机,直接测试即可。有可能你会发现竟然可以播放了。当然了这里主要告诉大家的就是“你没权限”。

解决方法如下:

device/mediatek/sepolicy/XXX/plat_private/mediaserver.te 文件中添加如下权限

allow mediaserver untrusted_app:file { read open getattr}; 

经过如上的操作,应该就可以播放drm文件了。如果还是不能播放就要看log了,这里面主要搜索denied 看是因为什么权限没有,并且还要看这个应用的分组是什么,例如untrusted_app 还是priv_app。 这里面在附赠几个权限给大家,希望也能解决你的困惑。

allow mediaserver priv_app:dir search;
allow mediaserver priv_app:file { read open getattr};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值