stagefright 架构分析(一) stagefright 介绍

stagefright 架构分析(一) stagefright 介绍stagefright nbsp stagefright 是 androidfroyo 版本引入的多媒体架构 android4 1 代码 文件目录 nbsp frameworks av media libstagefrig 生成库 libstagefrig so 主要的 module awesomeplaye 其在 MediaPlayerS 中构造 player type

stagefright 

stagefright是android froyo版本引入的多媒体架构。

android 4.1代码:

文件目录 frameworks/av/media/libstagefright/

生成库libstagefright.so

主要的module:awesomeplayer

其在MediaPlayerService中构造:

player_type getPlayerType(const char* url)

{

    // m3u8 使用NU_PLAYER

    if (!strncasecmp(“http://”, url, 7)
            || !strncasecmp(“https://”, url, 8)) {

        size_t len = strlen(url);
        if (len >= 5 && !strcasecmp(“.m3u8”, &url[len – 5])) {

            return NU_PLAYER;
        }
        if(len >= 4 && !strcasecmp(“.mpd”, &url[len – 4])){

            return NU_PLAYER;
        }
        if (strstr(url,”m3u8″)) {

            return NU_PLAYER;
        }












    //rtsp rtp 使用NU_PLAYER

    if (!strncasecmp(“rtsp://”, url, 7)) {

        return NU_PLAYER;
    }

    if (!strncasecmp(“aahRX://”, url, 8)) {

        return AAH_RX_PLAYER;
    }

    if (!strncasecmp(“rtp://”, url, 6)) {

        return NU_PLAYER;
    }











    // use MidiFile for MIDI extensions
    int lenURL = strlen(url);
    for (int i = 0; i < NELEM(FILE_EXTS); ++i) {
        int len = strlen(FILE_EXTS[i].extension);
        int start = lenURL – len;
        if (start > 0) {

            if (!strncasecmp(url + start, FILE_EXTS[i].extension, len)) {

                return FILE_EXTS[i].playertype;
            }
        }
    }











    return getDefaultPlayerType();

}



static player_type getDefaultPlayerType() {

    char value[PROPERTY_VALUE_MAX];
    if (property_get(“media.stagefright.use-nuplayer”, value, NULL)
            && (!strcmp(“1”, value) || !strcasecmp(“true”, value))) {

        return NU_PLAYER;
    }




    //正常的default Player 为STAGEFRIGHT_PLAYER
    return STAGEFRIGHT_PLAYER;

}



static sp

createPlayer(player_type playerType, void* cookie,

        notify_callback_f notifyFunc)



{

    //创建StagefrightPlayer

    switch (playerType) {


        case STAGEFRIGHT_PLAYER:
            ALOGV(” create StagefrightPlayer”);
            p = new StagefrightPlayer;
            break;




}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224988.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午10:23
下一篇 2026年3月17日 上午10:24


相关推荐

  • php7不再支持HTTP_RAW_POST_DATA,微信支付$GLOBALS[‘HTTP_RAW_POST_DATA’]获取不到数据,…

    php7不再支持HTTP_RAW_POST_DATA,微信支付$GLOBALS[‘HTTP_RAW_POST_DATA’]获取不到数据,…

    2021年10月29日
    44
  • RS-232详解

    RS-232详解RS 232 是美国电子工业联盟制定的串行数据通信接口标准 原始编号全称是 EIA RS 232 简称 RS232 它被广泛用于 DCE DataCommunic 和 DTE DataTerminal 之间的连接 DCE 可以理解为数据通信端 比如 modem 设备 DTE 可以理解为数据终端 比如电脑 最早的台式电脑都会保留 9 针的 232 接口 用于串口

    2026年3月16日
    3
  • 防抖(debounce) 和 节流(throttling)「建议收藏」

    防抖(debounce) 和 节流(throttling)「建议收藏」防抖和节流是针对响应跟不上触发频率这类问题的两种解决方案。在给DOM绑定事件时,有些事件我们是无法控制触发频率的。如鼠标移动事件onmousemove,滚动滚动条事件onscroll,窗口大小改变事件onresize,瞬间的操作都会导致这些事件会被高频触发。如果事件的回调函数较为复杂,就会导致响应跟不上触发,出现页面卡顿,假死现象。在实时检查输入时,如果我们绑定onkeyup事件发请求去…

    2022年6月20日
    38
  • lseek函数

    lseek函数转自:https://baike.baidu.com/item/lseek/6385407?fr=aladdin相关函数dup,open,fseek表头文件#include#include定义函数off_tlseek(intfilde,off_toffset,intwhence);

    2022年6月29日
    31
  • 【转】细说.NET中的多线程 (六 使用MemoryBarrier,Volatile进行同步)

    【转】细说.NET中的多线程 (六 使用MemoryBarrier,Volatile进行同步)上一节介绍了使用信号量进行同步,本节主要介绍一些非阻塞同步的方法。本节主要介绍MemoryBarrier,volatile,Interlocked。MemoryBarriers本文简单的介绍一下这两个概念,假设下面的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 usingSystem; .

    2022年7月12日
    19
  • 如何卸载已安装的jdk_linux卸载tomcat

    如何卸载已安装的jdk_linux卸载tomcat一、查看Jdk的安装路径:whereisjavawhichjava(java执行路径)echo$JAVA_HOMEecho$PATH备注:如果是windows中,可以使用:setjava_home:查看JDK安装路径java-version:查看JDK版本二、卸载旧版本的JDK:1.确定JDK的版本:rpm-qa|grepjdkrpm-qa|grepgcj可能的结果…

    2026年4月19日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号