Обслуживание одного JPEG с использованием ffserver

У меня есть установка, в которой локальное приложение записывает последовательность изображений JPEG в FIFO (именованный канал Unix в Linux). На другом конце у меня есть ffmpeg подбирая последовательность и передавая ее в экземпляр ffserver:

% ffmpeg -i fifo.mjpeg http://127.0.0.1:8090/feed.ffm

Конфигурация для ffserver выглядит так:

HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 20
MaxClients 10
MaxBandwidth 1000

<Feed feed.ffm>
  File /tmp/feed.ffm
  FileMaxSize 200k

  ACL allow 127.0.0.1
</Feed>

<Stream stream.mpjpeg>
  Format mpjpeg
  Feed feed.ffm

  VideoSize 960x600
  VideoFrameRate 2
  VideoIntraOnly
  Strict -1

  NoAudio
  NoDefaults
</Stream>

Это работает нормально, я могу указать мой веб-браузер на http://127.0.0.1:8090/stream.mpjpeg и посмотреть видео.

Теперь я хочу добавить способ загрузки одного JPEG (я думаю, что это снимок видео). Я добавил следующее к ffserver конфигурация:

<Stream image.jpg>
  Format singlejpeg
  Feed feed.ffm

  VideoSize 960x600
  VideoFrameRate 2
  VideoIntraOnly
  Strict -1

  NoAudio
  NoDefaults
</Stream>

Это только вид работ. Конечно, если я укажу свой браузер на http://127.0.0.1:8090/image.jpg Я делаю неподвижное изображение из видео, но браузер никогда не перестает загружаться!

Действительно, если я бегу wget http://127.0.0.1:8090/image.jpg Я вижу, что MIME-тип хорош (image/jpeg), но, похоже, нет конца изображению.

Я что-то упустил в моей конфигурации, что делает ffserver отправка более одного изображения?

Я должен добавить, что я пробовал эту установку на 2.8.6 (Debian Jessie, пакет поставляется из jessie-backports) и 3.0 (Arch Linux), с одинаковым результатом в обоих случаях.

1 ответ

Вы знаете, я нахожусь в поиске, чтобы найти ответ на вопрос. Я нашел только способ сделать это с помощью mjpg-streamer:

mjpg_streamer -i 'input_uvc.so -f 15 -r 640x480' -o 'output_http.so'

дает вам возможность загружать снимки через http://localhost:8080/?action=snapshot, Но я мог бы сделать это с помощью ffmpeg...

РЕДАКТИРОВАТЬ:

Похоже, я разобрался, как сделать "snapshotable" ffserver. Вот моя конфигурация:

HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 20
MaxClients 10
MaxBandwidth 100000

<Feed feed.ffm>
  File /tmp/feed.ffm
  FileMaxSize 200k

  ACL allow 127.0.0.1
</Feed>

<Stream image.jpg>
  Feed feed.ffm
  Format jpeg

  VideoSize 800x600
  VideoFrameRate 30
  Preroll 5
  VideoIntraOnly
  Strict -1

  NoAudio
  NoDefaults
</Stream>

РЕДАКТИРОВАТЬ:

К сожалению, этот метод иногда дает странные зависания...

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