29 дек. 2008 г.

ALSA и FFmpeg

На днях задался целью дописать поддержку захвата звука к одному свободному приложению (если быть точным, то это Motion).

С инструментарием определился быстро:
Для захвата звука - ALSA, так как моя звуковая карта работает именно с ней.
Для сжатия и сохранения в файл - FFmpeg (его библиотеки avcodec и avformat), так как именно ими пользуется Motion для сохранения видео.

С ALSA все более-менее понятно, есть немного внятная документация и автоматически сгенерированное описание API там же. Также я смотрел исходники программы aplay и arecord (которые на самом деле - одна и та же программа).
А вот с FFmpeg всё оказалось сложнее - никакой внятной документации для него нет, даже на английском языке. Есть автоматически сгенерированное описание API и несколько примеров:
  1. В самом проекте - показано, как использовать avcodec на примере кодирования/декодирования аудио и видео отдельно друг от друга. При этом работа с медиафайлами реализована напрямую без использования avformat.
  2. Пример от Martin Böhme рассказывает о том, как с помощью avformat и avcodec открыть и декодировать видеофайл. Он не касается звука, а также кодирования аудио/видео информации.
  3. Пример от dranger являет собой урок по созданию с нуля простенького видеоплеера, который для чтения и декодирования файлов использует avformat и avcodec, а для воспроизведения видео и звука, а также для взаимодействия с клавиатурой использует библиотеку SDL. Здесь тоже не затрагиваются вопросы кодирования.
Поскольку я до этого никогда не программировал с использованием ALSA и FFmpeg, то, прежде чем что-то внедрять в Motion, я решил написать простенькую програмку для захвата звука со звуковой карты и сжатия его в формат ogg.

Вот что у меня получилось: http://ls-it.googlecode.com/svn/trunk/alsa-capture/
Для сборки просто введите make. После запуска программа попытается записать несколько секунд звука с ALSA-устройства default в файл output.ogg, который будет создан в папке с программой.

Я постарался снабдить исходный код большим количеством комментариев на русском языке, чтобы было легче разобраться в нём. Ваши комментарии, доработки и предложения всячески приветсвуются. :)

4 комментария:

  1. Добрый день. Мучительно разбирался с ffmpeg. Внятной документации для него нет. Приходилось все время рыться в инете и искать что-нить что может объяснить что там написано. В основном все используют очень простой пример (строку) чтобы показать какие параметры используются. Но нигде не нашел чтобы можно было кодировать в flv через h264. Может быть у вас есть опыт в данном деле. Буду очень признателен за ответ. DBorzenkov@gmail.com. Может я поделюсь какой-нить информацией.

    ОтветитьУдалить
  2. Я тоже имел опыт работы с FFmpeg-ом. Только я декодировал видео и извук. Кому инетесно написал статью по этом поводу http://unick-soft.ru/Articles.cgi?id=18

    ОтветитьУдалить
  3. А я как-то пыталась работу со звуком освоить ну так ничего и не получилось((...

    ОтветитьУдалить