mpd サーバー構築覚書

Pocket

mpd を使うとリモートで鳴らす音楽を制御することができます

我が家はホームシアターセットがあるので、あったら便利だなーと思い、
Raspberry Pi に mpd で音楽システムを構築

いつもの通り、うちの pidora にはなるべくソースからインストールしたくなかったので、
rpm からインストールしてみました

でも、さすがに自分で rpm パッケージを一から作りたくなかったので
ベースは RPM Fusion のもの

 

mpd の src.rpm を arm 用にビルドする前に、必要なものを yum でインストール

それでもインストールできないものは、RPM Fusion から取得してきたものを使用
が、そのままでは arm 用にビルドできないものもありますので、臨機応変に修正

まずは、x264。spec ファイルを書き換え

#global _with_bootstrap 1

%{?_with_bootstrap:
%global _without_gpac 1
%global _without_libavformat 1
%global _without_libswscale  1
}

%global _with_bootstrap 1

%{?_with_bootstrap:
%global _without_gpac 1
%global _without_libavformat 0
%global _without_libswscale  1
}

として一旦 x264 をビルド
そして出来上がった x264、x264-devel、x264-libs をインストール

$ sudo yum localinstall x264-*

 

続いて frei0r-devel。

# sudo yum install frei0r-devel
Result on:
Error: Package: frei0r-plugins-1.3-8.fc18.1302280219kf.armv6hl (pidora)
  Requires: libopencv_nonfree.so.2.4
Error: Package: frei0r-plugins-1.3-8.fc18.1302280219kf.armv6hl (pidora)
  Requires: libopencv_gpu.so.2.4

どうやら、pidora-18-r2c.img に入っている opencv-2.4.3-2.fc18.armv6hl.rpm から
opencv-2.4.5-1.fc18.armv6hl.rpm になったときに
libopencv_gpu.so.2.4、libopencv_nonfree.so.2.4 が提供されなくなったようです

ここは fc19 の  frei0r-plugins-1.3-10.fc19.src.rpm を取ってきてビルドし直してインストールしなおします

$ rpmbuild --rebuild frei0r-plugins-1.3-10.fc19.src.rpm

続いて、ffmpeg をビルド

$ rpmbuild --rebuild  ffmpeg-2.1.3-1.fc21.src.rpm

しかし、ffmpeg をビルドすると下記のようなエラーが。。。

