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 サーバー設定覚書 に続くのであった
ピンバック:Raspberry Pi Model B+ のMPD化 その2
ピンバック:Raspberry Pi Model B+ のMPD化 その1