У меня есть следующий код, на данный момент начало и конец жестко запрограммированы. Код должен записывать аудиофайлы базы на входах. Проблема заключается в том, что если я получаю доступ к файлу, записанному непосредственно на диск в VL C, время окончания файла изменяется, как во второй 0 видео (видео заканчивается через 1 ч), второй 10 видео (видео заканчивается через 1 ч 2 мин) и так далее. Когда я смотрю на файл, загруженный с контроллера, время не меняется, но оно показывает 1h2min, а видео заканчивается ровно через 1h. Я хотел бы знать, что я могу сделать в этом случае, чтобы решить эти проблемы.
@GET
@Path("/{start}/{end}")
@Produces("application/mp3")
public Response cutAudio(@PathParam("start") Long start, @PathParam("end") Long end) throws IOException {
final String MEDIA_FILE = "C:\\Users\\cmavrichi\\eclipse-workspace\\StreamingAudio\\longaudio.mp3";
final String MEDIA_FILE2 = "C:\\Users\\cmavrichi\\eclipse-workspace\\StreamingAudio\\longaudio123.mp3";
FileInputStream audio = new FileInputStream(MEDIA_FILE);
File newAudio = new File(MEDIA_FILE2);
byte[] totalAudio = audio.readAllBytes();
Long startTime = start(totalAudio, 3600L, 16553L);
Long endTime = end(totalAudio, 7200L, 16553L);
RandomAccessFile raf = new RandomAccessFile(newAudio, "rw");
MappedByteBuffer mappedByteBuffer = raf.getChannel().map(MapMode.READ_WRITE, 0, endTime - startTime);
for (long i = startTime; i < endTime; i++) {
mappedByteBuffer.put(totalAudio[(int) i]);
}
raf.close();
audio.close();
return Response.ok().entity(newAudio).build();
}
public Long start(byte[] totalAudio, Long start, Long totalTime) {
int totalBytes = totalAudio.length;
return (totalBytes * start) / totalTime;
}
public Long end(byte[] totalAudio, Long end, Long totalTime) {
int totalBytes = totalAudio.length;
return (totalBytes * end) / totalTime;
}