ブラウザ間でpreタグのフォントサイズ統一

PC関係の記事を書くときはテキストの出力をそのまま貼り付けるために
preタグを多用しています。
しかし、IEだけpreタグ内のフォントサイズが小さくなっちゃうんですね~(;´д`)
ので、
 http://kudox.jp/html-css/font-size-css
を参考に So-netブログ のHTMLを編集しました。

「デザイン > テンプレート管理 > HTMLの追加」とたどっていって、
下記の緑色の部分を追加します。


<head>
??..
<style type="text/css">
body, h1, h2, h3, h4, h5, h6, pre, li, dt, dd, th, td, p {
font-size:13px;
}
</style>
<!--[if IE]>
<style type="text/css">
body, h1, h2, h3, h4, h5, h6, pre, li, dt, dd, th, td, p {
font-size:small;
}
</style>
<![endif]-->

</head>
<body>
 

これでIEでもその他ブラウザでもpreタグ内でフォントサイズを統一できました。ヽ(´▽`)ノ

安価モニタでフル画面表示について

某掲示板 RaspberryPiスレで、いくらがんばってもで640x480にしかならない
という投稿があったので試してみました。

結果からいいますと

hdmi_ignore_edid=0xa5000080
hdmi_group=XXX
hdmi_mode=XXX

で、いけますね。

hdmi_group、hdmi_modeは好みの値を指定。
hdmi_ignore_edidはこの値固定です。

うちのLG IPS231でも最初は1920x1080にならなかったです。
入力信号は1680x1050なんだけど、あたかも1920x1080を表示しているように見えます。
丸い円を描いた画像を表示してみると楕円形になるので、1680x1050を1920x1080に
引き延ばしているようですね。

で、hdmi_ignore_edidって何なのかというと、
http://elinux.org/RPi_config.txt の説明では
「Enables the ignoring of EDID/display data if your display is a crappy Chinese one」
とあります。機械翻訳すると...
「あなたのディスプレイがくだらない中国のものであるならばEDID/ディスプレイデータを無視することを可能にします。」
とのこと、
ようはモニタ情報の自動判定がうまくいかない時、使うといいみたいですね。

うんじゃ、中身は知らないけど日本メーカーなら大丈夫なのか?
と思い、メインPCのWindowsで使っているEIZO HD2452Wで試してみました。
RaspberryPi の /boot/config.txt を全てコメントアウトし、LG IPS231と同じくHDMI => DVIケーブルで繋いでみると...
問題なく1920x1200で表示されました。

RaspberryPi の解像度おかしい方は参考にどうぞ(´・ω・`)




LOVE THE WORLD"(初回限定盤) 最安値!?

みなさんPerfume 新コンピ アルバム注文済みでしょうか~?

知っている人は知っているんでしょうけど、
今回初めて知ってビックリしたので紹介します~。(`Д´)

??月頭にPerfume Global Compilation “LOVE THE WORLD"(初回限定盤)を2,199円で買える
と紹介したのですが、人によってはもっと安く買えるみたいです。(今月いっぱい)

現在のJoshin webオンラインショッピングモールでの価格は
会員様web特価 2,399 円 (税込) (20%off)
さらに!
200円引きのWEBクーポンが期間:8月 31日(金) 23:59
さらに!! コレとは別の
200円引きのWEBクーポンが期間:9月 2日(日)23:59
さらに!!! 今月が誕生日の人は
300円引きのWEBクーポンが使えます。

合計700円引き!!1699円で注文できました。

今月が誕生日でない人でも1999円で買えますね。

WEBクーポンって別の種類だったら同時使用可能なんですね~知りませんでした。
Joshin webオンラインショッピングモール これから要チェックなサイトになりましたわ。(´∀`)

アスペクト比強制変更

omxplayerでの動画再生で最初と最後の数秒おかしいのはいいとして、
アスペクト比がおかしいのは気になりますね~( ̄~ ̄;)

どうやら動画から値取得がうまくいってないっぽい?
aspect.JPG

そこでソースコードいじくって、強制的に1.777778(16:9)にしちゃいましょう。

とりあえずomxplayerがコンパイルできるようにします(省略)

で、omxplayer.cppを以下のように修正します。
diff.jpg
これだけでOK。

コレで再生すると画面いっぱいに引き延ばされて再生されます。
CIMG0653.JPG
←修正前
CIMG0652.JPG
←修正後



ハードウェア支援でDVD再生

MPEG-2のハードウェア再生ができるということは
DVDもスムーズに再生できる気がします。

しかし、omxplayerはDVDを直接再生できないっぽい?(知らないだけかもですが...)

mplayerやxineなら直接再生できるんだろうけど、
ハードウェア支援を受けられず、スムーズに再生できない...

そこで困ったときのGoogle先生~何かイイのないですか~?
ハイありました。ヽ( ´ー`)ノ
libdvdread 0.9.xのサンプル?かな、play_title.c というのが使えそうです。
これとomxplayerでFIFO経由でデータのやりとりをすればうまくいきそうです。

