比如root用户生成了一个文件夹dir0,再执行
1 | chmod o-rwx dir0 |
那么当非root权限用户usr0访问此目录
1 2 | cd dir0/ bash: cd: dir0/: Permission denied |
人,技术,生活。
比如root用户生成了一个文件夹dir0,再执行
1 | chmod o-rwx dir0 |
那么当非root权限用户usr0访问此目录
1 2 | cd dir0/ bash: cd: dir0/: Permission denied |
让电脑连上安卓手机上,执行
1 2 | adb shell cat /system/build.prop |
可看到
1 2 3 4 5 | ... ro.build.version.sdk=18 ro.build.version.codename=REL ro.build.version.release=4.3 ... |
于是jni中可写如下代码获取系统版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <sys/system_properties.h> static int test(){ char *key = (char *)"ro.build.version.sdk"; //char *key = (char *)"ro.build.version.release"; char value[1024] = {0}; int ret = __system_property_get(key, value); if (ret <= 0 ) { DBG(("get prop value failed.\n")); return 0; } DBG(("ro.build.id is [%s]\n", value)); return 0; } |
NdkMediaCodec需要安卓5.0以上系统才能运行,在Android.mk里加入
1 | LOCAL_LDLIBS += -lmediandk |
如果是在安卓5.0以下系统中跑,程序会直接崩掉,主函数都不会进,所以要在旧手机中运行,要根据系统版本来判断是不是5.0以上系统,如果是则动态加载libmediandk.so,而不要写死在编译脚本里。
还有,要看手机上有没有解mjpeg的硬解码器,通过以下java代码来查看
1 2 3 4 5 6 7 8 9 10 11 12 | int n = MediaCodecList.getCodecCount(); for (int i = 0; i < n; ++i) { MediaCodecInfo info = MediaCodecList.getCodecInfoAt(i); String[] supportedTypes = info.getSupportedTypes(); boolean mime_support = false; if(info.isEncoder()){ continue; } for (int j = 0; j < supportedTypes.length; ++j) { Log.v("euhat", "codec info:" + info.getName()+" supportedTypes:" + supportedTypes[j]); } } |
以下是jni硬解码代码,因为没找到支持mjpeg硬解的手机,所以还没实际跑起来过。
但实际测试过程中,新的手机上软解1920x1080的mjpeg输出yuv都很流畅了。