Потоковая передача и воспроизведение потока .m4a (URL-адрес предварительного просмотра Itunes) в Android

Я хочу транслировать и воспроизводить URL-адреса предварительного просмотра iTunes, такие как http://a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/mzm.evyxvimp.aac.p.m4a. Я попытался использовать библиотеку AAC Decoder для Android. С помощью которого я могу транслировать и воспроизводить URL-адреса потоков AAC, такие как http://http.yourmuze.com:8000/play/paradise/l.aac. Но это не потоковые URL-адреса m4a (Logcat говорит java.io.FileNotFoundException: http://a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/mzm.evyxvimp.aac.p.m4a).

Как я могу транслировать ссылки .m4a?

Мой код:

public class AACPlayerActivity extends Activity implements OnClickListener,PlayerCallback{

private Button btnPlay;
private ProgressBar progress;
private Handler uiHandler;

private MultiPlayer multiPlayer;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    btnPlay = (Button)findViewById(R.id.playButton);
    progress = (ProgressBar)findViewById(R.id.progress);
    progress.setVisibility(View.INVISIBLE);

    btnPlay.setOnClickListener(this);

    uiHandler = new Handler();
}

public void playerException(Throwable arg0) {
    // TODO Auto-generated method stub

}

public void playerMetadata(String arg0, String arg1) {
    // TODO Auto-generated method stub

}

public void playerPCMFeedBuffer(boolean arg0, final int audioBufferSizeMs, final int audioBufferCapacityMs) {
    // TODO Auto-generated method stub
    uiHandler.post(new Runnable() {

        public void run() {
            // TODO Auto-generated method stub
             progress.setProgress( audioBufferSizeMs * progress.getMax() / audioBufferCapacityMs );
        }
    });
}

public void playerStarted() {

    uiHandler.post(new Runnable() {

        public void run() {
            // TODO Auto-generated method stub
            progress.setProgress( 0 );
            progress.setVisibility( View.VISIBLE );
        }
    });

}

public void playerStopped(int arg0) {
    // TODO Auto-generated method stub
    uiHandler.post(new Runnable() {

        public void run() {
            // TODO Auto-generated method stub
            progress.setVisibility( View.INVISIBLE );
        }
    });

}

public void onClick(View v) {
    // TODO Auto-generated method stub
    if(btnPlay.getText().equals("Play")){
        start();
        btnPlay.setText("stop");
    }else{
        stop();
    }
}


 private void start() {
        stop();
        // we cannot do it in playerStarted() - it is too late:
        multiPlayer = new MultiPlayer(this,MultiPlayer.DEFAULT_AUDIO_BUFFER_CAPACITY_MS, MultiPlayer.DEFAULT_DECODE_BUFFER_CAPACITY_MS);
        multiPlayer.playAsync("http://a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/mzm.evyxvimp.aac.p.m4a");
    }


    private void stop() {
        if (multiPlayer != null) {
            multiPlayer.stop();
            multiPlayer = null;
        }
    }

Обновления

  1. Я пытаюсь использовать ServeStream, он говорит, что URL не может быть открыт.
  2. Я пытаюсь использовать Vitamio SDK, но он также не воспроизводит itunes preview Urls.

Можно ли играть в itunes preview urls на андроиде?


person Ajmal M A    schedule 17.07.2012    source источник
comment
Что такое MultiPlayer? Вы пытались просто передать URL-адрес экземпляру Android по умолчанию MediaPlayer?   -  person devunwired    schedule 28.08.2012
comment
Я пробовал это, но медиаплеер Android по умолчанию не может передавать URL-адреса потока aac. Поэтому я попытался использовать библиотеку декодера AAC, которая использует MultiPlayer вместо MediaPlayer. Но это тоже не стриминг.   -  person Ajmal M A    schedule 29.08.2012
comment
Я разработчик ServeStream. Я попробовал предоставленный вами URL-адрес, и он воспроизводился без проблем с использованием последней версии (0.4.11), FYI. ServeStream удовлетворит ваши требования.   -  person William Seemann    schedule 04.09.2012
comment
@WilliamSeemann Я попробовал этот URL-адрес a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/, использующий последнюю версию (0.4.11), показывает, что URL-адрес не может быть открыт.   -  person Ajmal M A    schedule 07.09.2012
comment
Только что попробовал в эмуляторе с API 15, все работает отлично. Возможно, ваше устройство не поддерживает этот формат?   -  person William Seemann    schedule 08.09.2012


