久了没更新NDK,今天下载了r10d,惊讶的发现多了个native-codec这个sample。
应该就是API 16那个JAVA版MediaCodec的native版
限制就是 最低 api 21 就是Android 5.0
这限制基本上近期都没戏了,先去刷个5.0的系统再来测试。
=============2015年2月10日,测试结果来了======================
http://movietrailers.apple.com/movies/universal/jurassicworld/jurassicworld-biggame_h1080p.mov
视频参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Duration: 00:01:00.14, start: 0.000000, bitrate: 9847 kb/s Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709) , 1920x1056, 9716 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 48k tbc (default) Metadata: creation_time : 2015-01-29 21:42:23 handler_name : Apple Video Media Handler Stream #0:1(eng): Data: none (tmcd / 0x64636D74), 0 kb/s (default) Metadata: creation_time : 2015-01-29 21:42:23 handler_name : Time Code Media Handler timecode : 01:00:00:00 Stream #0:2(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 12 5 kb/s (default) Metadata: creation_time : 2015-01-29 21:42:23 handler_name : Apple Sound Media Handler |
直接播放mov格式有问题的,用ffmpeg转成mp4格式
ffmpeg -i ?jurassicworld-biggame_h1080p.mov -c copy?jurassicworld-biggame_h1080p.mp4
精简了ndk里面的sample,方便阅读:native-codec
通过busybox top观测:CPU始终在1%~10%左右。测试机型 mi 2s
API 14开始支持的OpenMAX AL接口,只支持MPEG-TS封装的流,这个限制比较多,如果用来播放网络流如RTMP,需要再将解析后的H.264,AAC数据包再以mpeg-ts的格式封装进行硬解码,当然也是可行的只是稍微麻烦。2015年1月 92.9%的设备支持率。实现demo。
API 16提供了MediaCodec,可以编解码buffer型了,但是只有JAVA版,也有项目通过jni一一对应java层api,稍麻烦。 或者网络层就用java实现,抛弃jni。但是2015年1月 84%以上的支持率也是可以考虑了。
API 21 ,nativecodec来了,但是来得太晚,2015年1月,Android5.0根本排不上号,想必还得等上几年。
以上设备支持率数据来自友盟指数http://www.umindex.com/devices/android_os
原创文章,转载请注明: 转载自贝壳博客
本文链接地址: 来晚了的 NativeCodec