Сообщите сервлету Java, когда возвращаться из внешнего вызова командной строки

У меня есть Java-сервлет api, который по запросу запускает преобразование видеофайла в реальном времени с помощью ffmpeg и направляет его в mediastreamsegmenter, чтобы сегментировать его для потоковой передачи по HTTP. Я хочу, чтобы сервлет java возвращал URL индексного файла, как только он был сгенерирован (после записи файла 4-го транспортного потока), чтобы пользователь мог начать просмотр видео, не дожидаясь его полного завершения конвертации.

Я думал о том, чтобы добиться этого, чтобы передать команду в аргумент -file-complete-command объекта mediastreamsegmenter и заставить его вызвать какую-то команду, которая может указать сервлету java вернуть свой ответ, если последний завершенный файл был индексный файл

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

2 ответа

Решение

Я не так сильно увлекаюсь потоковым видео, но не могли бы вы запустить поток (называемый PARSE_THREAD), который выполняет синтаксический анализ и сообщает сервлету (проживающему в SERVLET_THREAD) ждать разумное количество времени? Я думаю, что преобразование ffmpeg занимает примерно столько же времени для анализа первых 30 секунд, поэтому вы запускаете PARSE_THREAD, затем спите SERVLET_THREAD в течение этого времени, а затем позволяете сервлету начать потоковую передачу.

Использование отдельного потока является хорошим решением для этой проблемы.

Я бы сказал, вам определенно нужна отдельная тема для такой задачи. Почему "должно быть" лучше?

Другие вопросы по тегам