Attualmente ho un live streaming funzionante utilizzando webapi. Ricevendo un flusso flv direttamente da ffmpeg e inviandolo direttamente al client utilizzando PushStreamContent. Funziona perfettamente se la pagina web è già aperta all'avvio del flusso. Il problema è quando apro un'altra pagina o aggiorno questa pagina non è più possibile visualizzare il flusso (lo stream è ancora inviato al client). Penso che sia dovuto a qualcosa che manca dall'inizio del flusso, ma non sono sicuro di cosa fare. Qualsiasi suggerimento sarebbe molto apprezzato.Flusso live FLV in C# WebApi
Codice per il cliente la lettura flusso
public class VideosController : ApiController
{
public HttpResponseMessage Get()
{
var response = Request.CreateResponse();
response.Content = new PushStreamContent(WriteToStream, new MediaTypeHeaderValue("video/x-flv"));
return response;
}
private async Task WriteToStream(Stream arg1, HttpContent arg2, TransportContext arg3)
{
//I think metadata needs to be written here but not sure how
Startup.AddSubscriber(arg1);
await Task.Yield();
}
}
Codice per la ricezione di stream e poi inviarli al cliente
while (true)
{
bytes = new byte[8024000];
int bytesRec = handler.Receive(bytes);
foreach (var subscriber in Startup.Subscribers.ToList())
{
var theSubscriber = subscriber;
try
{
await theSubscriber.WriteAsync(bytes, 0, bytesRec);
}
catch
{
Startup.Subscribers.Remove(theSubscriber);
}
}
}
Trovato un semplice lettore di metadati FLV: http://johndyer.name/flash-flv-meta-reader-in-net-c/ – jgauffin