Запись потокового воспроизведения на Android

1

Я разрабатываю приложение на Android, которое воспроизводит поток Shoutcast с помощью MediaPlayer. У меня есть требование параллельной записи воспроизводимого потока на SD-карту в формате MP3

Есть ли выход в Android? Есть ли какой-либо образец кода для достижения этого

  • 0
    @user669231: user669231: Надеюсь, что потоковое содержимое не является авторским правом / общественным достоянием или у вас есть разрешение на его запись.
  • 0
    Это в свободном доступе ... пожалуйста, предложите техническую осуществимость и подход к решению
Показать ещё 2 комментария
Теги:
streaming
shoutcast

3 ответа

0
Лучший ответ

Я использовал это с игроком Last.FM(когда он действительно работал). Это было, однако, не простое средство записи.

Шаг 1: Записать прокси с функцией записи потока

Шаг 2: root ваш телефон

Шаг 3: работайте по телефону:

iptables -t nat -N proxy
iptables -t nat -A OUTPUT -m owner --uid-owner (uid of streaming app) -p tcp -j proxy
iptables -t nat -A proxy -p tcp -j DNAT --to proxyip:port

Мой "шаг 1" был написан на Perl и довольно беспорядочен. Для shoutcast может быть уже зарегистрированный прокси-сервер.

  • 0
    Спасибо за ответ, мне нужно больше подробностей по этому вопросу. Возможно, справочная ссылка
0

Или реализуйте что-то вроде этого

  private void startRecording() {

    BufferedOutputStream writer = null;
    try {
        URL url = new URL(RADIO_STATION_URL);
        URLConnection connection = url.openConnection();

        writer = new BufferedOutputStream(new FileOutputStream(new File(fileName)));
        recordingStream = connection.getInputStream();

        final int BUFFER_SIZE = 100;

        byte[] buffer = new byte[BUFFER_SIZE];

        while (recordingStream.read(buffer, 0, BUFFER_SIZE) != -1 && isRecording) {
            writer.write(buffer, 0, BUFFER_SIZE);
            writer.flush();
        }

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            recordingStream.close();
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
0

Я работаю над чем-то похожим и сталкиваюсь с одной и той же проблемой.

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

P.S. Не забывайте разрешения во время записи.

    private void startRecording() {
    String fileName = Environment.getExternalStorageDirectory().getAbsolutePath();
    fileName += "/FM-Recording-"+recordFile;
    mRecorder = new MediaRecorder();
    //mRecorder.setAudioSource(mediaPlayer.getAudioSessionID());
    mRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mRecorder.setOutputFile(fileName);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

    try {
        mRecorder.prepare();
    } catch (IOException e) {
        Log.e(LOG_TAG, "prepare() failed "+e.toString());
    }

    mRecorder.start();
}

   private class RecorderThread extends Thread {
    public void go(){
        runOnUiThread (new Thread(new Runnable() {
            public void run() {
                isRecording = true;
                startRecording();
            }
        }));
    }
    }

Вот макет: Макет приложения

Ещё вопросы

Сообщество Overcoder
Наверх
Меню