Ответы (3)


Это не имеет ничего общего с форматами мультимедиа и т. Д. Apple просто запрещает клиентам, не принадлежащим Apple, доступ к предварительным просмотрам. Вы можете подделать заголовок User-Agent и получить доступ к превью.

Прочитайте мой соответствующий пост в блоге здесь: http://ahmetalpbalkan.com/blog/how-to-bypass-itunes-music-previews-protection/ Вот почему вы получаете 404 при воспроизведении музыки на Android. это должно ответить на ваш вопрос.

person Ahmet Alp Balkan    schedule 25.09.2012
comment
я тоже так думаю... есть ограничения только по регионам? см. комментарий Уильяма Симанна ... Но использование ServeStream у меня никогда не работало .. Я тестировал его с разных устройств и симулятора из Индии. - person Ajmal M A; 28.09.2012

Взгляните на ServeStream:

Браузер HTTP-медиасервера и потоковый проигрыватель для Android.

Возможности:

  • Поддерживает Android 2.2+, 3.0+ (нет поддержки ‹ 2.2)
  • Воспроизведение мультимедийных файлов, поддерживаемых Android
  • Дополнительная поддержка списков воспроизведения m3u, m3u8, pls и asx.
  • Поддерживает многозадачность/воспроизведение звука в фоновом режиме
  • Режимы повтора и перемешивания
  • Поддержка будильника
  • Виджет на главном экране
  • Использует синтаксический анализ HTML для обеспечения навигации по HTTP-медиасерверам, обслуживающим HTML-страницы.
person Eng.Fouad    schedule 21.07.2012
comment
спасибо за ваш ответ, я попробовал приложение. Он также показывает, что URL-адрес не может быть открыт... - person Ajmal M A; 21.07.2012
comment
Я разработчик ServeStream. Я попробовал предоставленный вами URL-адрес, и он воспроизводился без проблем с использованием последней версии (0.4.11), FYI. ServeStream удовлетворит ваши требования. - person William Seemann; 04.09.2012

M4A и AAC поддерживаются Android. Я бы рекомендовал прочитать эту страницу: http://developer.android.com/guide/appendix/media-formats.html

Всего несколько моментов, о которых вы должны знать: а) старые устройства могут не иметь конкретной поддержки кодирования или формата (особенно, если вы используете ОС ниже 2.2) б) некоторые дешевые устройства могут иметь довольно странные вещи, интегрированные в аудио/видео стек. Видел такое на паре дешёвых китайских аппаратов.

Таким образом, вы можете попробовать использовать MediaPlayer API для его воспроизведения: http://developer.android.com/reference/android/media/MediaPlayer.html

Вы можете посмотреть пример здесь: http://blog.endpoint.com/2011/03/api-gaps-android-mediaplayer-example.html

person Victor Ronin    schedule 28.08.2012
comment
Я пробовал это также. Но не потоковое. Я получаю исключение java.io.FileNotFoundException. - person Ajmal M A; 29.08.2012
comment
Вы дали разрешение на доступ в Интернет? Я думаю, проблема в том, что он не может получить к нему доступ (по сравнению с тем, что он не может его воспроизвести) - person Victor Ronin; 30.08.2012
comment
Вы пробовали это на эмуляторе или на устройстве? Я рекомендую попробовать его на некоторых из последних устройств от крупного производителя. Как я уже писал, я видел много разных проблем с мультимедиа на старых устройствах, а также у эмулятора были (может быть, все еще есть) проблемы с воспроизведением медиафайлов. - person Victor Ronin; 30.08.2012
comment
Еще одна идея для вас (дальний план) — скомпилировать исходный код Android (source.android.com), добавьте журналы в метод MediaPlayer, который вы используете, чтобы понять, почему он возвращает FileNoFoundException. - person Victor Ronin; 30.08.2012
comment
я пробовал на nexus s и вопреки. спасибо за новый метод. Я посмотрю на это и сообщу вам позже, что происходит. - person Ajmal M A; 30.08.2012