首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C# WebApi中的实时FLV流

C# WebApi中的实时FLV流
EN

Stack Overflow用户
提问于 2016-01-12 00:17:48
回答 1查看 1.2K关注 0票数 16

目前我有一个使用webapi的工作实况流。直接从ffmpeg接收flv流,并使用PushStreamContent将其直接发送到客户端。如果网页在流启动时已经打开,则可以很好地工作。问题是,当我打开另一个页面或刷新此页面时,您不能再查看流(流仍被发送到客户端,没有问题)。我认为这是由于流开始时遗漏了一些东西,但我不确定该怎么办。如果有任何建议,我们将非常感谢。

客户端读取流的代码

代码语言:javascript
复制
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();
    }
}

接收流然后发送到客户端的代码

代码语言:javascript
复制
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);
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-01-20 03:03:12

我不是一个流专家,但看起来你应该关闭流,然后所有的数据将被写入

代码语言:javascript
复制
await theSubscriber.WriteAsync( bytes, 0, bytesRec );

就像在WebAPI StreamContent vs PushStreamContent中提到的那样

代码语言:javascript
复制
{
     // After save we close the stream to signal that we are done writing.
     xDoc.Save(stream);
     stream.Close();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34726257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档