Вопрос

Я генерирую поток 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-to-VLC, и они, похоже, используют в качестве HTTP-заголовка "application / octet-stream" вместо multipart / x-mixed-replace

Есть какие - нибудь идеи ?

Заранее спасибо, Хосе

Это было полезно?

Решение

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

Синди

Другие советы

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

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

Или какая-то их разновидность?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top