[[diary/Kojima]]

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

前回紹介したように、smplayer/mpvならば bd:////dev/sr1 というURL指定で
Blurayメディアが再生できるようになったはずなのに、
日を改めて再度試すと「MPlayer/mpvは予期せず終了しました。終了コード:2」という
メッセージでエラー終了してしまう。

#ref("smplayer_ng.jpg")

エラーログはこんな感じ。

 /usr/bin/mpv --no-config --no-quiet --terminal --no-msg-color
    --input-file=/dev/stdin --msg-level=ffmpeg/demuxer=error --no-fs
    --hwdec=no --sub-auto=fuzzy --no-input-default-bindings
    --input-vo-keyboard=no --no-input-cursor --cursor-autohide=no
    --no-keepaspect --wid=62914577 --monitorpixelaspect=1 --osd-level=1
    --osd-scale=1 --osd-bar-align-y=0.6 --sub-ass --embeddedfonts
    --sub-ass-line-spacing=0 --sub-scale=1 --sub-font=Arial
    --sub-color=#ffffffff --sub-shadow-color=#ff000000
    --sub-border-color=#ff000000 --sub-border-size=0.75 --sub-shadow-offset=2.5
    --sub-font-size=50 --sub-bold=no --sub-italic=no --sub-codepage=ISO-8859-1
    --vid=1 --aid=2 --sid=1 --secondary-sid=1 --sub-pos=100 --volume=86
    --cache=auto --start=668 --screenshot-template=cap_%F_%p_%02n
    --screenshot-format=jpg
    --screenshot-directory=/home/kojima/画像/smplayer_screenshots
    --audio-pitch-correction=yes --volume-max=110
    --term-playing-msg=MPV_VERSION=${=mpv-version:}
 INFO_VIDEO_WIDTH=${=width}
 INFO_VIDEO_HEIGHT=${=height}
 INFO_VIDEO_ASPECT=${=video-aspect}
 INFO_VIDEO_FPS=${=container-fps:${=fps}}
 INFO_VIDEO_FORMAT=${=video-format}
 INFO_VIDEO_CODEC=${=video-codec}
 INFO_AUDIO_FORMAT=${=audio-codec-name}
 INFO_AUDIO_CODEC=${=audio-codec}
 INFO_AUDIO_RATE=${=audio-params/samplerate}
 INFO_AUDIO_NCH=${=audio-params/channel-count}
 INFO_LENGTH=${=duration:${=length}}
 INFO_DEMUXER=${=current-demuxer:${=demuxer}}
 INFO_SEEKABLE=${=seekable}
 INFO_TITLES=${=disc-titles}
 INFO_CHAPTERS=${=chapters}
 INFO_TRACKS_COUNT=${=track-list/count}
 METADATA_TITLE=${metadata/by-key/title:}
 METADATA_ARTIST=${metadata/by-key/artist:}
 METADATA_ALBUM=${metadata/by-key/album:}
 METADATA_GENRE=${metadata/by-key/genre:}
 METADATA_DATE=${metadata/by-key/date:}
 METADATA_TRACK=${metadata/by-key/track:}
 METADATA_COPYRIGHT=${metadata/by-key/copyright:}
 INFO_MEDIA_TITLE=${=media-title:}
 INFO_STREAM_PATH=${stream-path}
  --audio-client-name=SMPlayer --term-status-msg=STATUS: ${=time-pos} / ${=duration:${=length:0}}
  P: ${=pause} B: ${=paused-for-cache} I: ${=core-idle}
  VB: ${=video-bitrate:0} AB: ${=audio-bitrate:0} bd:////dev/sr1
 Playing: bd:////dev/sr1
 aacs.c:546: Error calculating media key. Missing right processing key ?
 [bd] AACS error: no matching processing key
 No protocol handler found to open URL bd:////dev/sr1
 The protocol is either unsupported, or was disabled at compile-time.
 Exiting... (Errors when loading file)

「あれれ、、昨日まではちゃんと再生できてたのに何で??」と首をひねりつつ、
ライブラリや環境変数、PATH等を確認するも異常なし。

「じゃぁ、makemkvだと?」と、modprobe sg してから makemkv を実行すると、
makemkv からは問題なくディスクを読み込める。