ハードの構成は前回と同じです。
CIMG0645.JPG

次にツールの準備~
libdvdcssは前回の記事参照~
sudo apt-get install libdvdread-dev

play_title.cのDVDFinish();をコメントアウト

gcc play_title.c -o my_dvd -ldvdread
って感じでコンパイル。
my_dvdの引数の意味は引数無しで起動すれば出てきます。
mkfifo pipe
FIFO作成。
あとは以下のように実行すれば...
my_dvd /dev/dvd 1 1 1 > pipe &

omxplayer -p -o hdmi pipe

スムーズに再生されました。(=´∇`=)
CPU使用率はomxplayerが30%で始まって20%前後で安定。
my_dvdが5%弱って感じでした。

作り込む気はないので、これで十分でしょう。('~')

CIMG0650.JPGCIMG0648.JPG
(SSはちょっとコマンド違ってます)

でも、今だと1万円くらいでBD、DVD、YouTube、DLNA再生できるプレイヤーあるしね~
ここまでしてDVD再生する必要はないっすな(;´д`)



ハードウェア支援MPEG-2再生

先日購入したMPEG-2のライセンスキーが届いたので
RaspberryPiでPT2のMPEG-2-TS動画の再生をしてみました。

/boot/config.txt にメールの内容を書き込んで再生~

で、結果は...画面真っ暗、音がちょっと出ました!(´_ゝ`)

これまでは omxplayer だと普通にエラーが出て終了していましたが、
今回は再生しようとしているようです。

公式フォーラムでGPUメモリがどうのこうのという情報を見かけたので
sudo raspi-config
で変更します。
memory_splitって項目ですね。
GPUに64MB割り当てられるようにします。(デフォルトは32MBだったかな?)
そして、再起動後再生~

今度はうまくスムーズに再生されました(=´∇`=)

CPU使用率は最初80%くらいまで上がって、その後30~40%前後でした。
でも、いくつか問題ありますね。
 ・最初の数秒は音飛び
 ・最後の数秒切れてしまう(他の動画再生と同じですね。)
 ・地デジMPEG-2は16:9になってくれない(1440x1080そのまま表示される)

16:9にならないのだけ気になりますが、そのうちどうにかなるといいな(;´д`)




MPEG-2の再生が可能になる!?

現在はomxplayerだとMPEG-2の動画は再生できず、他のプレイヤーを使う必要があります。
でも、カクカクなんですよね~。

が、つい最近、RaspberryPiの公式サイトで
New video features! MPEG-2 and VC-1 decode, H.264 encode, CEC support
という記事が掲載されました。
 http://www.raspberrypi.org/archives/1839
RaspberryPiでMPEG-2な動画を再生できるようになるかも知れません。

でもこれ、2ポンド(260円)必要...有料なんですね。(;´д`)

いまのところRaspberryPiを動画再生マシンにする気はないのですが、
ほかにネタもないので買ってみました。

VC-1もあるみたいですが、手持ちの動画にそんなのないので、とりあえず保留~。

72時間後ぐらいにライセンスキーが送られてくるようですが...
まだ、待ち状態です。(>_<)


DVD、YouTube再生

