Intereting Posts
Android: извлечение логарифма перед сбоем (перезагрузка) на реальном устройстве Как использовать звук щелчка по умолчанию, используя view.playSoundEffect (SoundEffectConstants.CLICK); PutFragment () – Фрагмент x в настоящее время отсутствует в FragmentManager Любой прослушиватель возможен, если условие Android – нажмите клавишу клавиатуры Новая версия SwipeRefreshLayout вызывает неправильную нитку просмотров Как получить содержимое веб-сайта и поместить его так, как мы хотим, в макет приложения для Android? Доступ к приложениям Android (для людей с ограниченными возможностями) с помощью PhoneGap Как запустить эмулятор Android автоматически из Eclipse? Как читать данные из определенного буфера с помощью glreadpixels на основе GLES30 на Android Crashlytics Несколько файлов dex определяют ошибку Android: лучше делать много действий или 1 активность, которая меняется «на лету»? Блок блокировки поврежден во время дешифрования (Android) Android AndEngine: sprite.detachSelf () не удаляет спрайт Что делать с курсором после SQLite-запроса?

Определить рамки opencore или stagefright для медиапланера?

Мне нужно определить, использует ли медиапланер медиа-инфраструктуру 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 к нему и посмотреть, что он сообщает в качестве User-Agent.

Например, это то, что я вижу на моем Samsung Galaxy S и 2.2 Emulator;

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

И как это в другом потоке (делает вызов блокировки accept () выше return);

  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

Возможно, вы сможете определить, включен ли режим stagefright для потоковой передачи, ища

 media.stagefright.enable-http=true 

вместо

 media.stagefright.enable-player=true 

Чтобы получить эту информацию, вы можете прочитать файл /system/build.prop своего устройства. В этом файле есть параметр media.stagefright.enable-player . Если для этого параметра установлено значение true, то stagefright активен, иначе ваше устройство использует opencore .