Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Wav-stream proxy и HTML5


Автор: Neuronix 11.9.2012, 13:20
Добрый день!

Пытаюсь сделать прокси для 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);
                out.flush();
            }

        } 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 видно, что поток не останавливался и данные еще передаются.

Подскажите, куда копать…

Автор: AntonSaburov 11.9.2012, 14:08
Я бы попробовал другой брауезр для начала. Потом смотреть - а сервлет читает и отдает в этот момент или зависает ?

Автор: Neuronix 11.9.2012, 14:28
Цитата(AntonSaburov @ 11.9.2012,  14:08)
Я бы попробовал другой брауезр для начала. Потом смотреть - а сервлет читает и отдает в этот момент или зависает ?

Попробовал Chrome - то же самое. В Firebug видно, что поток не прерывается.
Как посмотреть еще - не знаю...

Автор: Neuronix 11.9.2012, 15:05
Попробовал проиграть в VLC - он дает те же 33 секунды. Похоже, что дело не в плеере. Куда еще можно посмотреть?

Автор: Neuronix 11.9.2012, 16:10
На выходе с прокси ответ без заголовков (т.е. без HTTP 200, Content-Type и т.п.) - сразу идет тело WAV. Похоже, что может быть проблема именно в этом. Никак не могу понять, почему заголовки не выходят....

Автор: AntonSaburov 11.9.2012, 18:45
Заголовки может прокси режет. А без прокси проверить не получается ? И что там сервлет делает - он висит на отдаче в стрим потока байтов или крутиться. Поставь простой логинг.

Автор: Neuronix 12.9.2012, 12:58
С камеры - те же 33 секунды ;)
Вообщем, написал апплет - все работает как надо. Кому интересно - https://github.com/Neuronix2/IRIS-X-Player

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)