使用ASP.Net WebAPI转发流

时间:2018-02-20 15:37:41

标签: c# asp.net asp.net-web-api .net-core

我正在使用.Net Core 2.0来开发我的ASP.Net API,我想请求外部公共流并使用我自己的GET路由转发它。

外部流是MJPEG内容类型。

由于我使用的是最新版本的.NET Core,因此PushStreamContent不再可用。

这是负责连接和流程过程的类:

 internal class LiveViewStream
{
    HttpClient _client = new HttpClient();
    WebClient webClient = new WebClient();
    public Stream outputStream = new MemoryStream();

    public Stream GetVideoTCP()
    {
        string url = "http://87.139.76.248:8081/cgi-bin/faststream.jpg";

        return webClient.OpenRead(url);
    }

    public void Main()
    {
        var bytesRead = 0;
        var buffer = new byte[65536];

        using (Stream stream = GetVideoTCP())
        {
            do
            {
                bytesRead = stream.Read(buffer, 0, buffer.Length);
                outputStream.Write(buffer, 0, bytesRead);
            }
            while (stream.Position != stream.Length);

        }
    }

这是GET路线:

// GET: api/<controller>
    [HttpGet]
    public HttpResponseMessage Get()
    {
        var video = new LiveViewStream();

        video.Main();

        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);

        response.Content = new StreamContent(video.outputStream);

        response.Content.Headers.ContentType = new MediaTypeHeaderValue("video/x-motion-jpeg");

        return response;
}

此代码错误地指出while方法不受支持。我尝试了不同的方法,但它们没有用,我要么在发出GET请求时得到一个文件,要么什么都没有。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

我通过使用Socket TCP服务器解决了这个问题,并使用自定义MjpegWriter将图像转发到客户端套接字。