Obecnie mam działający strumień na żywo za pomocą webapi. Otrzymując strumień flv bezpośrednio z ffmpeg i wysyłając go bezpośrednio do klienta za pomocą PushStreamContent. Działa to doskonale, jeśli strona internetowa jest już otwarta po uruchomieniu strumienia. Problem polega na tym, że kiedy otwieram kolejną stronę lub odświeżam tę stronę, nie możesz już oglądać strumienia (strumień jest nadal przesyłany do klienta). Myślę, że to z powodu czegoś, czego brakowało na początku strumienia, ale nie jestem pewien, co robić. Wszelkie wskazówki byłyby bardzo mile widziane.Live FLV streaming w C# WebApi
Kod do czytania klienta strumień
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();
}
}
kodeksu do odbierania strumienia, a następnie wysłanie do klienta
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);
}
}
}
Znaleziono prosty czytnik metadanych FLV: http://johndyer.name/flash-flv-meta-reader-in-net-c/ – jgauffin