「えー、なんで??」と首を傾げつつ、smplayerで試すと、
今度はちゃんとBDを読み込んで、前回同様に再生できるようになった。

再生できるようになったログ(コンソールに出力される)はこんな感じで、
"aacs.c:546: Error calculating media key. Missing right processing key ?"
というエラーは再生できなかった場合と同様に出力されているものの、
その後は"[bd] List of available titles:"、
"[bd] idx:   0 duration: 00:00:00 (playlist: 0001"、
という形でメディアを読み出せている。

 Debug: SMPlayer::processArgs: arguments: 2
 Debug: SMPlayer::processArgs: 0 = smplayer
 Debug: SMPlayer::processArgs: 1 = bd:////dev/sr1
 Debug: SMPlayer::processArgs: files_to_play: count: 1
 Debug: SMPlayer::processArgs: files_to_play[0]: 'bd:////dev/sr1'
 Debug: SMPlayer::gui: changed working directory to app path
 Debug: SMPlayer::gui: current directory: /usr/bin
 Debug: Screen::setAutoHideCursor: 0
 Debug: Screen::setAutoHideCursor: 0
 Debug: Images::setTheme: "H2O" is an internal theme
 Debug: Images::setThemesPath: ""
 Debug: MediaSettings::reset
 Debug: Core::changeFileSettingsMethod: hash
 Debug: PlayerID::Player: player_bin: "/usr/bin/mpv" filename: "mpv"
 ...skipping...
 Debug: BaseGui::checkStayOnTop
  Debug: MPVProcess::parseLine: "aacs.c:546: Error calculating media key. Missing right processing key ?"
 Debug: BaseGuiPlus::updateShortcutsContext
 Debug: BaseGui::checkReminder
 Debug: MPVProcess::parseLine: "[bd] List of available titles:"
 Debug: MPVProcess::parseLine: "[bd] idx:   0 duration: 00:00:00 (playlist: 00010.mpls)"
 Debug: MPVProcess::parseLine: "[bd] idx:   1 duration: 01:36:59 (playlist: 00001.mpls)"
 Debug: MPVProcess::parseLine: "[bd] idx:   2 duration: 00:00:00 (playlist: 00011.mpls)"
 ....

あれこれ試してみたところ、どうやらシステムを再起動してしまうと、
一度makemkvを実行しない限り、smplayerでBDが再生できる状態にはならないらしい。

一方、一度smplayerで再生できるようになると、
別のディスクに取り替えても問題なく再生できるし、
suspend/resumeしても、その状態は変わらない。

これらを合わせ考えると、
どうやら makemkv はBDメディアを読み出すだけではなく、
ドライブ(のfirmware?)に対しても何らかの処理を施して、
AACSの復号化を容易にしているような感じ。
一度その処理を施されたドライブは、
再起動して初期化されるまではその状態を維持し続けるのだろう。

ということで、LinuxでBDメディアを再生するには、smplayer/mpvを使う場合でも、
makemkvの手を借りる必要がある、というのが現状での結論。

「その1」でも触れたように、
makemkvはコアの部分は非公開なsharewareなものの、
GUIはソースコードを公開しているし、
コアの部分のAPIもlibmmbd.so経由で外部から使えるらしいから、
ずいぶん良心的なソフトだと感じているので、
試用期間を延長するためのコードを毎月入力するよりも、
ちゃんとレジストレーション(6256円+消費税500円 らしい)して、
Linux版の開発を支援した方がいいかな、、と思っているところ。

まぁ、厳密に言うと、正当に入手したBDメディアでも、
AACSを解除してMKV形式に変換するのは、
日本の今の著作権法では違法になるので、

 $ sudo modprobe sg
 $ makemkvcon info dev:/dev/sr1

でBDドライブを初期化して、後はsmplayerあたりで直接試聴する、
でBDドライブを初期化して、後はsmplayerあたりで直接視聴する、
というのが精神衛生上もよろしかろうということで。
- もっとも、このあたりはAACSの仕組み上、BDメディアやドライブ(のfirmware)が絡んでくるので、お使いの環境によって状況は変わるだろうことは為念。 -- [[kojima]] &new{2019-02-17 (日) 15:47:07};

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS