Что-то в том, как я справляюсь с загрузкой этого файла, прерывает поиск в аудиоплеере Chrome - PullRequest
0 голосов
/ 19 октября 2018

У меня есть действие контроллера MVC 5, которое извлекает аудиоданные и загружает их на клиент.Ранее это был некоторый код aspx.cs, у которого были свои проблемы, прежде чем я обновил его до следующего:

// Support byte range headers for Chrome: https://stackoverflow.com/a/32377121/1106497
long fSize = audio.Length;
long startbyte = 0;
long endbyte = fSize - 1;
int statusCode = 200;
if ((Request.Headers["Range"] != null)) {
    // Get the actual byte range from the range header string, and set the starting byte.
    string[] range = Request.Headers["Range"].Split(new char[] { '=', '-' });
    startbyte = Convert.ToInt64(range[1]);
    if (range.Length > 2 && range[2] != "") {
        endbyte = Convert.ToInt64(range[2]);
    }
    //If the start byte is not equal to zero, that means the user is requesting partial content.
    if (startbyte != 0 || endbyte != fSize - 1 || range.Length > 2 && range[2] != "") {
        // Set the status code of the response to 206 (Partial Content) and add a content range header.                                    
        statusCode = 206;
    }
}
long desSize = endbyte - startbyte + 1;
// Headers
Response.StatusCode = statusCode;

Response.ContentType = "audio/mp3";
if (AudioIsWAV(audio)) {
    Response.ContentType = "audio/wav";
}

Response.AddHeader("Content-Accept", Response.ContentType);
Response.AddHeader("Content-Length", desSize.ToString());
Response.AddHeader("Content-Range", string.Format("bytes {0}-{1}/{2}", startbyte, endbyte, fSize));

// Send the Data
var stream = new MemoryStream(audio, (int)startbyte, (int)desSize);
return new FileStreamResult(stream, Response.ContentType);

Поскольку я обновил действие до этого, оно работало лучше во всех отношениях, за исключением того, что аудиоплеер Chrome можетбольше не искать.Когда вы пытаетесь настроить, где вы находитесь в файле, он всегда возвращается к началу.

Самая близкая проблема, которую я мог найти в своем исследовании, заключается в следующем: Я могу получить audio.currentTime, но не установить его (в Google Chrome) , где проблема была определена как поврежденный файл,Однако сами файлы работали до того, как я настроил способ их отправки.

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

1 Ответ

0 голосов
/ 22 октября 2018

https://sitefinitydevelopment.com/blog/here-is-how-to-make-chrome-seek-through-your-audio-files-in-sitefinity.html

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

...