Ответ 1
Обновлено: текущая (август 2014) версия ffmpeg поддерживает рамки QTKit и AVKit:
ffmpeg -f qtkit -video_device_index 0 -i "" out.mpg
или
ffmpeg -f qtkit -i "default" out.mpg
также вы можете получить список доступных устройств:
ffmpeg -f qtkit -list_devices true -i ""
Старый ответ:
Я решил эту проблему с QuickTime Broadcaster. Это небольшая утилита, которая захватывает видео и аудио, сжимает их, пакетирует сжатый поток в rtp-пакетах и передает их в сеть.
Итак, обходной путь довольно громоздкий и требует двойного кодирования, но он работает:
-
Настройка потоков в вкладках QuickTime Broadcaster
Audio
иVideo
-
Перейдите на вкладку
Network
, установитеTransmission
на "Ручная одноадресная рассылка",Address
на "127.0.0.1",Ports
на что-то вроде "6000, 6002" -
File -> Save Broadcast Settings As...
к некоторому файлу (например, Untitled.qtbr) -
Экспорт файла SDP:
File -> Export -> SDP
. SDP означает "Протокол описания сеанса", который содержит информацию о том, где искать поток, его параметры и параметры кодека и т.д. -
Теперь вы можете запустить/остановить QTB из командной строки:
osascript -e 'tell application "QuickTime Broadcaster" to start document "Untitled.qtbr"' osascript -e 'tell application "QuickTime Broadcaster" to stop document "Untitled.qtbr"'
После запуска QTB ffmpeg сможет читать сжатый поток, используя этот файл sdp, который вы экспортировали на шаге 4 (на самом деле вы можете открыть его в VLC или проигрывателе QuickTime: open -a vlc stream.sdp
).
Итак, QTB работает как "агент захвата", который делает преобразование "iSight-to-UDP socket".
ffmpeg -i stream.sdp -vcodec mjpeg -an -vf vflip -y /tmp/q.avi
или передать его ffserver:
ffmpeg -i stream.sdp http://localhost:1881/feed1.ffm
(imho) Очень сложно добавить поддержку iSight для ffmpeg/libavdevice. iSight имеет API-интерфейс на основе ObjC (QTKit), который должен быть обернут в статическую библиотеку C, также ffmpeg должен быть связан со всеми конкретными инфраструктурами OS X - это выполнимо, но требует довольно большой работы.