确定媒体播放器的opencore或stagefright框架?

我需要确定一个mediaplayer是否正在使用opencore媒体框架,以便我可以禁用search我的stream。 opencore框架似乎在默默无闻地寻找,我很难相信它们被允许投入生产,但是似乎仍然如此。

我希望它像确定他们的SDK版本一样简单,但具有api 8的droid手机似乎仍然使用opencore,所以似乎不是一个好的select。 有任何想法吗?

编辑:

在耶稣的回应之后,我想出了这个代码。 到目前为止,我的testing似乎很好。 如果有人不认为这是一个正确的方法寻找stream,让我知道

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(); } } } 

Solutions Collecting From Web of "确定媒体播放器的opencore或stagefright框架?"

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

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

Galaxy S: 用户代理: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(); 

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

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

使用Android 2.3.5,现在media.stagefright.enable-player属性不存在于/system/build.prop

您可以通过search来检测stagefright是否启用stream式传输

 media.stagefright.enable-http=true 

代替

 media.stagefright.enable-player=true 

要获取这些信息,您可以阅读设备的/system/build.prop文件。 在这个文件中有一个名为media.stagefright.enable-player的参数。 如果该参数设置为true,则stagefright处于活动状态,否则您的设备正在使用opencore