Обрезка аудиофайла с указанием начала и конца в Джерси - PullRequest
0 голосов
/ 03 марта 2020

У меня есть следующий код, на данный момент начало и конец жестко запрограммированы. Код должен записывать аудиофайлы базы на входах. Проблема заключается в том, что если я получаю доступ к файлу, записанному непосредственно на диск в 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...