android - 确定 mediaplayer 的 opencore 或 stagefright 框架?

标签 android media-player

我需要确定媒体播放器是否正在使用 opencore 媒体框架,以便我可以禁用对我的流的搜索。 opencore 框架似乎在搜索时无声无息地失败了,我很难相信他们允许将其投入生产,但事实似乎确实如此。

我希望这就像确定他们的 SDK 版本一样简单,但是具有 api 8 的机器人手机似乎仍在使用 opencore,因此似乎不是一个好的选择。有什么想法吗?

编辑:

在耶稣的回应之后,我想出了这段代码。到目前为止,它似乎在我的测试中运行良好。如果有人认为这不是寻找流的可靠方法,请告诉我

    if (Build.VERSION.SDK_INT < 8) //2.1 or earlier, opencore only, no stream seeking
        mStreamSeekable = false;
    else { // 2.2, check to see if stagefright enabled
        mStreamSeekable = false;
        try {
                FileInputStream buildIs = new FileInputStream(new File("/system/build.prop"));
                if (CloudUtils.inputStreamToString(buildIs).contains("media.stagefright.enable-player=true"))
                    mStreamSeekable = true;
            } catch (IOException e) { //problem finding build file
                e.printStackTrace();
            }
        }
    } 

最佳答案

该方法不适用于 Samsung Galaxy S,它表示 Stagefright 已启用但未使用它,至少不用于流式传输。更安全的检查是打开本地套接字并将 MediaPlayer 连接到它,然后查看它报告为用户代理的内容。

例如,这是我在 Samsung Galaxy S 和 2.2 模拟器上看到的;

银河 S: 用户代理:CORE/6.506.4.1 OpenCORE/2.02 (Linux;Android 2.2)

模拟器: 用户代理:stagefright/1.0 (Linux;Android 2.2)

在一个线程中,做这样的事情;

    volatile int socketPort;

    ServerSocket serverSocket = new ServerSocket(0);
    socketPort = serverSocket.getLocalPort();

    Socket socket = serverSocket.accept();

    InputStream is = socket.getInputStream();

    byte [] temp = new byte [2048];     
    int bsize = -1;
    while(bsize <= 0) {
        bsize = is.read(temp);
    }
    String res = new String(temp, 0, bsize);

    if(res.indexOf("User-Agent: stagefright") >= 0) {
        // Found stagefright
    }

    socket.close();
    serverSocket.close();

在另一个线程中像这样(使上面的阻塞 accept() 调用返回);

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

关于android - 确定 mediaplayer 的 opencore 或 stagefright 框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4579885/

相关文章:

java - 带有媒体播放器的异步任务不会触发 PublishProgress

android - 如何从 Sqlite ( android ) 中的日期时间字段获取日期

android - 如何在范围内自动连接 BLE 设备?

java - 如何在 Vuforia SDK 中使用 jPCT?

java - 如何循环使用 mediaplayer - Android

android - VideoView/MediaPlayer 错误 (1, -18)

android - 找出 MediaPlayer 正在播放什么并停止它 onPause 或 onStop?

android - 将 Viewpager 与 MediaPlayer 一起使用

java - 应用程序没有从编辑文本中获取值(value),似乎在跳行

android - 哪个 android.widget 类等同于 <a href..>?