Буферизация аудиопотока

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

Сначала я проверил MediaPlayer, но он не предоставляет никаких методов для управления буфером. На самом деле вы даже не можете напрямую установить размер буфера.

Во-вторых, я попытался управлять буфером с помощью локальных файлов: постепенно загружать поток во временные файлы и переключать их. Но когда вы хотите переключиться на следующий файл (изменить источник данных в MediaPlayer), звук не воспроизводится постоянно. Вы можете слышать короткие прерывания.

Последняя идея - использовать потоковый прокси. Обычно он используется для воспроизведения потоков в версиях Android ниже 8. В потоковом прокси вы создаете ServerSocket, считываете из аудиопотока и записываете в плеер. Так что на самом деле я могу управлять буферизацией там. Я могу кэшировать поток и писать в MediaPlayer все, что захочу. Но. Не работает с Android 8.

У меня исключение: сброс подключения одноранговым узлом java.net.SocketException: сброс соединения одноранговым узлом. MediaPlayer 8 не хочет читать данные из сокета.

Таким образом, у меня есть два вопроса: 1) Каким еще способом реализовать буферизацию потока? 2) как адаптировать StreamProxy для android 8?

Любые идеи приветствуются.

Спасибо

21
задан computingfreak 18 January 2017 в 09:56
поделиться