今度はDVD再生を試してみました。
結論から書くとダメダメでした。(;´д`)

構成は以下のようにしました。
内蔵DVDドライブ => SATA to USBケーブル => RaspberryPi
CIMG0645.JPG
こんな感じで接続すると、かってに /dev/dvd が生成されます。
ほぅほぅ、今時のLinuxはWindowsっぽいんですね~

LinuxでDVD再生はいろいろ必要みたいっすね。
ちとめんどうですが、以下のようにします。

====== 準備 ======
sudo apt-get install subversion
sudo apt-get install automake
sudo apt-get install libtool
svn co svn://svn.videolan.org/libdvdcss/trunk libdvdcss
cd libdvdcss
./bootstrap
./configure
make
sudo make install
sudo ldconfig

====== 再生 ======
amixer cset numid=3 2
mplayer -ao alsa:noblock:device=hw=0.0 -framedrop dvd://

DVDはハードウェア支援が効かないようで
フレームドロップしまくりでした。

xineでも再生してみました。
sudo apt-get install xine-ui
同じくドロップしまくり。
CIMG0636.JPG
h264な動画以外はまともに再生できないっぽいですな。

次にYouTubeのストリーミング再生をする方法です。
 http://mugijiru.seesaa.net/article/258382587.html
を参考にしました。
sudo apt-get install youtube-dl

YouTubeの動画のページを開いた時のアドレスのv=の値をメモっておきます。
http://www.youtube.com/watch?v=P2Y6XsYXhtw&feature=g-u-u

その値を以下のようにすると
mplayer -framedrop $(youtube-dl -g http://www.youtube.com/embed/P2Y6XsYXhtw)
これまたカクカクで再生されます。(´_ゝ`)
CIMG0641.JPG

たしかYouTubeの動画って一部だけかな?h264だった気がしたので
omxplayer -p -o hdmi $(youtube-dl -g http://www.youtube.com/embed/P2Y6XsYXhtw)
で、後ろ2、3秒切れてるようですがスムーズに再生されました。
CIMG0643.JPG

USB Audioを試そう

今回は音楽再生についてです。

音楽再生というとやはりMP3でしょうか。
MP3であれば動画再生でも紹介した omxplayer で再生可能です。
omxplayer -p -o hdmi pppp.mp3
とすればHDMIのほうに音楽データが流れるので、
AVアンプなどに繋げば聞くことが出来ます。
が、音楽聞くだけなのにHDMIは使いにくいですよね~(;´д`)
そこで、
omxplayer pppp.mp3
とすれば3.5mmジャックのほうから音楽が流れてきます。
が、しかし、音割れしてます( ̄~ ̄;)
3.5mmジャックは使い物になりませんなぁ。

ってことでUSB Audioを使ってみます。
用意したのは KENWOOD RD-VH7PC
CIMG0626.JPGCIMG0629.JPG
たしか2002年頃、投げ売りされていたのを秋葉原で買ったやつです。
値段は忘れましたが、持って帰るのが大変だったのを覚えてます。

omxplayerで音声出力先をUSB Audioにする方法はわかりませんでした。(>_<)
ので、ほかのプレイヤーを使いましょう。

まずはプレイヤーのインストール~
http://pc.watch.impress.co.jp/docs/column/musashino_proto/20120808_551840.html
を参考に
sudo apt-get install mpg321
でインストール。
でもって、
mpg123 ppp.mp3
とすれば3.5mmジャックのほうから音楽が流れてきます。
3.5mmジャックは使い物にならないのでUSBの方へ切り替えます。
まずはUSB Audioが認識されているかチェック
pi@raspberrypi ~ $ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: ALSA [bcm2835 ALSA], デバイス 0: bcm2835 ALSA [bcm2835 ALSA]
サブデバイス: 8/8
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
サブデバイス #2: subdevice #2
サブデバイス #3: subdevice #3
サブデバイス #4: subdevice #4
サブデバイス #5: subdevice #5
サブデバイス #6: subdevice #6
サブデバイス #7: subdevice #7
カード 1: Device [Kenwood  Audio Device], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
pi@raspberrypi ~ $
私の環境は上記のようになっています。
古い機種ですが問題なく差すだけで認識されていますね。
USB Audioは「カード1のデバイス0」となっています。
ので、以下のようにコマンド入力すると...
mpg123 -a hw:1,0 pppp.mp3
見事に鳴りました。(=´∇`=)

次に比較的最新のネットワークオーディオプレイヤー、Pioneer N-50 を用意してみました。
CIMG0630.JPG
pi@raspberrypi ~ $ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: ALSA [bcm2835 ALSA], デバイス 0: bcm2835 ALSA [bcm2835 ALSA]
サブデバイス: 8/8
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
サブデバイス #2: subdevice #2
サブデバイス #3: subdevice #3
サブデバイス #4: subdevice #4
サブデバイス #5: subdevice #5
サブデバイス #6: subdevice #6
サブデバイス #7: subdevice #7
カード 1: Device [Pioneer USB Audio Device], デバイス 0: USB Audio [USB Audio]
サブデバイス: 0/1
サブデバイス #0: subdevice #0
pi@raspberrypi ~ $

同じように
mpg123 -a hw:1,0 pppp.mp3
で再生すると普通に鳴ってくれました。ヽ(´▽`)ノ
CIMG0631.JPG

ここで気になるのはハイレゾ音源だとどうなのか...
pi@raspberrypi ~ $ cat /proc/asound/card1/stream0
PIONEER CORPORATION Pioneer USB Audio Device at usb-bcm2708_usb-1.2, high speed : USB Audio

Playback:
Status: Stop
Interface 1
Altset 1
Format: S16_LE
Channels: 2
Endpoint: 5 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 192000
Data packet interval: 125 us
Interface 1
Altset 2
Format: S24_3LE
Channels: 2
Endpoint: 5 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 192000
Data packet interval: 125 us
Interface 1
Altset 3
Format: S32_LE
Channels: 2
Endpoint: 5 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 192000
Data packet interval: 125 us

Pioneer N-50 は 32bit 192kHz まで対応しているようですね~
でも、そんな音源もってねーー(;´д`)
ってことで無料サンプルの 24bit 96kHz wavファイルを試してみました。
aplay -B10000000 -D hw:1,0 -r 96000 LessLoss-Mephisto-Listz-II-24_bit_96_kHz.wav
鳴りました。
サンプルが1分と短いので詳しく検証できていませんが問題なさそうです。
CIMG0634.JPG

さらにアップサンプリングソフトでCD音源を 24bit 88kHz にしたwavファイルを試してみました。
残念ながらこちらはプチノイズが入ってしまいます。

あと、サンプリングレートが変わると、Pioneer N-50 はうまく認識してくれないようで
2回再生してやらないと正しく認識してくれませんでした。
この時ブチブチって音するので試す方はボリューム小さめでやりましょう( ̄~ ̄;)



omxplayerによる動画再生 その3

前前回は動画データの送信にffserverを使用しましたが、送信側がLinuxでないとダメでした。
やっぱ、Windowsでないと使いにくいですね~('~')

何かいい方法ないかとGoogle先生に聞いてみると、ffmpegはデータ出力先を標準出力に出来るそうです。
さらに各種ログメッセージも出力しないようにできるとのこと。

なんか出来そうな気がしてきました。
ただ、現在よく使うffmpegのオプションだとエンコード速度が実時間より
6fps遅いので使い物になりません。
速度優先のための値っていくつにすればいいのかわからないんですよね~(´・ω・`)
そこで、またGoogle先生に聞いて、こんな感じにしてみました。

-g 250 -qcomp 0.6 -qmin 10 -qmax 51 -subq 1 -me_range 16 -i_qfactor 0.71

これだとAMD PhenomIIX6 1090T 3.2GHzの環境で
エンコード速度50fpsくらい出てくれて、ビットレートが10Mbpsくらいになります。

以下のJavaコードをサーブレットに組み込んで試してみると...
(コア部分のみ抜粋)


String path = "D:\\bin\\";

res.setStatus(200); // resはHttpServletResponse
res.setContentType("video/mpeg");

ArrayList<String> list = new ArrayList<String>();
list.add(path + "ffmpeg.exe");
list.add("-i");
list.add("abc2.ts");
list.add("-f");
list.add("mpegts");
list.add("-acodec");
list.add("copy");
list.add("-vcodec");
list.add("libx264");
list.add("-s");
list.add("1920x1088");
list.add("-g");
list.add("250");
list.add("-qcomp");
list.add("0.6");
list.add("-qmin");
list.add("10");
list.add("-qmax");
list.add("51");
list.add("-qdiff");
list.add("4");
list.add("-subq");
list.add("1");
list.add("-me_range");
list.add("16");
list.add("-i_qfactor");
list.add("0.71");
list.add("-threads");
list.add("8");
list.add("pipe:1");
list.add("-loglevel");
list.add("quiet");

ProcessBuilder pb = new ProcessBuilder(list);
pb.directory(new File(path));
Process p = pb.start();
InputStream is = p.getInputStream();

out = res.getOutputStream();
byte[] b = new byte[2048000];
while (true) {
int n = is.read(b);
if (n < 0) {
break;
}
out.write(b, 0, n);
}


CIMG0625.JPG

動きましたヽ(´▽`)ノ

ただし、最初の30秒ほどはたまにつっかかりますねぇ。
その後は全く問題なく再生されていました。

あとはファイル名固定の部分やRaspberryPi側のファイル選択ツールを作成すれば
ため込んだTSファイル再生できますな(=´∇`=)

おまけ
omxplayerの操作方法は
 http://omxplayer.sconde.net/
のKey bindingsの項目に書いてありました。
一時停止とかもできたんですね...知りませんでした(;´д`)