确定mediaplayer的opencore或stagefright框架?

Jon*_* S. 9 android media-player

我需要确定媒体播放器是否正在使用opencore媒体框架,以便我可以禁用搜索我的流.opencore框架看起来似乎无法通过搜索失败,我很难相信他们允许投入生产,但看起来仍然如此.

我希望它就像确定他们的SDK版本一样简单,但是api 8的droid手机似乎仍然使用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();
            }
        }
    } 
Run Code Online (Sandbox Code Playgroud)

Sas*_*asq 6

这种方法不适用于三星Galaxy S,它说Stagefright已启用但不使用它,至少不适用于流式传输.更安全的检查是打开本地套接字并将MediaPlayer连接到它,并查看它报告为User-Agent的内容.

例如,这是我在三星Galaxy S和2.2仿真器上看到的;

Galaxy S: User-Agent:CORE/6.506.4.1 OpenCORE/2.02(Linux; Android 2.2)

模拟器: User-Agent: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();
Run Code Online (Sandbox Code Playgroud)

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

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