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の項目に書いてありました。
一時停止とかもできたんですね...知りませんでした(;´д`)


omxplayerによる動画再生 その2

前回、動画再生で omxplayer を紹介しました。
その時、動画表示のされ方がオーバーレイ的と書いたのですが、
あれから数日して違和感というか...10年以上前のXWindowプログラミングの経験から
「あんな機能XWindowになかったよな~もしやXWindow関係なくないか!」と思って、
XWindowを立ち上げない状態で動画再生してみると...

CIMG0610.JPGCIMG0617.JPG


動きよった(゜Д゜)

しかも、コマンド入力は直接RaspberryPi上でなくてもいいみたいで、
別端末のssh上から動画再生可能でした。
今回はtsファイルをエンコードして中身をh264にし、RaspberryPiのSDカードへssh SCPで
転送して再生してます。
さすがに前回の1.7Mbpsにくらべると、6~7Mbpsクラスの動画は綺麗ですね~


ついでにmp3を再生してみました。
3.5mmジャックのボリューム制御は今はできないみたいですね。
音割れしてました。
HDMI出力にして、AVアンプなどに接続すれば普通に音楽を聴くことが出来ます。




omxplayerによる動画再生

Raspberry Pi の動画再生支援機能を使えるプレイヤーがあるそうです。
 http://sai-lab.ddns.net/diary/10051.html
を参考に omxplayer を使ってみました。
まずはインストール。ちょっと前まで少し面倒だったようですが
今は
sudo apt-get install omxplayer
のようにインストール出来るようです。
あとは
omxplayer -p -o hdmi ファイル名
とすれば動画再生してくれます。
-pはなくても音出てました。(このオプションあったほうがいいのかはわかりません(´・ω・`)

しかし...うちの環境では動画はtsファイルがほとんどです。
RaspberryPiの再生支援はh264だけ?っぽいので、上記HPの別の記事によると
tsファイル再生はCPUふりきちゃうみたいですね。

あらかじめh264動画を作成するか...リアルタイムに変換か...
どちらもめんどくさいですが、今回はお遊びで疑似?リアルタイム変換してみますか。
とはいえ、動画関係はあんまり知識がないので作ろうにも作れない(>_<)
何かいい物ないかな~と探しているとffmpegについているffserverが使えそうです。

もちろんRaspberryPi上で動作させるには重すぎと思うので別のPCでffserver動かしましょう。
が、別PCはmacbookしかない(;´д`)
しかもffserverってUNIX系でないとffmpegに付いてないっぽいですね。
macbookにUSBメモリ差して、Ubuntuをいれてみましたが、なんか起動が遅い!
イラッとしたので、これはやめて、普通にWindowsPCのVirtualBox上で
ffserverを動作させるようにしました。

VirtualBox、Ubuntu関係は省略...('~')

Ubuntu上で
ffserver

ffmpeg -i test.ts http://127.0.0.1:8090/feed1.ffm
でもって、RaspberryPi上で
omxplayer -p -o hdmi http://192.168.x.x:18090/test.flv

一応スムーズに再生されていますね。CPU使用率も低い。
でも、ビットレート低いせいかTSより荒いですね...
ビットレートこれ以上上げるとffserverがエラーになるんですよねぇ~
オプションの指定の仕方が悪いのか...
まぁ、見られるレベルなのでこれでいっかw

704x480.JPG
←こちらは704x480の動画です。こんな感じでかってに拡大され、
オーバーレイっぽく表示されます。
↓その時のCPU使用率はこんな感じ。
704x480-1.JPG


1440x1040.JPG
1440x1040にしてもまだCPU使用率変わらず。


CIMG0605.JPG
1920x1072でもスムーズに再生されています。


bd.JPGおもいきってBDレベルのファイルをapache配下に設置してRaspberryPiから再生させてみると...
さすがにCPU振り切ってました。
でも、最初の10秒くらいはスムーズで、その後は1秒ごとにつっかかる感じでした。
??CPU使用率さがってるのは再生停止したから)


で、最終的な /etc/ffserver.conf は以下のようになりました。
Port 8090
BindAddress 0.0.0.0
MaxBandwidth 2000

NoDaemon

<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 2000M
</Feed>

<Stream test.flv>
Feed feed1.ffm

Format flv

VideoCodec libx264
VideoSize 1920x1072
VideoBitRate 1700

AVOptionVideo g 150
AVOptionVideo qcomp 0.7
AVOptionVideo qmin 15
AVOptionVideo qmax 51
AVOptionVideo qdiff 4
AVOptionVideo subq 6
AVOptionVideo me_range 16
AVOptionVideo i_qfactor 0.714286

AudioCodec libfaac
AudioBitRate 256
AudioChannels 2
AudioSampleRate 48000

AVOptionVideo flags +global_header
AVOptionAudio flags +global_header

</Stream>

<Stream stat.html>
Format status
</Stream>