Во время потоковой передачи видеофайла файл блокируется другим процессом, использующим PushStreamContent.. как его решить

Я пытаюсь транслировать видеофайл. когда я открываю тот же видеофайл в другой вкладке браузера, я получаю сообщение "файл используется другим процессом" . если я использую FileShare.ReadWrite в методе file.open, то ошибка исчезает, но видео не воспроизводится в браузере. может кто-то пож. Помогите.

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();
                }
            }



        }

1 ответ

Вы должны использовать: File.Open(имя, FileMode.Open, FileAccess.Read, FileShare.Read);

Предполагая, что блокировка файла происходит с сервера. Это так, или это на стороне клиента?

Другие вопросы по тегам