Подтвердить что ты не робот

Android: потоковая передача AAC + не работает с MediaPlayer (ссылки Android 4.2.2/Shoucast)

Недавно я столкнулся с некоторыми проблемами потоков потокового AAC + с Android MediaPlayer. Что касается документации, должна быть поддержка для потоковой передачи AAC + в Android 4.1. (Тестовое устройство представляет собой Nexus 2 с Android 4.2.2)

Я нашел некоторые связанные вопросы (здесь <, , здесь), но они в основном связаны со старыми версиями Android или датированы до выпуска 4.1. Я нашел AACPlayerAndroid libary, но там вы должны приобрести лицензию.

Если я попытаюсь передать поток AACPlus, MediaPlayer выбрасывает MediaPlayerError (1,-2147483648), который определяется как "неподдерживаемый формат носителя". Однако, если я запускаю тот же AAC + Stream в эмуляторе, он работает нормально!

То, что я пробовал до сих пор:

  • Простой код в эмуляторе работает?!? (почему... возможно, кодек поддерживается на локальной машине?)

  • тестирование двух других устройств с ошибками 4.1 или 4.2 также

  • установить поток AAC + с ручным заголовком и setDataSource(String path), который не работает (изменение HTTP-заголовка также не выполняется)

  • создать новый проект SimpleMediaPlayer → не удается

  • пытается проверить сетевой трафик, если устройство Android перенаправлено на неправильный URL-адрес. Фактически я подключил устройство к Charles с помощью Proxy, но смог контролировать Android-браузер. Тем не менее, я считаю, что перенаправление правильное!

Вот моя реализация setDataSource моего Streaming.class

public AmplifyMediaPlayer(PlayerStationObject playerStationObject, Context context) {
     super();
     this.setAudioStreamType(AudioManager.STREAM_MUSIC);
     this.mCurrentStationObject = playerStationObject;
     try {
        //AAC+ TestStream #1: NOT WORKING
        //Uri uri = Uri.parse("http://up-gc2.webnow.com.br/alpha.aac");

        //AAC+ TestStream #2: NOT WORKING   
        //Audio codec: 64 kbit/s 44.1 kHz AAC+, 128 kbit/s 44.1 kHz MP3
        //Uri uri = Uri.parse("http://relay.publicdomainproject.org:80/jazz_swing.aac   ");

        //Setting HTTP header for fixing some issues with normal setDataSource Header from Android
        //User-Agent "iTunes" was set to force re-direct to shoutcast streaming url     
        Map<String, String> headers = new HashMap<String, String>();
        headers.put("User-Agent", "iTunes");

        setDataSource(context, uri, headers);

        //AAC Codec works fine...
        //setDataSource("http://fri.net.pl:8000/fri");

        prepareAsync();

        //...

Итак, у меня возникают следующие вопросы:

Почему я не могу играть в ACC + Stream на Android 4.1 и выше, даже если они должны поддерживаться?

У кого-нибудь есть ACC + Stream, который он успешно передает с MediaPlayer Class с Android? (просто чтобы проверить, есть ли что-то с моей интеграцией с проигрывателем)

Если ACC + не поддерживается, знаете ли вы хорошую библиотеку или примерный проект, как они решили проблему?

Спасибо или любые предложения!

Другие теги AAC +, которые я тестировал: http://jam-aacp.rautemusik.fm

ИЗМЕНИТЬ До сих пор я закончил: это невозможно. Библиотека AACP-декодера является хорошим решением, но пока не стабильна. Надежда Android будет поддерживать это в ближайшее время. Если вы не согласны, ПОЖАЛУЙСТА, ОБРАТИТЕ!

4b9b3361

Ответ 1

У меня была такая же проблема для моего приложения.

Я много играл с MediaPlayer без успеха. Я даже тестировал прокси-сервер внутри приложения, которое используется для потоковой передачи MP3-потоков в старых версиях Android.

и я также проверил aacplayer-android/aacdecoder-android, но это было не очень стабильно в моих тестах...

Мы закончили с BASS для Android, поскольку мы не смогли найти.

Но для этого также требуется AAC Patent License *, если вы хотите, чтобы приложение было общедоступным (для частного использования я думаю, что это не волнует...) также требуется BASS License, если вы не являетесь некоммерческой организацией.

*) Приложения для Android считаются потребительскими продуктами, а не программным обеспечением для ПК для ПК... просто чтобы избежать ошибки, которую мы сделали для нашего приложения...

[UPDATE]
Зачем нужны патентные сборы?
Нужно платить комиссионные, как только Продукт (в этом случае приложение) приносит собственный декодер (или кодировщик), как и BASS, так и aacdecoder-android приносят свой собственный код декодера, они должны иметь лицензию AAC. Только если бы можно было использовать декодер, доступный в хост-системе (который лицензируется/оплачивается разработчиком системы хоста - в данном случае Google), он "свободен". Но, как кажется в настоящее время нет способа доступа/использования кодеков устройства...

Ответ 2

Если вы можете подключить Nexus 2 к usb и запустить adb shell и получить терминал, вы можете использовать stagefright для проверки доступных доступных кодеков и профилей.

Например, stagefright -l и stagefright -p будут двумя полезными командами.

Ответ 3

Я также изучил это, и я обнаружил, что необходимо платить лицензионные сборы, если вы включаете свой собственный декодер:

Ответ на Vialicensing (AAC):

"Если вы будете использовать встроенную поддержку AAC на Android, чтобы ваши приложения не включают кодировщик или декодер AAC, тогда вы не будете есть необходимость/обязательство по лицензии - ваши продукты не будут нарушать".

Это означает, что единственный способ, которым вы могли бы играть в AAC без роялти, - это то, что родной Android-плеер поддерживает AAC со встроенным декодером. По внешнему виду, на 4-й версии не поддерживается. Я попытался подавать плеер потоку AAC, и он просто буферизует навсегда.