MJPEG VLC e HTTP streaming
Pergunta
Eu estou gerando um fluxo MJpeg e tentando transmiti-lo para VLC e jogá-lo lá.
O código:
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();
}
Se eu tentar abrir o fluxo com o Firefox, não há nenhum problema em tudo, embora com VLC não funciona (VLC parece continuar lendo, mas nunca mostra o vídeo)
Eu tenho sniffing VLC-to-VLC streaming de e eles parece usar como cabeçalho HTTP "application / octet-stream" em vez de multipart / x-mixed-substitua
Todas as idéias?
Tks antecipadamente, Jose
Solução
Jose, Eu tinha exatamente o mesmo problema. Firefox desempenha meu fluxo, mas VLC não funciona. Eu fui através de tantas maneiras de descobrir isso, incluindo a depuração de código fonte VLC, e não onde tem. btw Meus (REST) ??aparência URL como http: // server: port / livevideo / xyz Então, eu pensei que eu deveria tentar http: // server: port / livevideo / xyz.mjpeg E adivinhem, VLC começou a reprodução de vídeo! Acho VLC pode precisar de uma pequena dica mais que tipo de conteúdo para descobrir o que é um fluxo MJPEG. Espero que isso ajude.
Cindy
Outras dicas
Você já tentou isso:
Response.Buffer = false;
Response.BufferOutput = false;
ou alguma variação desses?
Eu não posso obter o Firefox para jogar meu fluxo (embora cromo desempenha tudo bem). Para VLC eu definir o tampão a 0 ms (sob opções abertas avançadas) e parecia trabalhar a partir daí, embora a minha taxa de dados é matá-lo.