【发布时间】:2016-04-16 00:58:39
【问题描述】:
目前我有一个使用 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);
}
}
}
【问题讨论】:
标签: c# asp.net-web-api ffmpeg stream flv