Mjpeg VLC и HTTP Streaming - PullRequest
       60

Mjpeg VLC и HTTP Streaming

4 голосов
/ 29 апреля 2009

Я генерирую поток MJpeg и пытаюсь передать его в VLC и воспроизвести там.

код:

        public void SendMultiPartData(String contentType, Func<byte[]> getData)
    {
        MemoryStream mem = null;
        response.StatusCode = 200;
        for ( byte[] buffer = getData(); buffer != null && buffer.Length > 0; buffer = getData())
        {
            response.ContentType = "multipart/x-mixed-replace; boundary=--testboundary";
            ASCIIEncoding ae = new ASCIIEncoding();
            byte[] boundary = ae.GetBytes("\r\n--testboundary\r\nContent-Type: " + contentType + "\r\nContent-Length:" + buffer.Length + "\r\n\r\n");
            mem = new MemoryStream(boundary);
            mem.WriteTo(response.OutputStream);
            mem = new MemoryStream(buffer);
            mem.WriteTo(response.OutputStream);
            response.OutputStream.Flush();
        }
        mem.Close();
        listener.Close();
    }

Если я попытаюсь открыть поток с помощью Firefox, это вообще не проблема, хотя с VLC это не работает (VLC, кажется, продолжает читать, но никогда не показывает видео)

Я прослушивал потоковую передачу VLC-VLC, и они, похоже, используют в качестве заголовка HTTP «application / octet-stream» вместо multipart / x-mixed-replace

Есть идеи?

Tks заранее, Хосе

Ответы [ 3 ]

3 голосов
/ 08 мая 2009

Хосе, У меня была точно такая же проблема. Firefox проигрывает мой поток, а VLC - нет. Я прошел через очень много способов выяснить это, включая отладку исходного кода VLC, и не нашел нигде. Кстати, мой (REST) ​​URL выглядит как http://server:port/livevideo/xyz Тогда я подумал, что должен попробовать http://server:port/livevideo/xyz.mjpeg И угадайте, что, VLC начал воспроизводить видео! Я думаю, что VLC, возможно, понадобится немного подсказки больше, чем тип контента, чтобы понять, что это поток mjpeg. Надеюсь, это поможет.

Синди

0 голосов
/ 10 июля 2009

Я не могу заставить Firefox воспроизводить мой поток (хотя Chrome воспроизводит его нормально). Для VLC я установил буфер на 0 мс (в дополнительных опциях открытия), и он, похоже, работал оттуда, хотя моя скорость передачи данных убивает его.

0 голосов
/ 02 мая 2009

Вы пробовали это:

Response.Buffer = false;
Response.BufferOutput = false;

Или какой-то их вариант?

...