/home/hoge/rpmbuild/BUILD/ffmpeg-2.1.3/tools/crypto_bench.c: In function 'run_implementation':
/home/hoge/rpmbuild/BUILD/ffmpeg-2.1.3/tools/crypto_bench.c:261:9: error: implicit declaration of function 'AV_READ_TIME' [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors
make: *** [tools/crypto_bench.o] Error 1
エラー: /var/tmp/rpm-tmp.bfDOpu の不正な終了ステータス (%build)

ffmpeg.spec ファイルの二か所書き換えを行う

はじめに

make %{?_smp_mflags} V=1
make documentation V=1
make alltools V=1
popd

続いて

%if 0%{!?ffmpegsuffix:1}
%files
%doc COPYING.* CREDITS README doc/ffserver.conf
%{_bindir}/ffmpeg
%{_bindir}/ffplay
%{_bindir}/ffprobe
%{_bindir}/ffserver
%{_bindir}/qt-faststart
%{_mandir}/man1/ffmpeg*.1*
%{_mandir}/man1/ffplay*.1*
%{_mandir}/man1/ffprobe*.1*
%{_mandir}/man1/ffserver*.1*
%{_datadir}/ffmpeg
%endif

を下記のように書き換える

はじめの部分は下記

make %{?_smp_mflags} V=1
make documentation V=1
#make alltools V=1
popd

続いて下記

%if 0%{!?ffmpegsuffix:1}
%files
%doc COPYING.* CREDITS README doc/ffserver.conf
%{_bindir}/ffmpeg
%{_bindir}/ffplay
%{_bindir}/ffprobe
%{_bindir}/ffserver
#%{_bindir}/qt-faststart
%{_mandir}/man1/ffmpeg*.1*
%{_mandir}/man1/ffplay*.1*
%{_mandir}/man1/ffprobe*.1*
%{_mandir}/man1/ffserver*.1*
%{_datadir}/ffmpeg
%{_datadir}/doc/ffmpeg
%endif

これでビルドして ffmpeg をインストール

最後に mpd のビルド

$ rpmbuild --rebuild mpd-0.17.3-3.fc19.src.rpm

ただし、速攻エラーが

src/decoder/ffmpeg_decoder_plugin.c: In function 'ffmpeg_send_packet':
src/decoder/ffmpeg_decoder_plugin.c:302:26: error: 'AVCODEC_MAX_AUDIO_FRAME_SIZE' undeclared (first use in this function)
src/decoder/ffmpeg_decoder_plugin.c:302:26: note: each undeclared identifier is reported only once for each function it appears in
src/decoder/ffmpeg_decoder_plugin.c:302:10: warning: unused variable 'aligned_buffer' [-Wunused-variable]
make[1]: *** [src/decoder/libdecoder_plugins_a-ffmpeg_decoder_plugin.o] Error 1

こちらのサイトを参考に patch ファイルを作成

作成した mpd_av_audio.patch が下

--- src/decoder/ffmpeg_decoder_plugin.c	2013-08-04 19:20:16.000000000 +0700
+++ src/decoder/ffmpeg_decoder_plugin.c	2013-09-28 13:25:06.000000000 +0700
@@ -47,6 +47,8 @@
 #undef G_LOG_DOMAIN
 #define G_LOG_DOMAIN "ffmpeg"

+#define MAX_AUDIO_FRAME_SIZE 192000
+
 static GLogLevelFlags
 level_ffmpeg_to_glib(int level)
 {
@@ -299,11 +301,11 @@
 #endif

 #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53,25,0)
-	uint8_t aligned_buffer[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2 + 16];
+	uint8_t aligned_buffer[(MAX_AUDIO_FRAME_SIZE * 3) / 2 + 16];
 	const size_t buffer_size = sizeof(aligned_buffer);
 #else
 	/* libavcodec < 0.8 needs an aligned buffer */
-	uint8_t audio_buf[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2 + 16];
+	uint8_t audio_buf[(MAX_AUDIO_FRAME_SIZE * 3) / 2 + 16];
 	size_t buffer_size = sizeof(audio_buf);
 	int16_t *aligned_buffer = align16(audio_buf, &buffer_size);
 #endif

 

作成した patch を適用するように mpd.spec に2か所項目を追加

はじめに Patch の記述追加

Patch100:       mpd_av_audio.patch

続いて、patch を適用するように追加

%prep
%setup -q
%patch0 -p0
%patch1 -p1
%patch100 -p0

作成した mpd をインストール
だが、これでも下記エラーが・・・

Jan 30 23:55 : ffmpeg: Unsupported libavcodec SampleFormat value: fltp     32  (8)

さらにこちらを参考に src/decoder/ffmpeg_decoder_plugin.c にあてる
mpd_ffmpeg_decoder.patch を作成

--- src/decoder/ffmpeg_decoder_plugin.c.org     2013-01-07 09:39:40.000000000 +0900
+++ src/decoder/ffmpeg_decoder_plugin.c 2014-01-31 00:04:07.150274000 +0900
@@ -395,6 +395,10 @@
#endif
return SAMPLE_FORMAT_S32;

+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,17,0)
+       case AV_SAMPLE_FMT_FLTP:
+               return SAMPLE_FORMAT_FLOAT;
+#endif
default:
break;
}

mpd.spec を再度修正

はじめに Patch をもう一つ追加

Patch100:       mpd_av_audio.patch
Patch101:       mpd_ffmpeg_decoder.patch

適用を追加

%prep
%setup -q
%patch0 -p0
%patch1 -p1
%patch100 -p0
%patch101 -p0

おおお、ビルド成功
設定は mpd サーバー設定覚書 に続くのであった

2件のコメント

  1. ピンバック:Raspberry Pi Model B+ のMPD化 その2

  2. ピンバック:Raspberry Pi Model B+ のMPD化 その1

コメントを残す