NdkMediaCodec需要安卓5.0以上系统才能运行,在Android.mk里加入
1
| LOCAL_LDLIBS += -lmediandk |
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]);
}
} |
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都很流畅了。
Read more