오디오 파일을 html5 오디오 요소 인 각도 응용 프로그램에 스트리밍하려고하고 src를 내 api 끝점 (예 :/audio/234)으로 설정하려고합니다. 내 백엔드는 .NET Core 2.0으로 구현됩니다. 저는 이미 이런 종류의 스트리밍을 구현했습니다 : .NET Core| MVC pass audio file to html5 player. Enable seekingHTML5 오디오 찾기가 제대로 작동하지 않습니다. 응답 내용 길이 길이 불일치 예외
오디오가 재생되기 시작하면 즉시 파일 끝까지 탐색하지 않으면 검색이 작동합니다. 오디오 요소의 autoplay 속성을 사용하여 즉시 오디오 요소에 충분한 데이터가 재생되도록 시작합니다. 그래서 내 상황에서는 오디오 요소가 아직 찾지 못했을 때 모든 데이터를 가지고 있으므로 내 API에 새로운 GET을 만듭니다.
실패 : 내 백엔드 로그에 그 상황에서이 예외가 Microsoft.AspNetCore.Server.Kestrel [13] [1] 연결 ID가 "0HL9V370HAF39"요청 ID "0HL9V370HAF39 : 00000001"처리되지 않은 예외가 응용 프로그램에 의해 throw되었습니다. [1] System.InvalidOperationException : 응답 Content-Length mismatch : 쓸 수있는 바이트 수가 너무 적습니다 (0 개 중 6126919).
여기 내 오디오 컨트롤러 GET 방법입니다.
byte[] audioArray = new byte[0];
//Here I load audio file from cloud
long fSize = audioArray.Length;
long startbyte = 0;
long endbyte = fSize - 1;
int statusCode = 200;
var rangeRequest = Request.Headers["Range"].ToString();
_logger.LogWarning(rangeRequest);
if (rangeRequest != "")
{
string[] range = Request.Headers["Range"].ToString().Split(new char[] { '=', '-' });
startbyte = Convert.ToInt64(range[1]);
if (range.Length > 2 && range[2] != "") endbyte = Convert.ToInt64(range[2]);
if (startbyte != 0 || endbyte != fSize - 1 || range.Length > 2 && range[2] == "")
{ statusCode = 206; }
}
_logger.LogWarning(startbyte.ToString());
long desSize = endbyte - startbyte + 1;
_logger.LogWarning(desSize.ToString());
_logger.LogWarning(fSize.ToString());
Response.StatusCode = statusCode;
Response.ContentType = "audio/mp3";
Response.Headers.Add("Content-Accept", Response.ContentType);
Response.Headers.Add("Content-Length", desSize.ToString());
Response.Headers.Add("Content-Range", string.Format("bytes {0}-{1}/{2}", startbyte, endbyte, fSize));
Response.Headers.Add("Accept-Ranges", "bytes");
Response.Headers.Remove("Cache-Control");
var stream = new MemoryStream(audioArray, (int)startbyte, (int)desSize);
return new FileStreamResult(stream, Response.ContentType)
{
FileDownloadName = track.Name
};
일부 헤더가 누락 되었습니까?
.NET Core 1.1에서는이 예외가 발생하지 않았지만이 테스트는 단지 일치 또는 잘못된 테스트 일지 확실하지 않습니다. 그러나 누군가가 정보를 가지고 있다면 스트리밍과 관련된 .NET Core에서 뭔가 바뀌 었습니다. 그 정보를 고맙게 생각합니다.