0

ビデオファイルをストリーミングしようとしています。ブラウザの別のタブで同じ動画ファイルを開くと、「ファイルは別のプロセスで使用されています」というメッセージが表示されます。file.open メソッドで FileShare.ReadWrite を使用すると、エラーはなくなりますが、ブラウザでビデオが再生されません。誰か教えてください。ヘルプ 。

public HttpResponseMessage Get([string id)
        {
            var path = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["path"] + "/" + id);
            var video = new VideoStream(path);
            HttpResponseMessage response = Request.CreateResponse();
            var contentType = ConfigurationManager.AppSettings[Path.GetExtension(id)];
            response.Content = new PushStreamContent(video.WriteToStream,  new MediaTypeHeaderValue(contentType));

            return response;
        }


        public class VideoStream
        {
            private readonly string _filename;

            public VideoStream(string filename)
            {
                _filename = filename;
            }


            public async void WriteToStream(Stream outputStream, HttpContent content, TransportContext context)
            {
                try
                {
                    var buffer = new byte[65536];

                    using (var video = File.Open(_filename, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
                    {
                        var length = (int) video.Length;
                        var bytesRead = 1;

                        while (length > 0 && bytesRead > 0)
                        {
                            bytesRead = video.Read(buffer, 0, Math.Min(length, buffer.Length));
                             await outputStream.WriteAsync(buffer, 0, bytesRead);

                            length -= bytesRead;
                            video.Flush();

                        }
                    }
                }
                catch (HttpException ex)
                {
                    return;
                }
                finally
                {


                 //   outputStream.Close();
                  //  outputStream.Flush();
                }
            }



        }
4

1 に答える 1

2

以下を使用する必要があります: File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);

ファイルロックがサーバーからのものであると仮定します。そうですか、それともクライアント側の問題ですか?

于 2014-05-01T23:23:44.443 に答える