В настоящее время я работаю в прямом эфире с помощью webapi. Получая поток flv непосредственно из ffmpeg и отправляя его прямо клиенту с помощью PushStreamContent. Это отлично работает, если веб-страница уже открыта при запуске потока. Проблема в том, что когда я открываю другую страницу или обновляю эту страницу, вы больше не можете просматривать поток (поток по-прежнему отправляется клиенту в порядке). Я думаю, что это из-за чего-то не хватает с самого начала потока, но я не уверен, что делать. Любые указатели будут очень благодарны.
Код для потока чтения клиента
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();
}
}
Код для приема потока и последующей отправки клиенту
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);
}
}
}