【问题标题】:Android MusicPlayer uses Stagefright or opencoreAndroid MusicPlayer 使用 Stagefright 或 opencore
【发布时间】:2014-03-02 21:14:54
【问题描述】:

我读到如果media.stagefright.enable-player 设置为true,则设备使用Stagefright。 在我设备的build.prop 我看到了

media.stagefright.enable-player = false

当我在下面累的时候

MediaPlayer mp = new MediaPlayer();
mp.setDataSource(String.format("http://127.0.0.1:%d/", socketPort));
mp.prepare();
mp.start();

我托管了一个媒体播放器连接到的服务器套接字

ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(0);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         socketPort = serverSocket.getLocalPort();

        Socket socket = null;
        try {
            socket = serverSocket.accept();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        InputStream is = null;
        try {
            is = socket.getInputStream();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        byte [] temp = new byte [1024];     
        int bsize = -1;
        while(bsize <= 0) {
            try {
                bsize = is.read(temp);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        final String readData = new String(temp);
        Log.e("readDta",readData);

我得到的日志是

11-22 15:06:56.656: E/readDta(8737): GET / HTTP/1.111-22 15:06:56.656: E/readDta(8737): Host: 127.0.0.111-22 15:06:56.656: E/readDta(8737): User-Agent: stagefright/1.1 (Linux;Android 2.3.6)

现在我的疑问是,它如何向我显示User-Agent: stagefright/1.1,尽管它在build.prop 中设置了media.stagefright.enable-player = false

如果不是确定使用哪个的方法,我如何检测是否opencore or stagefright ?

【问题讨论】:

    标签: android android-mediaplayer stagefright opencore


    【解决方案1】:

    恕我直言,这是来自 GB 的古老道具,您使用的是什么 Android 设备?即使在GB中,我也没有在代码中的用法中看到这一点......我可以想象的是“media.stagefright.enable-player false/true”意味着stagefright播放器是/未使用并不意味着libstagefrigt .so(使用 Open MAX 的框架)被使用或未被使用。当我使用 GB libstagefright 时,一直在使用 Open MAX(只有 GB 中的一些编解码器没有移植到 OMX)。

    【讨论】:

    • 那么,你的意思是GB有用于编解码器的OpenMax,如果是这样,我可以通过从jni调用openmax il apis来访问编解码器吗?
    • 关于如何在我们的 ndk 应用程序中使用 openmax 和 stagefright 的任何指导?
    • @nmxprime..是的,GingerBread 对某些编解码器有 OMX。但是,您不能以独立方式访问该组件。这种支持是在JellyBean 中引入的。你能确认你正在使用哪个版本的android?
    【解决方案2】:

    从您的日志中,我觉得Android 的版本是Froyo 2.2.3,这可能是Stagefright 成为默认值之前的最后一个版本。播放器的选择取决于多个条件,例如它是file 源还是http 源或rtsp 源。

    Froyo 2.2.3 中,有两个用于启用Stagefright 播放器的键和一个构建标志。要启用Stagefright 播放器进行正常播放,您需要使用BUILD_WITH_FULL_STAGEFRIGHT 构建框架代码,如下所示:http://androidxref.com/2.2.3/xref/frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp#670

    getDefaultPlayer 被多个条件调用,在定义了上述宏的情况下,它会尝试检查系统属性"media.stagefright.enable-player" 的值(参考:http://androidxref.com/2.2.3/xref/frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp#750

    在您的http 源的情况下,检查了一个不同的系统属性,即"media.stagefright.enable-http"。在您的情况下,我觉得这已启用/设置为 true,因此正在使用 Stagefright 播放器。请将此设置为 false 以仅启用 PV_Player

    【讨论】:

      猜你喜欢
      • 2014-05-24
      • 2012-11-14
      • 2012-12-06
      • 1970-01-01
      • 2013-12-02
      • 2011-10-11
      • 2012-02-24
      • 2014-03-21
      • 2011-07-22
      相关资源
      最近更新 更多