Обновлено: текущая (август 2014 г.) версия ffmpeg поддерживает платформы QTKit и AVKit:
ffmpeg -f qtkit -video_device_index 0 -i "" out.mpg
or
ffmpeg -f qtkit -i "default" out.mpg
также вы можете получить список доступных устройств:
ffmpeg -f qtkit -list_devices true -i ""
Старый ответ:
Я решил эту проблему с помощью QuickTime Broadcaster. Это небольшая утилита, которая захватывает видео и аудио, сжимает их, пакетирует сжатый поток в пакеты rtp и передает их в сеть.
Таким образом, обходной путь довольно громоздкий и требует двойного кодирования, но он работает:
Настройте потоки на вкладках Audio
и Video
QuickTime Broadcaster.
Перейдите на вкладку Network
, установите Transmission
на "Manual Unicast", 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».
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 - это выполнимо, но требует довольно много работы.
person
Vadim Kalinsky
schedule
22.10.2013