アーカイブ : 2012年 8月

[Java]LWJGLで動画再生

どうも、hide92795です
ゲームエンジンの作成にあたり、結構悩んでいたのが動画再生についてです。
Javaで動画再生といえばJMFを使用したものが有名ですが、プラットホームごとのインストーラーがあったり、プラットホームに依存しないバージョンだと対応フォーマットが皆無に等しかったりといろいろと難点があったのです。
さらにLWJGLではSwing上にて動作自体はできるものの、JMF用のPanelに切り替えた時にどんな問題が発生するかわからないなど結構なリスクがありました。
そこでグーグル先生で色々調べていたところ、
http://www.java-gaming.org/index.php?topic=24846.30
↑のサイトを見つけました。この中の画像が貼り付けられている投稿に書かれているURL
http://www.java-gaming.org/?action=pastebin&id=23
こちらにはソースコードが書かれています。
投稿があったスレッド名は「VLCJ in OpenGL / LWJGL」です。
このVLCJというのはVLCPlayerの機能をJavaで使えるようにしているライブラリです。
VLCJ – http://www.capricasoftware.co.uk/vlcj/
ではまず下準備から
今回はWindows&Eclipse使用を前提としています。
1.必要なライブラリ等
・LWJGL
・VLCJ(↑のURLからDL出来ます)
・JNA(jna.jar, platform.jar)(VLCJのダウンロードページにリンクがあります。)
・libvlc.dll&libvlccore.dll(VLCのインストールディレクトリにあります)
2.ソースコード
基本的には先程のURLのソースですが、一部修正をしてあります。

修正箇所はmainのはじめに書かれている行です。
jarに対してネイティブライブラリの登録をしたのですが、何故かダメだったので直接ソースコードに。
あとは、再生したい動画ファイルをクラスパス直下において、

のop00.mpgの名前を変え、フィールドの一番上にあるWIDTHとHEIGHTの値を変えるだけです。
lwjgl_movie
↑RewriteのOPを拝借して再生してみましたが、問題ありませんでした。
基本的にVLCで再生出来るものなら問題ないと見て大丈夫でしょう。
ではノシ

C82 報告やらなんやら

どうも、hide92795です
C81の記事でC82は早くに行かないと言ったな。
あれは嘘だ。
というわけでC82行って参りましたw
今回のコミケに参加するにあたって、前回と変えたところは
・西に並んだ
・カタロム with Androidを採用
といったところでしょうか。
初めの西に並ぶというところですが、西の入場が始まった後に西東ブース/企業の分かれ道があり、さらにその先に東/西の分かれ道があります。
10:00の拍手をする段階では前回のC81が確定待機列から少し動いたところで今回は会議棟(ビックサイトの象徴的な建物のアレ)のほぼ真下というわけで、巷で噂の西からのほうが早いというのはあながち間違いでもないかなと思いました。
2つ目のやつですが、AndCCVというアプリにカタロムのデータをぶち込んで使ったのですが、メリットとデメリットを
メリット
・待機中とかに追加で調べたり、リストに追加したりできる
デメリット
・全体マップが小さくなってしまう(Xperia acroのせいもある)ので、次の場所がわからなくなったりする
というわけで、これ一本に頼るのは厳しいですが、カタロムから印刷したものと合わせれば結構使いやすいと思います。
んで、今回のC82で学んだこと
1.小銭/弊紙を入れる簡単なポーチ(カメラケース的な、ベルトに通せる奴)があると良かった
→左は札、右は小銭みたいな とにかくすぐに出せれば別の方法でも全然OK
2.マップを覚える
→白地図をそのまま覚えておいて損はない。今回場所が印刷した地図を見ながらやっていたら隣の列に入っていたり・・・
3.食べ物はそこまでいらない
→朝飯を食べてくるなら。パサパサしているのはのどが渇くのでやめておいた方がいい。ランチパック系がいいかも
4.雨対策はしっかりと
→今回は外に並んでいるときに急な雨にやられました。。。とっさに雨合羽を出したので大丈夫でした。傘でもいいけど待ち行列の中で全員が傘となるとあれなので雨合羽推奨。
5.睡眠大事
→前日準備が長引いたせいでろくに寝られず。。。。向こうにいる間は(テンションのせいなのか)眠くはありませんでしたが、帰りの電車に乗った瞬間に強烈な睡魔が・・・ 大井町で友達と別れた後から横浜到着までの記憶がありませんw
今回のC82は待機中から曇りで、気温が30度前後だったので楽な感じでした。
一番後悔しているのは自分の中で期待度トップ3にはいるサークルの本が一部売り切れてしまっていたということ(既刊だったので元々が少なかったというのもあったのかな?新刊は大丈夫でした)
最初は壁に行かないと並びが大変なことになってしまうので壁→島という順番は変わりなさそうですが、次からは壁の近くに押さえておきたいところがあったらそっちを優先してみる というのも手かもしれません。(今回は壁が4,売れちゃったところが1だったので少し無理がありましたけどねw)
あと1つ言うと買ったものを入れる袋にはチャック(とりあえず開け口を閉じれるような)があったほうがいいかもしれません。 横浜駅で電車を待っているときに足元においておいた袋が倒れて危うく中身が飛び出るところでしたww
今回の成果
購入冊数:23 使用金額:約16k
次回について色々書いていますが、C83はいけるかどうか。。。(多分80%くらいの確立で行くけどw)
大学入ったらサークルとしての参加もしてみたいですねw
↑のせいか、エンジンの開発が再度活発化しましたw
最近はプログラミングがなんかだるくてあまりいじっていなかったんですよねw
ではノシ

