在https上流式传输mp4文件

时间:2013-10-08 17:02:04

标签: c# asp.net https

我遇到了一些事情,我找不到任何解决方案,我有这个代码:

    private void GetFileFromURL(string url,NetworkCredential cred)
    {
        try
        {
            using (var client = new WebClient())
            {
                if (cred != null)
                {
                    //client.Credentials = cred;
                }
                using (var stream = client.OpenRead(url))
                {
                    int count = 0;
                    do
                    {
                        if (Response.IsClientConnected)
                        {
                            //byte[] buf = new byte[500024];
                            byte[] buf = new byte[500024];
                            count = stream.Read(buf, 0, 500024);
                            StreamToClient(buf, count);
                        }
                        else
                            break;

                    } while (stream.CanRead && count > 0);
                    Response.End();
                }
            }
        }
        catch { }
    }
    bool isHeaderSent = false;
    private void StreamToClient(byte[] bytes,int length)
    {
        if (!isHeaderSent)
        {
            Response.Clear();
            Response.Buffer = false;

            Response.ContentType = "video/mp4";

            isHeaderSent = true;
        }
        Response.OutputStream.Write(bytes, 0, length);
    }

此代码位于getVideo.aspx.cs和我用于流式传输mp4文件的代码,它在http上工作得很好,但当我将其更改为https(在iis上)时,我的客户端,客户端都没有得到任何结果我使用这个:

axWindowsMediaPlayer1.URL = videoSource;

其中videoSource类似于:https:// localhost /getVideo.aspx

从我在谷歌上阅读的内容可能是标题的内容,有关使用https时添加特殊标题的内容,但不确定其是否相关。

TY。

1 个答案:

答案 0 :(得分:1)

Okis,我为其他遇到同样问题的人写了这个:

Https有一个较短的响应时间窗口,因此,您必须告诉客户端您的数据有多长,以便客户端不会认为流已经结束,您实际需要添加的是那些标头:

        Response.AddHeader("content-disposition", "filename=video.mp4");

        Response.AddHeader("Content-Length", totalBytes.ToString());

其中totalBytes是一个包含文件中字节数的long,您需要在将文件发送到客户端之前从服务器获取它。

相关问题