Android прямой эфир - PullRequest
       2

Android прямой эфир

7 голосов
/ 10 февраля 2011

Я занимаюсь разработкой приложения, в котором я должен реализовать прямую трансляцию.Мой поиск в Google привел меня к мысли, что прямая трансляция невозможна до версии 2.1 для Android.

Это правильно?

Поскольку я получаю код стриминга музыки медиаплеера и могу использовать егоустановив метод ниже:

mp.setAudioStreamType(2);

Но я хочу знать, достаточно ли для потоковой передачи только такого кода и сохранить файл, как показано ниже:

private void setDataSource(String path) throws IOException {
        if (!URLUtil.isNetworkUrl(path)) {
            mp.setDataSource(path);
        } else {
            Log.i("enter the setdata","enter the setdata");
            URL url = new URL(path);
            URLConnection cn = url.openConnection();
            cn.connect();
            InputStream stream = cn.getInputStream();
            if (stream == null)
                throw new RuntimeException("stream is null");
            File temp = File.createTempFile("mediaplayertmp", "dat");
            String tempPath = temp.getAbsolutePath();
            FileOutputStream out = new FileOutputStream(temp);
            byte buf[] = new byte[128];
            do {
                int numread = stream.read(buf);
                if (numread <= 0)
                    break;
                out.write(buf, 0, numread);
            } while (true);
            mp.setDataSource(tempPath);

            try {
                stream.close();
                Log.i("exit the setdata","exit the setdata");
            }
            catch (IOException ex) {
                Log.e(TAG, "error: " + ex.getMessage(), ex);
            }
        }
    }

Есть ли какие-то дополнительные вещи, необходимые для потокового телевидения?Пожалуйста, направьте меня.

1 Ответ

5 голосов
/ 24 апреля 2011

Адрес «Достаточно ли»: абсолютно нет.

Вы сохраняете все данные с URL-адреса на устройство, а затем воспроизводите их.Это работает, если вы можете гарантировать, что это небольшой клип, но «прямая трансляция» подразумевает, что мы говорим о потоке неизвестной длины, отправляемом в режиме реального времени.

Влияние этого:

  1. Перед началом воспроизведения N-минутной программе потребуется N-минутная потоковая передача на устройство.
  2. При длительной трансляции возможно заполнить всю доступную память.

Метод MediaPlayer.setDataSource (FileDescriptor fd) должен считывать данные из любого источника, для которого можно получить FileDescriptor, включая сокеты.

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

...