Raspberry Pi 2 — собираем AAC, MP3, H264 и FFMPEG на Raspbian (Jessie)


Предыдущая | Следующая

Сегодня я поделюсь с вами как я собирал FFMPEG с кодеками на Raspbian Pi (Jessie).

FFMPEG — это пожалуй самая популярная библиотека в мире linux для работы с мультимедиа.

Как известно, FFMPEG не включен в репозиторий raspbian, поэтому его не возможно просто установить с помощью

1

sudo apt-get install ffmpeg

как это зачастую можно сделать на других операционных системах, под другие архитектуры. Вот поэтому мы его будем собирать из исходников.

Перед тем, как мы скомпилируем FFMPEG, нам понадобиться собрать также все кодеки, которые мы планируем использовать. В моем случае это AACMP3 и H264.

Итак, приступим.

Обычно для установки чего либо, требуются права root. Для того, чтобы не вводить каждый раз sudo — сделаем это один раз

1

2

# выполнение всех последующих команд от имени root

sudo su

ALSA

Для работы с медиа нам понадобятся соответствующие библиотеки для работы со звуком — ALSA

1

2

3

# установка ALSA headers и соответствующие библиотеки

apt-get update

apt-get install libasound2-dev

После этого, ALSA headers можно будет найти в /usr/include/alsa, а соответствующие библиотеки в /usr/lib/arm-linux-gnueabihf.

YASM

Не уверен, что в этом есть необходимость, но я собрал на всякий случай YASM

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

# собираем YASM - assembler для H264 и ffmpeg

cd /usr/src

 

# скачиваем yasm (на данный момент уже есть http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz)

wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz

 

# распаковываем

tar xzvf yasm-1.2.0.tar.gz

 

# заходим в папку с yasm

cd yasm-1.2.0

 

# запускаем конфигуратор

./configure

 

# компилируем с использованием всех 4-х ядер процессора - параметр -j4 (только в том случае если у вас 4-х ядерный процессор, иначе работать не будет)

make -j4

 

# устанавливаем

make install

H264

Теперь собираем кодек H264. Очень важно указать параметр —disable-asm в конфигураторе, без него, при попытке использовать H264 кодек, вылазит ошибка — "illegal instruction".

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

# h.264 video encoder

# если еще не установили - устанавливаем git

apt-get install git

 

# скачиваем исходники с git репозитория

cd /usr/src

git clone git://git.videolan.org/x264

 

# заходим в папку с исходниками

cd x264

 

# запускаем конфигуратор компилятора

./configure --disable-asm --enable-shared

 

# компилируем с параметром -j4 (работать всем 4 ядрам процессора, намного ускоряет весь процесс)

make -j4

 

# и устанавливаем

make install

MP3

Следующим собираем MP3 кодек. Библиотеки mp3 кодека будут установлены в /usr/local/lib/libmp3lame

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

# mp3 audio encoder

cd /usr/src

 

# скачиваем исходники (на данный момент уже есть http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz)

wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.tar.gz

 

# распаковываем

tar xzvf lame-3.99.tar.gz

 

# заходим в папку с исходниками

cd lame-3.99

 

# запускаем конфигуратор

./configure

 

# компилируем

make -j4

 

# и устанавливаем

make install

AAC

Собираем AAC кодек, в итоге библиотеки будут установлены в /usr/local/lib/libfaac

01

02

03

04

05

06

07

08

09

10

11

# aac encoder

cd /usr/src

 

# скачиваем исходники

curl -#LO http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz

 

# распаковываем

tar xzvf faac-1.28.tar.gz

 

# заходим в папку с исходниками

cd faac-1.28

В данной версии faac-1.28 (надеюсь что только в этой версии) есть ошибка в файле common/mp4v2/mpeg4ip.h, чтобы ее пофиксить надо открыть этот файл и добавить несколько строк после строки 126 таким образом, чтобы это выглядело примерно так

123

124

125

126

127

128

129

130

131

#ifdef __cplusplus

extern "C" {

#endif

#ifndef _STRING_H

char *strcasestr(const char *haystack, const char *needle);

#endif

#ifdef __cplusplus

}

#endif

Далее продолжим…

1

2

3

4

5

6

7

8

# запускаем конфигуратор

./configure

 

# компилируем

make -j4

 

# и устанавливаем

make install

FFMPEG

Наконец мы готовы собрать FFMPEG. В итоге библиотеки ffmpeg будут установлены в /usr/bin/ffmpg. Компиляция ffmpeg занимает не мало времени, и как повествует нам об этом интернет, на ранних версиях Raspberry Pi это могло достигать и до 5 часов, но благо в новом Rasspberry Pi 2 B есть аж целых 4 ядра процессора, поэтому для меня, весь процесс компиляции занял не более 25 минут (и это при том, что я не разгонял тактовую частоту процессора до 1000MHz), что в свою очередь не может не радовать.

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

# ffmpeg tools

cd /usr/src/

 

# скачиваем последнюю версию исходников из репозитория ffmpeg

git clone git://source.ffmpeg.org/ffmpeg.git

 

# заходим в папку с исходниками

cd ffmpeg

 

# запускаем конфигуратор с соответствующими параметрами

./configure --enable-shared --enable-gpl --prefix=/usr --enable-nonfree --enable-libmp3lame --enable-libfaac --enable-libx264 --enable-version3 --disable-mmx

 

# компилируем

make -j4

 

# и устанавливаем

make install

Финальные настройки

Из-за того, что все кодеки были установлены в папку /usr/local/lib, ffmpeg надо дать об этом как-то знать, для этого существует глобальная переменная — LD_LIBRARY_PATH. Можно каждый раз запускать ffmpeg таким образом

1

LD_LIBRARY_PATH=/usr/local/lib ffmpeg

Но есть и более универсальный вариант — установить значение этой переменной на постоянной основе

1

2

echo "/usr/local/lib" > /etc/ld.so.conf.d/libx264.conf

ldconfig

На этом наша сборка подошла к концу. Единственное, на что хотелось бы обратить внимание, всё вышеперечисленное будет работать только с указанными версиями исходников, на других версиях я не тестировал поэтому не могу дать гарантии что это будет работать.

Всем удачных экспериментов.

Использованные источники
http://www.jeffreythompson.org/blog/2014/11/13/installing-ffmpeg-for-raspberry-pi/
https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=53936
https://wiki.debian.org/ru/MultimediaCodecs
https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu