diary/Kojima

・LinuxでのBluray Disc再生の現状(その2)

試行錯誤していたので、ずいぶん間が空いちゃったけど、とりあえず「その2」。

前回紹介したように、MakeMKVを使えば Linux 上でも AACSで暗号化されたBDディスクのデータをmkv形式に変換できるものの、 やはり一々mkv形式に変換しなければいけないというのは面倒なので、 もう少しなんとかならないかと、libbluray + libaacs を試してみた。

libbluraylibaacsは VLCを公開しているVideoLanプロジェクトが開発しているライブラリで、 libblurayがBDディスクの構造解析、libaacsがAACS暗号を解読する機能を担っているらしい。

両者とも開発版のコードはgitで提供されているようなので、 まずはlibblurayのコードをgit cloneで持ってきてビルドしようとしたところ、 "Apache Ant"というJava用のビルドシステムが無い、旨のエラーになる。

じゃあ、"Apache Ant"を入れるか、、と試したら、Javaの開発環境が必要、ということで、 結局 OpenJDK が公開しているJava開発環境を入れた上でApache Antをインストールし、 ようやくlibblurayがビルドできた。

libblurayのコード自体はC++みたいなのに、なんでJavaな開発環境が必要なんだろ、、と調べたところ、 どうやらBDには対話的なメニューやゲーム等を提供する機能があって、 その部分がJavaになっているので、BD対応用のライブラリであるlibblurayもJavaに対応する必要があるらしい。

libaacsはKEYDB.cfgというキーファイルが必要ということで、それもダウンロードしておく。 KEYDB.cfgはprocessing keyとHost certificate、disc VUK keyという3種のデータが並んだ、 かなり大きなファイル。詳しくは調べてないけど、processing keyとHost certificateが公開 鍵と秘密鍵みたいなものなもので、これらがきちんと機能すれば全てのBD discを読めるものの、 漏洩した鍵は定期的に無効にされるため、disc VUK keyというBD discごとのIDも用意しておく 必要があるらしい。

libblurayに付属の bd_info というコマンドで、BDの情報を確認してみるとこんな感じ。

$ bd_info /dev/sr1
Using libbluray version 1.0.2
aacs.c:546: Error calculating media key. Missing right processing key ?
Volume Identifier   : GUP_TV_AND_OVA_51CH_BDBOX_D1
BluRay detected     : yes
First Play supported: yes
Top menu supported  : yes
HDMV titles         : 6
BD-J titles         : 0
UNSUPPORTED titles  : 0

BD-J detected       : no

AACS detected       : yes
libaacs detected    : yes
Disc ID             : 3CA717B91B1FEB9EB36AF86FB92730B8EDDDA653
AACS MKB version    : 65
AACS handled        : yes

BD+ detected        : no

Application info:
  initial mode preference : 2D
  3D content exists       : No
  video format            : ignored (0x0)
  frame rate              : ignored (0x0)
  provider data           : '                                '

Disc library metadata:
Metadata file       : bdmt_jpn.xml
Language            : jpn
Disc name           : ガールズ&パンツァー TV&OVA 5.1ch Blu-ray Disc BOX 1
Alternative         : <undefined>
Disc #              : <undefined>/<undefined>
TOC count           : 0
Thumbnail count     : 2
	./GuP_51ch_BOX_META_S.jpg 	416x240
	./GuP_51ch_BOX_META_L.jpg 	640x360

一応、内容は認識できている感じ。

こうして用意したlibblurayとlibaacsを組み込むように、 vlc-3.0.3とmpv-0.29.1をビルドしてみた。

試行錯誤の過程は省いて結論だけ述べると、 vlcでは[メディア]=>[ディスク]=>[ブルーレイ]/[ディスクデバイス]を指定してやると、 しばらくBDを読み込んでなにやらやっているものの、 タイトルロゴしか表示できなかった。

vlc_BD.jpg

[ツール]=>[メッセージ]で出力レベルを「デバッグ」にしたら、こんな感じのログが取れた。

