- Code: Select all
// If "path" request parameter is set, this is a request for a single file
// (typically from the embedded Flash player). In that case, create a separate
// playlist (in order to support multiple parallel streams). Also, enable
// partial download (HTTP byte range).
String path = request.getParameter("path");
boolean isSingleFile = path != null;
LongRange range = null;
if (isSingleFile) {
Playlist playlist = new Playlist();
MusicFile file = musicFileService.getMusicFile(path);
playlist.addFiles(true, file);
player.setPlaylist(playlist);
response.setHeader("ETag", StringUtil.utf8HexEncode(path));
response.setHeader("Accept-Ranges", "bytes");
long contentLength;
range = getRange(request, file);
if (range != null) {
response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
contentLength = file.length() - range.getMinimumLong();
LOG.info("Got range: " + range);
} else {
contentLength = file.length();
}
boolean transcodingRequired = transcodingService.isTranscodingRequired(file, player);
boolean downsamplingRequired = transcodingService.isDownsamplingRequired(file, player, maxBitRate);
if (!transcodingRequired && !downsamplingRequired) {
Util.setContentLength(response, contentLength);
if (range != null) {
long entityLength = file.length();
long firstBytePos = range.getMinimumLong();
long lastBytePos = entityLength - 1;
response.setHeader("Content-Range", "bytes " + firstBytePos + "-" + lastBytePos + "/" + entityLength);
}
}
String transcodedSuffix = transcodingService.getSuffix(player, file, preferredTargetFormat);
response.setContentType(StringUtil.getMimeType(transcodedSuffix));
if (file.isVideo()) {
videoTranscodingSettings = createVideoTranscodingSettings(file, request);
}
}
I don't really know what's going on.
