【第四篇章-android平台MediaCodec】判断是否支持硬解码代码

public boolean isSupportMediaCodecHardDecoder(){
    boolean isHardcode = false;
    //读取系统配置文件/system/etc/media_codecc.xml
    File file = new File("/system/etc/media_codecs.xml");
    InputStream inFile = null;
    try {
      in = new FileInputStream(file);
    } catch (Exception e) {
        // TODO: handle exception
    }

    if(inFile != null) {
        XmlPullParserFactory pullFactory;
        try {
            pullFactory = XmlPullParserFactory.newInstance();
            XmlPullParser xmlPullParser = pullFactory.newPullParser();
            xmlPullParser.setInput(in, "UTF-8");
            int eventType = xmlPullParser.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                String tagName = xmlPullParser.getName();
                switch (eventType) {
                case XmlPullParser.START_TAG:
                    if ("MediaCodec".equals(tagName)) {
                        String componentName = xmlPullParser.getAttributeValue(0);

                        if(componentName.startsWith("OMX."))
                        {
                            if(!componentName.startsWith("OMX.google."))
                            {
                                isHardcode = true;
                            }
                        }
                    }
                }
                eventType = xmlPullParser.next();
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
    return isHardcode;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 14:42:47

【第四篇章-android平台MediaCodec】判断是否支持硬解码代码的相关文章

【第四篇章-android平台MediaCodec】编解码逻辑认识

假设我们需要做的东西是一个媒体文件合成器,功能是先截取出多段媒体文件中的某些片段,再将这些片段合成为一个新的媒体文件,那么我们可以用mediacodec来帮我们做些事情. MediaCodec进行编解码的大体逻辑是这样的: 主要函数的调用逻辑如下: 从图可知,我们先用解码器将多段outputBuffer数据拿出来,然后再用编码器将它们放到一个文件里去.如果还要加上叠加字幕.特技处理等的效果,那么也是先拿到outputBuffer,然后处理,最后将处理后的数据喂给编码器,生成最终文件.

【第四篇章-android平台MediaCodec】解决Observer died. Quickly, do something, ... anything...

当出现!!!Observer died. Quickly, do something, ... anything...说明你的程序已经出现严重异常了,那会是什么情况呢?这个问题困扰了我许久,后来原来是使用了mediacodec的非公有API导致的,去掉这个API即OK. 版权声明:本文为博主原创文章,未经博主允许不得转载.

【第一篇章-android平台buffer播放探索】Steaming Source Player

为了在android平台找到buffer播放方式,花了不少功夫,在这个探索过程中,果断否定了native media的方式,在找到Steaming Source Player之前还进行了一次Nuplayer的尝试,我们把android里面的Nuplayer单独独立出来可进行NDK编译用加载库的方式跑起来,在三星以及小米的手机上跑是没有问题的,整体功能还算OK,但是想android平台通吃的话,会遇到很多兼容性问题,因为Nuplayer要对接底层OMX相关的模块,并不是每一家对OMX的封装做的到位

Android平台播放语音时支持听筒、喇叭之间切换

AnyChat for Android SDK默认是通过喇叭进行播放声音. AnyChat r4112版本新增接口,可以在听筒.喇叭之间进行播放声音的切换. AnyChatCoreSDK.mAudioHelper.SwitchPlayMode(0); 复制代码 如果需要指定切换到听筒,则调用API: AnyChatCoreSDK.mAudioHelper.SwitchPlayMode(AnyChatAudioHelper.PLAY_MODE_RECEIVER); 复制代码 如果需要指定切换到喇叭

【第二篇章-android平台buffer播放实现】buffer play demo

通过第一篇章的探索,可以明确下在android平台下是可以实现buffer播放的,它支持的android的版本是从4.0开始的,因此,android平台可以实现android4.0以上平台的buffer播放.我已经实现了一个DEMO,支持4.1到4.4,大家可以使用下,需要的人多的话可以分享源码.

【第一篇章-android平台buffer播放探索】buffer play demo

从google发布的各个android版本源码看,android4.0开始就做了支持buffer播放的接口及demo了,编译完android SDK后在out中会生成一个可执行文件stream,这个就是一个非常好的demo测试程序,支持H264的ts播放,程序源代码位置以android4.3为例说明下,目录:android4.3\frameworks\av\cmds\stagefright,对应文件为stream.cpp,通用播放器用buffer来做突破口就在此哦,从这里开始,感兴趣的可以这么做

深入了解android平台的jni---本地多线程调用java代码

一.jni调用java对象 JNI提供的功能之一是在本地代码中使用Java对象.包括:创建一个java类对象和通过函数传递一个java对象.创建一个java类对象,首先需要得到得到使用FindClass/GetObjectClass函数得到该类,然后使用GetMethodID方法得到该类的方法id,然后调用该函数. Java 和 Native 代码之间函数调用时,如果是简单类型,也就是内置类型,比如 int, char 等是值传递(pass by value),而其它 Java 对象都是引用传递

IOS android平台上都可使用的js分享代码

<span style="font-size:18px;"> </span> <span style="font-size:18px;">document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() { window.shareData = { "imgUrl": "{$shareimg}", "

Unity3D在Android平台使用嵌入式数据库Sqlite,解决无法找到数据库文件的问题

做一个需要嵌入式数据库Sqlite 的unity3d项目,在pc机上运行良好,需要发布到Android平台上,于是,各种坑爹...会遇到找不到数据库文件的问题.当在pc机上使用sqlite时,当执行SqliteConnection dbConnection = new SqliteConnection("data source = test.db");语句时,如果有这个数据库文件则建立连接,如果没有则创建出这个文件,然后建立连接.当在Android平台上时,扯淡的事情就开始了,总之便不