[Java]暗号化しながらストリームで書き出し&読み込み

どうも,hide92795です
夏休みの補習っていうのがね(´・ω・`)
ホント辛いですよw
今回はノベルゲームのエンジンに搭載予定の暗号化システムについて
使用する暗号化方式はAES、モードはPCBCです。
PCBCというわけで、復号化の際にはIVというのが必要になります。
IVは暗号化の際に取得できるのでそれをどうにか復号化の際に使える状態にしなければいけないのですが、
今回はこちらのサイトにて紹介されている方法である
「ファイルの先頭にIVを引っ付ける」
という方法で行きたいと思います。
まずは暗号化

上から順に解説すると
1.暗号化するファイルのFileInputStreamを生成
2.暗号化に用いるKeyを作成(鍵は16文字のStringみたいです)
3.AES/PCBC/PKCS5PaddingにてChiperを作成&初期化
4.出力先のFileOutputStreamを作成
5.↑をCipherOutputStreamで包む
6.FileOutputStreamにIVを書き込む
7.CipherOutputStreamに暗号化するデータを書き込む
となります。
今回はIVを平文の状態で書かなければいけないのでFileOutputStreamの方に書き込みます。
続いて復号化

こちらも上から順に
1.Keyの生成
2.暗号化したファイルのFileInputStreamの生成
3.IV用のbyte配列を作成
4.FileInputStreamからIV部分を3の配列に読み込み
5.Chiperを生成
6.4で読み込んだIVからIvParameterSpecを生成
7.6を使ってChiperを初期化
8.CipherInputStreamでFileInputStreamを包む
残りはChiperInputStreamで読みこむなりまた別のStreamに渡すなりしておkです
実際に暗号化してみたのが下の画像
crypt_sample
左が暗号化前、右が暗号化後
JPEGなので左ではExif情報があらわになっていますが、右では全く読めなくなっていますw
ファイルサイズは殆ど変わらず、暗号化後が8バイト増えただけでした
ちなみに、ファイルを圧縮したい場合は、FileOutputStreamをZipOutputStreamで包んだ(new ZipOutputStream(fis)みたいに)ほうが圧縮率がいいらしいです。
ではノシ