Поэтому из-за того, что содержимое находится на другом диске, а не в виртуальном каталоге моего серверного приложения, мне пришлось реализовать службу получения файлов.
Я могу получить размер файла. Затем я хочу установить заголовки содержимого, чтобы браузер знал общий размер и, следовательно, знал, как пропорционировать панель поиска.
Здесь я устанавливаю заголовок общего размера:
string bytes = Convert.ToString( fInfo.Length );
Response.AddHeader("Content-Length", bytes );
Response.AddHeader("Content-Range", "bytes 0-" + bytes + "/" + bytes);
В результате чего:
Content-Length: 1389363
Content-Type: video/ogg
Content-Range: bytes 0-1389363/1389364
Я скачал полученный файл и убедился, что байты совпадают. В файрфоксе работает нормально, в хроме все дурацко. В Chrome он воспроизводится до конца, но не перемещает полосу поиска, а затем показывает отрицательную бесконечность в текущем времени, когда она достигает конца. ТАКЖЕ я вообще не могу очистить видео, предположительно, потому что оно имеет недопустимую продолжительность.
воспроизведение того же файла непосредственно в chrome работает правильно, так что, может быть, это какой-то заголовок контента, который chrome хочет, чтобы firefox не обращал внимания на s #% t?
Любые идеи? Неверная единица измерения длины? встроенная кодировка g-zip на стороне сервера мешает?
Я использую стандартный видео объект:
<video class="videoplayer" controls="" autoplay="autoplay" tabindex="0">
<source type="video/ogg" src="http://vb_html.dev/GetFile.aspx?filename=c:/_assets/4c2c09c2-f2ff-e011-a992-009056af18ff/softsignage/softsignage-00000000600.ogv"></source>
Your browser does not support the video tag.
</video>
Для большей справки, вот как я передаю данные файла:
FileStream mystream = new FileStream(anyFilePath, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[4096];
using (BinaryReader reader = new BinaryReader(mystream))
{
while (true)
{
int bytesRead = mystream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0) break;
Response.OutputStream.Write(buffer, 0, bytesRead);
}
}