🤷

Raspberry Pi はなぜ HDMI端子 から映像を取り込めないのか

2021/07/19に公開

qrunchが消滅してしまったのでこちらに再度書かせていただきました次第です
コンテンツは結局取り出せなかったので記憶を元にした書き直で劣化してるのですが、その旨お詫び致します

初めに

お客様から GoPro の映像を HDMI 経由で RPi に保存したいというお話を伺い、速攻でそんなの無理に決まってるじゃないですかと返答してしまいご不況を買ってしまいました

技術的に無理に決まってるじゃん、との思いで口から出てしまった言葉だったのですが、先様はこの単金で、と取られてしまって憤慨されたご様子で、申し訳ないことをしてしまいました

慌てて技術的な背景をご説明させていただいたのがこんな内容です

HDMI は双方向通信じゃない

接続した機器間でリモコン信号を共有する CEC みたいな機能もあるのですが、メインの映像コンテンツの伝送についていえば HDMI は双方向通信ではありません

ケーブルの形状も、port の形状も見るからに対称なので通信も対称だと無意識に思ってしまうのですが、その先、port より先のデバイス上で実装されている機能が規格上、映像の送信元(規格で source と呼びます)と送信先(同様に sinkと呼びます)で別れています

具体的に言うと、録画機みたいなのが source で、ディスプレイとかが sink です

なぜ source と sink で別れているのか

映像コンテンツを保護する責任の重さが異なるからです

HDMI はそもそも価値のあるプレミアムコンテンツコピープロテクションリンクプロテクション保護しつつ伝送する技術です

コピープロテクションは暗号化でコピーを防ぐ技術です
リンクプロテクションは接続相手の素性を調べて、過去にやらかしてブラックリストに乗っているデバイスとは接続しない事で守ります

source は接続前に sink の素性を見て、この相手ならと信じて映像を送信するので、sink は受け取った映像が流出するような事は絶対にないように守る義務があります。もし粗相が発覚したらブラックリストに載せられた上にヤワなベンダーだったら一瞬で吹っ飛ぶほどの罰金を払う旨の契約書にサインしないと実装できません

サーバの使いもしない port を開けておくのが懸命でないのと同じで、使いもしない sink なんか実装しても怖いだけなので実装しません
使う必要があって実装する場合でも神経を使い、そんなプロジェクトの PM なんかやってようものなら血尿がでたりしました。実装者には年に何回かの相互接続大会への参加が義務付けられるのですが、そこでなんとなく怪しい実装が公になってしまうと速攻でアソシエーションから警告のお手紙が届くし、まったく怖いのなんの

例えば、Sony のカーナビで HDMI がついてるのがありましたが、あれもナビゲーションの映像を外部のディスプレイに表示するための source がついていただけで、せっかくディスプレイを備えたデバイスであるにもかかわらず、sink は実装されていないので外部ディスプレイとして使うことはできませんでした

Raspberry Pi の HDMI は source

翻って RPi ですが、デスクトップイメージをディスプレイに表示することが目的なので実装している HDMI の機能は source のみです

sink は実装されていないので、RPi で映像を取り込むことはできません

参考文系

このあたりの話を規格書以外で見たことがありません
コンテンツ保護ってエンドユーザーにとってはやりたい事が制限されるだけのネガティブフィーチャーだったりするのであまり説明するモチベーションも働かないからなのかもしれません

Discussion