main debug: incoming request - stopping current input
main debug: removing module "libbluray"
libbluray info: Closing overlays.
main debug: dead input
main debug: processing request item: bluray:///dev/sr1, node: プレイリスト, skip: 0
main debug: rebuilding array of current - root プレイリスト
main debug: rebuild done - 2 items, index 1
main debug: starting playback of new item
main debug: resyncing on bluray:///dev/sr1
main debug: bluray:///dev/sr1 is at 1
main debug: creating new input thread
main debug: Creating an input for 'bluray:///dev/sr1'
main debug: requesting art for new input thread
main debug: looking for meta fetcher module matching "any": 1 candidates
lua debug: Trying Lua scripts in /home/kojima/.local/share/vlc/lua/meta/fetcher
lua debug: Trying Lua scripts in /usr/lib/vlc/lua/meta/fetcher
lua debug: Trying Lua scripts in /usr/share/vlc/lua/meta/fetcher
main debug: no meta fetcher modules matched
main debug: looking for art finder module matching "any": 2 candidates
lua debug: Trying Lua scripts in /home/kojima/.local/share/vlc/lua/meta/art
lua debug: Trying Lua scripts in /usr/lib/vlc/lua/meta/art
lua debug: Trying Lua playlist script /usr/lib/vlc/lua/meta/art/00_musicbrainz.luac
lua debug: skipping script (unmatched scope) /usr/lib/vlc/lua/meta/art/00_musicbrainz.luac
lua debug: Trying Lua playlist script /usr/lib/vlc/lua/meta/art/01_googleimage.luac
lua debug: skipping script (unmatched scope) /usr/lib/vlc/lua/meta/art/01_googleimage.luac
lua debug: Trying Lua playlist script /usr/lib/vlc/lua/meta/art/02_frenchtv.luac
lua debug: skipping script (unmatched scope) /usr/lib/vlc/lua/meta/art/02_frenchtv.luac
lua debug: Trying Lua playlist script /usr/lib/vlc/lua/meta/art/03_lastfm.luac
lua debug: skipping script (unmatched scope) /usr/lib/vlc/lua/meta/art/03_lastfm.luac
lua debug: Trying Lua scripts in /usr/share/vlc/lua/meta/art
main debug: no art finder modules matched
main debug: looking for meta fetcher module matching "any": 1 candidates
lua debug: Trying Lua scripts in /home/kojima/.local/share/vlc/lua/meta/fetcher
lua debug: Trying Lua scripts in /usr/lib/vlc/lua/meta/fetcher
lua debug: Trying Lua scripts in /usr/share/vlc/lua/meta/fetcher
main debug: no meta fetcher modules matched
main debug: looking for art finder module matching "any": 2 candidates
lua debug: Trying Lua scripts in /home/kojima/.local/share/vlc/lua/meta/art
lua debug: Trying Lua scripts in /usr/lib/vlc/lua/meta/art
lua debug: Trying Lua playlist script /usr/lib/vlc/lua/meta/art/00_musicbrainz.luac
main debug: using timeshift granularity of 50 MiB
main debug: using default timeshift path
main debug: `bluray:///dev/sr1' gives access `bluray' demux `any' path `/dev/sr1'
main debug: creating demux: access='bluray' demux='any' location='/dev/sr1' file='/dev/sr1'
main debug: looking for access_demux module matching "bluray": 15 candidates
lua debug: Trying Lua playlist script /usr/lib/vlc/lua/meta/art/01_googleimage.luac
lua debug: Trying Lua playlist script /usr/lib/vlc/lua/meta/art/02_frenchtv.luac
lua debug: Trying Lua playlist script /usr/lib/vlc/lua/meta/art/03_lastfm.luac
lua debug: Trying Lua scripts in /usr/share/vlc/lua/meta/art
main debug: no art finder modules matched
qt debug: IM: Deleting the input
qt debug: IM: Setting an input
qt debug: IM: Deleting the input
qt debug: IM: Setting an input
libbluray info: First play: 1, Top menu: 1 HDMV Titles: 6, BD-J Titles: 0, Other: 0
libbluray debug: Disc is using AACS
libbluray debug: Selecting Title 0
main debug: using access_demux module "libbluray"
main debug: creating demux: access='' demux='ts' location='' file='(null)'
main debug: looking for demux module matching "ts": 48 candidates
main debug: no demux modules matched
main debug: attempt to destroy nonexistent variable "title 0"
main debug: attempt to destroy nonexistent variable "title 1"
main debug: attempt to destroy nonexistent variable "title 2"
main debug: attempt to destroy nonexistent variable "title 3"
main debug: attempt to destroy nonexistent variable "title 4"
main debug: attempt to destroy nonexistent variable "title 5"
main debug: looking for meta reader module matching "any": 2 candidates
lua debug: Trying Lua scripts in /home/kojima/.local/share/vlc/lua/meta/reader
lua debug: Trying Lua scripts in /usr/lib/vlc/lua/meta/reader
lua debug: Trying Lua playlist script /usr/lib/vlc/lua/meta/reader/filename.luac
lua debug: Trying Lua scripts in /usr/share/vlc/lua/meta/reader
main debug: no meta reader modules matched
main debug: `bluray:///dev/sr1' successfully opened
main debug: creating demux: access='' demux='ts' location='' file='(null)'
main debug: looking for demux module matching "ts": 48 candidates
main debug: no demux modules matched

イマイチこのログをどう読むのかは分かってないのだけれど、 libblurayが対象のBDをAACS使用と認識し、 AACSをデコードするためのdemuxを探したものの "no demux modules matched"で再生できなかった、 って感じかな。

一方、mpvとそれをバックエンドにしているsmplayerでは、 メニューの[ディスクを開く]からでは再生できなかったものの、 起動時の引数として直接 "bd:////dev/sr1" みたいな URL を指定してやれば再生できた。

smplayer_BD.jpg

URLの指定方法は bd://[track_no]//[device_name] みたいな感じで、 再生したいトラック番号が分かっていれば直接それを指定できるし、 track_noを指定しなければディスクの頭から再生するらしい。 手元ではBDドライブは/dev/sr1にしているので、 最初から再生する場合は "smplayer bd:////dev/sr1" という形になる模様。

UIの無いmpvでは確認できなかったけど、smplayerならば字幕の有無とか、 オーディオコメンタリーなトラックの選択もできたので、 メニューが無いことを除けば、とりあえず再生はできてる感じ。

smplayer_BD2.jpg

「やったー、OSSなソフトだけでBDが再生できた!!」と喜んだのも束の間、 大きな落とし穴が待ち構えていたのであった。。(続く)



添付ファイル: filevlc_BD.jpg 201件 [詳細] filesmplayer_BD.jpg 222件 [詳細] filesmplayer_BD2.jpg 208件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:43