目前我使用WebAPI实现了一个工作中的直播流。通过直接从ffmpeg接收flv流并使用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);
}
}
}