AirVideoのためにUbuntu 12.04 LTSにてmp4creator(mpeg4ip)をビルドする
AirVideo For Linuxを動作させるためにmp4creatorが必要になるのだが、Ubuntu 12.04 LTSではmp4creatorが入っているパッケージが存在しない。よって、何処からかパッケージを持ってくるか、自分でビルドする必要がある。ビルドしようとすると色々ハマる。
installは行わずに、AirVideoの設定(properties)にて直接パスを指定して、利用する。
buildに必要なパッケージは入っている事とする。
mp4liveやv4l2はいらない。
$ sudo aptitude install bzr $ bzr branch lp:ubuntu/precise/mpeg4ip $ cd mpeg4ip $ cat debian/patches/* | patch -p1 $ ./configure --prefix=/usr --disable-alsatest --disable-player $ make
途中で止まる。
make[3]: ディレクトリ `/tmp/mpeg4ip/lib/rtp' に入ります if /bin/bash ../../libtool --mode=compile --tag=CC gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -I../../lib/utils -DDEBUG -Wall -Werror -g -O2 -DMPEG4IP -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -MT net_udp.lo -MD -MP -MF ".deps/net_udp.Tpo" -c -o net_udp.lo net_udp.c; \ then mv -f ".deps/net_udp.Tpo" ".deps/net_udp.Plo"; else rm -f ".deps/net_udp.Tpo"; exit 1; fi gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -I../../lib/utils -DDEBUG -Wall -Werror -g -O2 -DMPEG4IP -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -MT net_udp.lo -MD -MP -MF .deps/net_udp.Tpo -c net_udp.c -fPIC -DPIC -o .libs/net_udp.o net_udp.c: In function 'socket_error': net_udp.c:166:11: error: variable 'retlen' set but not used [-Werror=unused-but-set-variable] cc1: all warnings being treated as errors
- Werrorによってwarningが出たらエラーになり止る設定になっている。
lib/rtp/Makefileの328行目のWerrorを消して再度、make。
今度はmpeg2psで止まる。
g++ -D_REENTRANT -Wall -Wno-char-subscripts -Woverloaded-virtual -Wno-unknown-pragmas -Wno-deprecated -Wformat=2 -Wpointer-arith -Wsign-compare -fno-strict-aliasing -g -O2 -DMPEG4IP -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -o .libs/mpeg_ps_info ps_info.o ../../lib/gnu/.libs/libmpeg4ip_gnu.so ../../lib/mp4av/.libs/libmp4av.so ../../lib/mp4v2/.libs/libmp4v2.so ./.libs/libmpeg2_program.a -ldl -Wl,--rpath -Wl,/usr/lib ./.libs/libmpeg2_program.a(mpeg2ps.o): In function `get_info_from_frame': /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1014: undefined reference to `h264_nal_unit_type' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1024: undefined reference to `h264_find_next_start_code' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1014: undefined reference to `h264_nal_unit_type' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1017: undefined reference to `h264_read_seq_info' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1060: undefined reference to `MP4AV_Mp3HeaderFromBytes' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1061: undefined reference to `MP4AV_Mp3GetChannels' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1062: undefined reference to `MP4AV_Mp3GetHdrSamplingRate' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1063: undefined reference to `MP4AV_Mp3GetHdrSamplingWindow' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1064: undefined reference to `MP4AV_Mp3GetBitRate' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1065: undefined reference to `MP4AV_Mp3GetHdrLayer' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1066: undefined reference to `MP4AV_Mp3GetHdrVersion' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1036: undefined reference to `MP4AV_Mpeg3ParseSeqHdr' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1075: undefined reference to `MP4AV_Ac3ParseHeader' ./.libs/libmpeg2_program.a(mpeg2ps.o): In function `find_pack_start': /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:179: undefined reference to `MP4AV_Mpeg3FindNextStart' ./.libs/libmpeg2_program.a(mpeg2ps.o): In function `mpeg2ps_stream_find_mpeg_video_frame': /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:549: undefined reference to `MP4AV_Mpeg3FindNextStart' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:585: undefined reference to `MP4AV_Mpeg3FindNextStart' ./.libs/libmpeg2_program.a(mpeg2ps.o): In function `mpeg2ps_stream_find_h264_video_frame': /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:643: undefined reference to `h264_is_start_code' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:645: undefined reference to `h264_find_next_start_code' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:643: undefined reference to `h264_is_start_code' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:680: undefined reference to `h264_find_next_start_code' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:697: undefined reference to `h264_nal_unit_type' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:699: undefined reference to `h264_nal_unit_type_is_slice' ./.libs/libmpeg2_program.a(mpeg2ps.o): In function `mpeg2ps_stream_find_mp3_frame': /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:883: undefined reference to `MP4AV_Mp3GetNextFrame' ./.libs/libmpeg2_program.a(mpeg2ps.o): In function `mpeg2ps_stream_figure_out_video_type': /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:735: undefined reference to `h264_is_start_code' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:736: undefined reference to `h264_nal_unit_type' ./.libs/libmpeg2_program.a(mpeg2ps.o): In function `mpeg2ps_stream_find_ac3_frame': /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:824: undefined reference to `MP4AV_Ac3ParseHeader' ./.libs/libmpeg2_program.a(mpeg2ps.o): In function `mpeg2ps_get_video_stream_name': /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1575: undefined reference to `mpeg2_type' ./.libs/libmpeg2_program.a(mpeg2ps.o): In function `mpeg2ps_get_video_frame': /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1854: undefined reference to `MP4AV_Mpeg3PictHdrType' ./.libs/libmpeg2_program.a(mpeg2ps.o): In function `mpeg2ps_seek_video_frame': /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:2118: undefined reference to `h264_access_unit_is_sync' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:2129: undefined reference to `MP4AV_Mpeg3PictHdrType' /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:2135: undefined reference to `MP4AV_Mpeg3PictHdrType' ./.libs/libmpeg2_program.a(mpeg2ps.o): In function `mpeg2ps_get_video_stream_name': /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1571: undefined reference to `h264_get_profile_level_string' ./.libs/libmpeg2_program.a(mpeg2ps.o): In function `mpeg2ps_get_video_stream_mp4_type': /tmp/mpeg4ip/lib/mpeg2ps/mpeg2ps.c:1633: undefined reference to `mpeg2_profile_to_mp4_track_type' collect2: ld returned 1 exit status make[3]: *** [mpeg_ps_info] エラー 1
これはライブラリのlibmp4av.soなどの読み込む順番が悪くて、関数が引けなくなっている。
lib/mpeg2ps/Makefileの286行目から始まる
prog_libadd = \ $(top_builddir)/lib/gnu/libmpeg4ip_gnu.la \ $(top_builddir)/lib/mp4av/libmp4av.la \ $(top_builddir)/lib/mp4v2/libmp4v2.la \ libmpeg2_program.la
を
prog_libadd = \ libmpeg2_program.la \ $(top_builddir)/lib/gnu/libmpeg4ip_gnu.la \ $(top_builddir)/lib/mp4av/libmp4av.la \ $(top_builddir)/lib/mp4v2/libmp4v2.la
にして、先にライブラリを読ませるようにする。再度、make。
今度は最後まで通る。
server/mp4creatorに出来ているはず。