Ограничение размера потокового файла WMV

У меня есть проигрыватель Windows Media, встроенный в представление моей веб-страницы:

 <div id="divCourseVideo" style="width:100%;margin:0 auto;" class="container">
        <OBJECT style="display:inline-block" ID="CoursePlayer" HEIGHT="400" WIDTH="400" CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" type="video/x-ms-wmv">
            <param name='URL' value="@Url.Action("ShowMovie", "OLT", new { courseId = Model.ID })" />
            <param name='autoStart' value="true" />
            <param name='currentPosition' value="false" />
            <param name='showControls' value="true" />
        </OBJECT>


    </div>

Действие ShowMovie извлекает видеопоток из базы данных и отправляет его в представление следующим образом:

 public void ShowMovie(string courseId)
    {
        CourseVideo video = Repository.GetCourseVideoStream(courseId);
        var bytesinfile = new byte[video.VideoStream.Length];
        video.VideoStream.Read(bytesinfile, 0, (int)video.VideoStream.Length);
        ControllerContext.HttpContext.Response.BinaryWrite(bytesinfile);
    }

Когда я использую видео размером около 10 КБ, оно будет воспроизводиться нормально. Но если я использую файл размером около 137 КБ, файл никогда не воспроизводится. Он слишком большой?

Когда я использую F12, чтобы увидеть сетевую активность, я вижу, что файл пытается спуститься как text/html. Почему это? Я также вижу, что функция GET прерывается. Почему это? Я увеличил значение executeTimeout безрезультатно.

введите описание изображения здесь

Информация от Napuza была хорошей. Я смог получить правильный тип контента, и кажется, что весь файл был передан в браузер, но он никогда не воспроизводится.

введите описание изображения здесь


person Dean.DePue    schedule 24.04.2017    source источник


Ответы (4)


Укажите ContentType:

ControllerContext.HttpContext.Response.ContentType = "video/x-ms-wmv";
ControllerContext.HttpContext.Response.BinaryWrite(bytesinfile);
person napuzba    schedule 01.05.2017
comment
Спасибо Напуза. Теперь я вижу правильный тип содержимого, но большие файлы никогда не воспроизводятся. Есть ли что-то еще, что мне нужно сделать? - person Dean.DePue; 01.05.2017
comment
Это странно, но я думаю, что это мог быть конкретный файл, который я загрузил в базу данных. Как только я загрузил реальный файл для использования в тренировочном процессе, а размер файла превышает 300 МБ, он воспроизводился просто отлично — более 23 минут! - person Dean.DePue; 02.05.2017

Попробуйте отправить файл кусками:

response = ...    
byte[] buffer = new byte[4096];

response.ContentType = "video/x-ms-wmv";
response.AppendHeader("content-length", video.VideoStream.Length);

while ( response.IsClientConnected) {
    int bytesRead = video.VideoStream.Read(buffer, 0, buffer.Length);
    if (bytesRead == 0 ) {
        break;
    }
    response.OutputStream.Write(buffer, 0, bytesRead);
    response.Flush();
}
response.End();
person napuzba    schedule 01.05.2017
comment
Это немного помогает. Он переходит от поиска носителя к подключению к носителю, к открытию носителя, а затем возвращается к готовности, ничего не воспроизводя. - person Dean.DePue; 01.05.2017

Вы можете попробовать реализовать запросы диапазона HTTP.

person napuzba    schedule 01.05.2017

Я отдал должное напузбе за ответ, потому что он повел меня в правильном направлении. Мне удалось это:

 CourseVideo video = Repository.GetCourseVideoStream(courseId);
        var bytesinfile = new byte[video.VideoStream.Length];
        video.VideoStream.Read(bytesinfile, 0, (int)video.VideoStream.Length);
        byte[] buffer = new byte[4096];
        ControllerContext.HttpContext.Response.ContentType = "video/x-ms-wmv";
        ControllerContext.HttpContext.Response.AppendHeader("content-length", video.VideoStream.Length.ToString());
        video.VideoStream.Seek(0, SeekOrigin.Begin);
        ControllerContext.HttpContext.Response.BinaryWrite(bytesinfile);
        ControllerContext.HttpContext.Response.End();

Однако некоторые файлы WMV, с которыми я работал, по-прежнему не воспроизводятся. Я подозреваю, что это может иметь какое-то отношение к метаданным в файле. У кого-нибудь есть идеи на этот счет?

person Dean.DePue    schedule 03.05.2017
comment
Сначала проверьте, работает ли исходный файл с вашего локального диска (URL='file://...'). Если да, скачайте файл с сайта и сравните его содержимое с исходным файлом. - person napuzba; 03.05.2017