Задать вопрос

HTML5 audio и java

Добрый день!

Пытаюсь сделать прокси для wav-потока c веб камеры.

Класс занимающися этим, выглядит так:

public class AudioHandler extends HttpServlet {


    public AudioHandler() {
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        response.setContentType("audio/wav");
        response.setStatus(HttpServletResponse.SC_OK);
        response.setHeader("Cache-Control", "no-cache");

        //////////////////////////////////////

        InputStream in = null;
        OutputStream out = null;

        try {

            System.err.println("[audio] Get stream!");

            // URL = http://localhost:8080/control/audio?cam=10
            URL cam = new URL("http://192.168.10." + request.getParameter("cam") + "/audio.cgi");
            URLConnection uc = cam.openConnection();
            out = new BufferedOutputStream(response.getOutputStream());

            in = uc.getInputStream();
            byte[] bytes = new byte[8192];
            int bytesRead;

            while ((bytesRead = in.read(bytes)) != -1) {
                out.write(bytes, 0, bytesRead);
            }

        } catch (IOException ex) {
            // Disconnect detected
            System.err.println("[audio " + request.getParameter("cam") + "] Audio client disconnected");
            // Прерываем поток, иначе передача не будет остановена
            Thread.currentThread().interrupt();
        }
    }
}


С огорчением узнал, что средствами Flash поток wav не проиграть. Но в HTML5 есть тег audio, который может проигрывать wav-поток.

В HTML код:

<audio src="/control/audio?cam=20" controls preload="none">
                                Your browser does not support the
                                audio element.
 </audio>


Запускаю, слышу поток, но… ровно 33 секунды. После этого воспроизведение останавливается, как будто длинна файла составляет именно эти 33 секунды. Через Firebug видно, что поток не останавливался.

Подскажите, куда копать…
  • Вопрос задан
  • 3552 просмотра
Подписаться 5 Оценить Комментировать
Решения вопроса 1
Neuronix
@Neuronix Автор вопроса
IT
Вообщем, написал апплет — все работает.
Кому интересно — github.com/Neuronix2/IRIS-X-Player
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 7
barker
@barker
Не очень понятно из сообщения: так получается что in.read не вычитывает? После 33 секунд нулевую длину возвращает всё время в цикле? Сдаётся мне, ещё как минимум надо флушить поток после write, тем более что в BufferedOutputStream обёрнуто.
Ответ написан
wwwsevolod
@wwwsevolod
сделай через WebAudio API.
audio тэг не предназначен для потокового аудио видимо.
Ответ написан
@Emin
А чем Вам не подходят OpenSource решения для проигрывания wav на Flash-е?
etcs.ru/blog/as3/wav_player/
stackoverflow.com/questions/668186/can-the-flash-player-play-wav-files-from-a-url
Ответ написан
Neuronix
@Neuronix Автор вопроса
IT
Не, данные идут и дальше, но плеер останавливается на 33 секундах.
Ответ написан
Комментировать
Neuronix
@Neuronix Автор вопроса
IT
Попробовал проиграть в VLC — он дает те же 33 секунды. Похоже, что дело не в плеере.
Хэдеры потока выглядят так:

Connected to 192.168.10.20.
Escape character is '^]'.
GET /audio.cgi

HTTP/1.0 200 OK
Date: Wed Jan  6 20:20:27 2010
Server: GoAhead-Webs
Pragma: no-cache
Cache-Control: no-cache
Content-Type: audio/x-wav

RIFFWAVEfmt ▒>}data▒▒▒<▒< .... дальше идут данные

Куда еще можно посмотреть? Что потыкать? ;)
Ответ написан
Комментировать
Neuronix
@Neuronix Автор вопроса
IT
А у меня получается так:

Trying 192.168.10.150...
Connected to 192.168.10.150.
Escape character is '^]'.
GET /control/audio?cam=20
RIFFWAVEfmt ▒>}data▒<▒<▒<▒<

Видимо, тут и зарыта собако.
Ответ написан
Комментировать
Neuronix
@Neuronix Автор вопроса
IT
Никак не могу понять, почему заголовки не выходят… Может кто-то может указать ошибку?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы