Во время потоковой передачи видеофайла файл блокируется другим процессом, использующим 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);
Предполагая, что блокировка файла происходит с сервера. Это так, или это на стороне клиента?