mpd サーバー構築覚書

Pocket

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

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

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

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

 

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

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

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

<br />
#global _with_bootstrap 1</p>
<p>%{?_with_bootstrap:<br />
%global _without_gpac 1<br />
%global _without_libavformat 1<br />
%global _without_libswscale  1<br />
}<br />

<br />
%global _with_bootstrap 1</p>
<p>%{?_with_bootstrap:<br />
%global _without_gpac 1<br />
%global _without_libavformat 0<br />
%global _without_libswscale  1<br />
}<br />

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

<br />
$ sudo yum localinstall x264-*<br />

 

続いて frei0r-devel。

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

どうやら、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 を取ってきてビルドし直してインストールしなおします

<br />
$ rpmbuild --rebuild frei0r-plugins-1.3-10.fc19.src.rpm<br />

続いて、ffmpeg をビルド

<br />
$ rpmbuild --rebuild  ffmpeg-2.1.3-1.fc21.src.rpm<br />

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

<br />
/home/hoge/rpmbuild/BUILD/ffmpeg-2.1.3/tools/crypto_bench.c: In function 'run_implementation':<br />
/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]<br />
cc1: some warnings being treated as errors<br />
make: *** [tools/crypto_bench.o] Error 1<br />
エラー: /var/tmp/rpm-tmp.bfDOpu の不正な終了ステータス (%build)<br />

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

はじめに

<br />
make %{?_smp_mflags} V=1<br />
make documentation V=1<br />
make alltools V=1<br />
popd<br />

続いて

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

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

はじめの部分は下記

<br />
make %{?_smp_mflags} V=1<br />
make documentation V=1<br />
#make alltools V=1<br />
popd<br />

続いて下記

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

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

最後に mpd のビルド

<br />
$ rpmbuild --rebuild mpd-0.17.3-3.fc19.src.rpm<br />

ただし、速攻エラーが

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

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

作成した mpd_av_audio.patch が下

<br />
--- src/decoder/ffmpeg_decoder_plugin.c	2013-08-04 19:20:16.000000000 +0700<br />
+++ src/decoder/ffmpeg_decoder_plugin.c	2013-09-28 13:25:06.000000000 +0700<br />
@@ -47,6 +47,8 @@<br />
 #undef G_LOG_DOMAIN<br />
 #define G_LOG_DOMAIN &quot;ffmpeg&quot;</p>
<p>+#define MAX_AUDIO_FRAME_SIZE 192000<br />
+<br />
 static GLogLevelFlags<br />
 level_ffmpeg_to_glib(int level)<br />
 {<br />
@@ -299,11 +301,11 @@<br />
 #endif</p>
<p> #if LIBAVCODEC_VERSION_INT &gt;= AV_VERSION_INT(53,25,0)<br />
-	uint8_t aligned_buffer[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2 + 16];<br />
+	uint8_t aligned_buffer[(MAX_AUDIO_FRAME_SIZE * 3) / 2 + 16];<br />
 	const size_t buffer_size = sizeof(aligned_buffer);<br />
 #else<br />
 	/* libavcodec &lt; 0.8 needs an aligned buffer */<br />
-	uint8_t audio_buf[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2 + 16];<br />
+	uint8_t audio_buf[(MAX_AUDIO_FRAME_SIZE * 3) / 2 + 16];<br />
 	size_t buffer_size = sizeof(audio_buf);<br />
 	int16_t *aligned_buffer = align16(audio_buf, &amp;buffer_size);<br />
 #endif<br />

 

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

はじめに Patch の記述追加

<br />
Patch100:       mpd_av_audio.patch<br />

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

<br />
%prep<br />
%setup -q<br />
%patch0 -p0<br />
%patch1 -p1<br />
%patch100 -p0<br />

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

<br />
Jan 30 23:55 : ffmpeg: Unsupported libavcodec SampleFormat value: fltp     32  (8)<br />

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

<br />
--- src/decoder/ffmpeg_decoder_plugin.c.org     2013-01-07 09:39:40.000000000 +0900<br />
+++ src/decoder/ffmpeg_decoder_plugin.c 2014-01-31 00:04:07.150274000 +0900<br />
@@ -395,6 +395,10 @@<br />
#endif<br />
return SAMPLE_FORMAT_S32;</p>
<p>+#if LIBAVUTIL_VERSION_INT &gt;= AV_VERSION_INT(51,17,0)<br />
+       case AV_SAMPLE_FMT_FLTP:<br />
+               return SAMPLE_FORMAT_FLOAT;<br />
+#endif<br />
default:<br />
break;<br />
}</p>
<p>

mpd.spec を再度修正

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

<br />
Patch100:       mpd_av_audio.patch<br />
Patch101:       mpd_ffmpeg_decoder.patch<br />

適用を追加

<br />
%prep<br />
%setup -q<br />
%patch0 -p0<br />
%patch1 -p1<br />
%patch100 -p0<br />
%patch101 -p0<br />

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

2件のコメント

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

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

コメントを残す