Захват камеры + микрофон и кодирование в h264 / aac на macOS - PullRequest
0 голосов
/ 16 декабря 2018

У меня проблемы с захватом и кодированием аудио + видео на лету в macOS.

Я попробовал два варианта:

  1. ffmpeg

    ffmpeg -threads 0 -f avfoundation -s 1920x1080 -framerate 25 -I 0:0 -async 441 -c:v libx264 -preset medium -pix_fmt yuv420p -crf 22 -c:a libfdk_aac -aq 95 -y
    
  2. gstreamer

    gst-launch-1.0 -ve avfvideosrc device-index=0 ! video/x-raw,width=1920,height=1080,framerate=25/1 ! vtenc_h264 ! queue ! mp4mux name=mux ! filesink location=out.mp4  osxaudiosrc device=0 ! audio/x-raw ! faac midside=false ! queue ! mux.
    

Опция ffmpeg работает, но только для более низких разрешений.С более высоким разрешением Mac mini (2018 поколение) не может выполнять тяжелую работу.Я думаю, потому что я установил ffmpeg с brew, поэтому он не был скомпилирован на моей машине, то есть он не использует аппаратный кодировщик h264 в Mac?

Опция gstreamer также работает, но есть небольшаяпроблема синхронизации аудио / видео (аудио на 100 мс опережает видео).Кажется, я не могу добавить задержку в очередь GStreamer (она игнорирует ее):

queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 min-threshold-time=100000000

Кто-нибудь, кто имеет опыт работы с этим?Спасибо!

1 Ответ

0 голосов
/ 16 декабря 2018

Это изменение в очередях влияет только на внутренний поток.Это не влияет на временные метки на буферах, проходящих через конвейер.Временные метки определяют, как выполняется синхронизация между аудио и видео.

Попробуйте использовать элемент identity в видео или аудио-тракте и задайте некоторое смещение временной метки с помощью свойства ts-offset.

...