Windowsの場合はなんてことはなく player.pl差し替え版を使えばいい。 TSConverter.exeやNeroAacDec等のバイナリを置いておけばCGIが勝手にやってくれる。ありがたや。
しかしLinuxの場合はそう簡単にはいかない... スクリプトを少し覗けばわかるが、差し替え版は ありとあらゆるパスがWindows表記 なので、 UNIX系列では再エンコード部分は動かない。音ずれ補正に必須であるTSConverter.exeを動かすために Wineで工夫したりする必要があるし、さらに どうしても見付からないんだNeroAacDec/Encのソースが! 一応本家サイトからLinuxバイナリはダウンロード できるのだが....Debian GNU/Linux etchでは
./neroAacDec: /lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.4' not found (required by ./neroAacDec)
てな感じで動かない。lennyにアップグレードしたろかと思ったけど、現状動いてるサーバを長期間止めることになるので断念。 苦し紛れにlibcとstdc++の*.debをダウンロードしてdata.tar.gzを取り出して共有ライブラリを取り出してLD_PRELOADを駆使して実行してみた。結果はセグメン(^^;
まずはワンセグではなく汎用の...29.97fpsのmp4やflvをiPhoneで再生できるように変換することを考える。千里の道も一歩から。
いろいろ試行錯誤したが、mplayer-export-2009-01-08をコンパイルしてできたmencoderを使うのが一番早そう。最初、海外フォーラムをつぶさに覗いていたのだがどれも情報が古くて mencoderはダメなのでffmpeg使いましょう みたいなことを書いてあってハマった。mplayer今年版なら大丈夫そうだ。-lavcoptsが死ぬ程長いのは、ほとんどlibx264にiPhoneが唯一読み込めるbaseline-profileの指定。尚、MP4Boxコマンドは以前コンパイルしたgpacに含まれていたものです。MP4BoxはAVインタリーブし直しに必要です。
------------encode169.sh------------ #!/bin/sh infile=$1 test -f $infile || exit 1; tmpfile=${infile%.*}.tmp outfile=${infile%.*}.mp4 mencoder -noskip -mc 0 -aspect 1050:576 -ofps 29.97 -vfm ffmpeg -vf scale=480:272,harddup -ovc lavc -oac lavc -lavcopts vglobal=1:vcodec=libx264:vqscale=2:vqmin=2:level=30:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=0:cmp=3:subcmp=3:aglobal=1:acodec=libfaac:abitrate=128 -of lavf -lavfopts format=ipod -o $tmpfile $infile MP4Box -ipod -fps 29.97 -add $tmpfile -new $outfile rm -f $tmpfile ------------encode169.sh------------ 使い方: % encode169.sh test.ts
4:3コンテンツの場合はこんな感じでイナフ。ほとんど間違い探しであるが...以下2行書き換えてencode43.shとかで保存しておくといいかな。
mencoder -noskip -mc 0 -aspect 4:3 -ofps 29.97 -vfm ffmpeg -vf scale=480:360,harddup -ovc lavc -oac lavc -lavcopts vglobal=1:vcodec=libx264:vqscale=2:vqmin=2:level=30:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=0:cmp=3:subcmp=3:aglobal=1:acodec=libfaac:abitrate=128 -of lavf -lavfopts format=ipod -o $tmpfile $infile MP4Box -ipod -fps 29.97 -add $tmpfile -new $outfile
ただ、上記でなんでも変換できるわけではなくて内部でlibfaacを使っている関係上、NHKニュースなど二ヵ国語放送のために 音声形式が途中で変更されるものは 雑音が入ったり切替え以降 たまに音がでなくなったりする ....。これは俺がほぼ100%ステレオ音声オンリーであるアニメしか変換しない(意味明瞭)ためにペンディングしている。まじめにやるならLR排他や5.1ダウンミックスしながら1本のステレオWAVにするようなデコーダが必要だろう。etchでNeroAacが動けばなー....
既に書いたが 「Baseline-profile NoBフレ,NoCAVAC,方形ピクセルのAVCであること」 と、 もうひとつ。 「URLの末尾が.mp4で終わること!」(URIパラメータ形式不可) 。これはマジハマッタ。どんなエンコードしても Safariで読み込むと 「このファイルは再生できません」 って言うからさ、てっきりエンコードが失敗してるのかーとか思うじゃないの。実はファイルは正常にできていて、SafariのEMBEDタグ呼出制限にひっかかってただけだった。サーバレスポンスヘッダのコンテンツタイプvideo/mp4も全く参照してないようだし...これどっかに書いてあります?
正直iPhoneは全体的にエラーメッセージが足りなすぎる!隠し機能でいいからおしゃべりモードがほしいな。Web開発だけでもJavaScriptエンジンの情報はもう少しほしい。SDKがあれば改善するのかしら...?
玄柴と比較して、このeSATA SheevaPlug Multiというのは u-bootの設定がかなり異なるようだ....。
Hit any key to stop autoboot: (起動時リターン連打でu-bootプロンプトへ) Marvell>> printenv [ENTER] bootcmd=run bootcmd_mmc; run bootcmd_nand bootcmd_mmc=setenv bootargs $(bootargs_console) (*実際は1行) $(bootargs_root_mmc); mmcinit; (*実際は1行) ext2load mmc 0:1 0x800000 /uImage; bootm 0x00800000 (*ここまで) bootcmd_nand=setenv bootargs $(bootargs_console) (*実際は1行) $(mtdpartitions) $(bootargs_root_nand); nand read.e (*実際は1行) 0x00800000 0x00100000 0x00400000; bootm 0x00800000 (*ここまで)
なるほど、先に外付けSDカード(Debian)をブートしようとして、 失敗したら内蔵NAND(Ubuntu)を起動するようになっているわけだ。便利だな..... 使っているその他のパラメータはこんな感じ。
bootargs_root_mmc=root=/dev/mmcblk0p2 rootdelay=5 bootargs_root_nand=ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs mtdpartitions=mtdparts=orion_nand:0x400000@0x100000(uImage),(*実際は1行) 0x1fb00000@0x500000(rootfs) (*ここまで) bootargs_console=console=ttyS0,115200
bootargs_root_mmcのrootパーティションが/dev/mmcblk0p2なので、 おそらく2番めのパーティションがrootなのだろう。
内蔵NANDもカスタムカーネルが採用されており、rootfsはjffs2よりも高速なUBIFSが 採用されているようだ。ハードウェアは同じだけど、そこかしこに手が入ってるのね。
Uncompressing Linux........ Linux version 2.6.32.7 (newit@gemini) (gcc version 4.4.1 (Sourcery G++ Lite 2009q3-68) ) #5 PREEMPT Wed Feb 10 21:09:39 GMT 2010
これ幸いとばかりにNANDでUbuntuブートしてから、SDカードのDebianを母艦(192.168.11.2)に バックアップ。書き戻すときはtar xvpfね、念のため。
# mkdir /mnt/test1 # mount /dev/mmcblk0p1 /mnt/test1 # cd /mnt/test1 # tar cvf '-' . | ssh papanda@192.168.11.2 "cat '-' > /tmp/debian_kern.tar" # cd .. # umount /mnt/test1 # mount /dev/mmcblk0p2 /mnt/test1 # cd /mnt/test1 # tar cvf '-' . | ssh papanda@192.168.11.2 "cat '-' > /tmp/debian_root.tar" # umount /mnt/test1 # cd ..
見た感じSDカードのフォーマットは単純そのもの。Linuxパーティション1にuImageというファイルが1個、 Linuxパーティション2にrootfsをそのまま置けば良さそうだ。NANDと違ってすごい簡単ね。
試しにNewITの添付のSDカードとは容量の異なる、2GBのSDカードに、 似たようなパーティション切って、上のアーカイブを展開したけど、 全く問題なく起動したよ(実環境はこのカードで構築中)。
ここまでLinuxの基礎的な知識を動員している以外、SheevaPlug関連の 情報はほとんど使ってない(笑)マジ適当にやってマス。 それもこれも、 NewIT UKが最初から設定を済ませてくれている からだね.....。 これをポチったときは「やっちゃった」感ありありだったわけだが (ポンド/円の為替レートに無頓着だったというのもある...)今では玄柴買わなくて良かったと思ってる!
サウンドハウスに注文していたUPSが届いた。以前クマ掲示板では報告したけど、ぱぱサーバのUPSは2回の電池交換の後に壊れてしまい、ずーっとUPSなし運用であった。そして 11日の大停電であえなくDBが壊れてしまい 復旧に手間取ったので、仕方なく購入。みんなの知らないところで苦労しているのよ、これでも。
![]() |
まあ........安物でいっかと思ったわけで、その意味では仕方ないことなのだが、
とかはカナリ想定外であった(^^;....さすがにAPCやOMRONのUPSは全てクリアしているよ。なので上記のような問題がある、ということは、買うまで気にもしなかった。特にまぶしいのがけっこう狭い部屋では辛い(笑)検討している方は注意を。
ソフト的にはこの安物UPSはOMRONよりずっと素直。OMRONは何をケチったのかUSBになった後も素直なシリアルデバイスのUSBエミュレーションではなく、RTSに相当する信号線を独自の通知に使ったりする謎仕様であり、最新のLinux OSでは制御するのは難しかった(※もちろん俺比で)のである。つーかOMRON添付のソフトめちゃくちゃ古くて萎えたというのが正解か。
ところがClassic PRO UPSは....
# lsusb Bus 001 Device 003: ID 0001:0000 Fry's Electronics
「ベンダーID0001ってなんだよ」 というセルフツッコミはあるものの海外産の日本仕様品であり、このベンダーも単純にmegatecのOEMのようであるから、制御はNetwork UPS Tools を使うことで比較的簡単にできた。そのmegatecの制御コマンドも、
# ldd /lib/nut/megatec_usb libusb-0.1.so.4 => /lib/libusb-0.1.so.4
ということであるから、お馴染みのlibusbを使ってユーザランドから叩いているだけであり、 USBシリアルデバイスの認識を除き、カーネルバージョンに依存しない! 散々叩いたが、こういう部分は魅力的。
Debian squeezeならパッケージが用意されているのでインスコ自体は一発である。
# apt-get install nut
しかしsqueezeだからなのか、Debian流の突き放しなのか設定ファイルがコピーされていないので自分で用意する必要がある。
まず、/etc/nut/nut.confというファイル、本当は/etc/default/nutなんじゃないかと思うがどうか?それらしい説明もコメントに書いてあるようだし、コピーしてから編集する。
# cp /etc/nut/nut.conf /etc/default/nut # vi /etc/default/nut ※MODE=standaloneに設定
次に/etc/nut/ups.confを編集して以下の6行の記述を追加する。
[megatec] driver = megatec_usb port = /dev/usb/hiddev0 desc = "Classic Pro UPS1200LX" vendorid = 0001 productid = 0000
この括弧で囲まれた部分がこのUPSの名前。自由に決められるけど他の設定ファイルとからむので、とりあえずこれで。あとportというのはUSBデバイス名で、Debian squeezeの2.6.32-5で認識したusbdevの値ですな。他のディストリだと変わるかも。
/etc/nut/upsd.confはとりあえずいじる必要なし。スタンドアロンではなく複数のホストを同期させて動かしたい場合はLISTENの設定を追加する必要があるようだ。nutは単品だけでなく、1台のホストがUPSを管理し、その情報を複数のサーバで共有できるように作られているみたい。
/etc/nut/upsd.usersにupsdが使うユーザ名を登録するために3行追加。見た感じ、nutは/sbin/upsdというUPSそのものを管理するデーモンと、/sbin/upsmonというUPSホスト側の動作を担当するデーモンにわかれており、この間のユーザ管理に独自の設定を使うようだ。
[upsmon] password=papapapa upsmon master
パスワードはマジ適当なので好きなのつけておくれ。しかしupsmonという部分は変更しないように。
/etc/nut/upsmon.confがホスト側の動作の設定。上記3種で設定した名前やパスワードを全て利用する。まあデフォルト動作でよければ1行追加するだけだが。
MONITOR megatec@localhost 1 upsmon papapapa master
おしまい。
.............
......
実測70Wくらいの消費電力のサーバで1時間ちょっと持ったよ。OMRONの前のUPS(350VA)では考えられない値だ。とりあえず20%を切ったところでブザーが鳴り、シャットダウンシーケンスに入った。まずは成功である。
しかし.... こんなことテストでやってらんないので確認方法を書いておく。 upsdは子プロセスとしてドライバ(と呼んでいる単なるコマンド)を起動しているだけなので、そのコマンドを起動すれば目視で確認できる。
# /lib/nut/megatec_usb -a megatec -DDD 2.929277 I VALUES => [ 1200VA V6.7] 2.929286 Asking for UPS status [Q1]... 2.929296 set_data_krauler: index [03] 3.827172 Q1 => OK [(096.0 000.0 096.0 008 49.9 24.8 29.0 00001000]
かなりはしょっているけど、このQ1というコマンドの中に書いてある数の最後がmegatec_usbの場合 AC通電:00001000 、 バッテリー駆動:10001000 になるようなので参考にしてください。
このコマンド自体が動かない場合は/etc/nut/nut.confまたは/etc/default/nut,/etc/nut/ups.confの設定を再確認。他のファイルは関係ないみたい(※実はけっこうハマッた)
![]() |
_ 通りすがりのあいあん [いつもお世話になります。]
_ 樹雪 [突然失礼致します。 私、樹雪と申します。 こちらの記事を参考に、UPS1200LX の設定をさせて頂きました。 と..]