[c#] Live-FLV-Streaming in C # WebApi



0 Answers

Ich bin kein Experte im Streaming, aber es sieht so aus, als müsste man den Stream schließen, dann werden alle Daten geschrieben

await theSubscriber.WriteAsync( bytes, 0, bytesRec );

Wie es in WebAPI StreamContent vs PushStreamContent erwähnt

{
     // After save we close the stream to signal that we are done writing.
     xDoc.Save(stream);
     stream.Close();
}
Question

Momentan habe ich einen funktionierenden Livestream mit webapi. Indem Sie einen FLV-Stream direkt von ffmpeg empfangen und direkt mit PushStreamContent an den Client senden. Das funktioniert einwandfrei, wenn die Webseite beim Start des Streams bereits geöffnet ist. Das Problem ist, wenn ich eine andere Seite öffne oder diese Seite aktualisiere, kann man den Stream nicht mehr sehen (der Stream wird immer noch an den Client geschickt). Ich denke, es liegt an etwas fehlt am Anfang des Streams, aber ich bin mir nicht sicher, was zu tun ist. Alle Hinweise würden sehr geschätzt werden.

Code für den Clientlesestream

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();
    }
}

Code zum Empfangen des Streams und Senden an den Client

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);
        }
    }
}





Related