テレビを捨ててはや16年。
芸能界のブームがわからず会話についていけない以外は全く問題が無いわけですが、どうしてもディスカバリー・チャンネルだけは観たくなりました。
我が家というか、私のデスクには既にディスプレイが2つあるのでこれ以上ディスプレイを増やしたくない。
というわけで、Ubuntuのデスクトップにビデオキャプチャーして取り込むことにしました。世界のどこかに同じことを考えている人がいるかもしれないのでメモとして残しておきます。
右上がJ:COMからビデオキャプチャーで取り込んだ画面。うちはマルチディスプレイなのでスクリーンショットがこんな感じになる。
ハード構成
本当はJ:COM TV側のモデムとPCを直接つなぎたかったのですが、うちのPCとディスプレイにはHDMIの入力端子が無いので出来ませんでした。
仕方ないので一旦ビデオキャプチャーカード経由でUSBに変換してPCにつなぎます。
ハード構成はこんな感じです。
Ubuntu22.04でも動作確認済み。 Ubuntu21.10以降ではVLCが--input-slaveを正しく認識できなくなったりCannonicalがライブラリをカーネルから削除した結果、音声がでなくなってしまいました。今回はその対策も含めて記載しています。
引っ越ししたらJ:COMのモデムがWA-7000RNになりました。この手順で問題なく動作できることを確認済みです。
J:COMが設置してくれるのは2種類のモデム
J:COMの人は壁のTV端子に2種類のモデムを繋いでくれます。
- J:COM.NETのモデム(HG100R)
ネット回線です。うちは40Mbps。プロバイダ契約も込みです。 - J:COM TVのモデム(WA-7600)
所謂CATVのサービスです。
元々は261Mbps出るはず(某)のSoftbank Airを使っていましたが2.5Mbpsしか出なかったのでJ:COM.NETにしました。とても快適です。
ビデオキャプチャーカードの選定は慎重に
今回選んだビデオキャプチャーカードはAverMedia社のAVT-C878 PLUSです。公式にはWindowsとMACしか対応していないことになっていますがUbuntuでも使えます。
ポイントは以下の2点。
- UVCに対応している
これに対応していればビデオカメラとして映像を取り込めます。ドライバも不要。 - USB 2.0を使える
USB 3.0は相性の問題が依然として残っているため何か問題があった場合に詰みます。
HDCP解除という問題
J:COMの映像はHDCPというコピーコントロールが有効になっています。TVにつなぐ場合は問題ありませんが、ビデオキャプチャーに接続するとHDCPにブロックされて映像が見れません。
実際に接続してみると「Copy Protected Content.」というメッセージが表示されて何も操作できません。
そこで、ビデオキャプチャー側でHDCPを無視させます。
AVT-C878 PLUSの場合はAVer Mediaさんが提供しているRECentralというソフトを使ってHDCPを無効にします。(Linux版は無いのでWindows PCかMacかWinddowsの仮想マシンが必要です)
画面が緑一色問題
J:COM TVの映像を見ようとしたら緑一色になってしまう場合があります。
どうやらモデム側の問題のようです。
モデム側のリセットボタンを推してみましょう。
「起動中」の文字が表示されれば映像自体は受信できているので暫くそのまま待ちます。
ソフト構成
ソフト構成と言うと少し違いますが、ざっくりしたOSの構成は以下のとおりです。
UVCとV4L2とPulseAudioが大活躍
前述の通りUVCに対応した機器であれば映像と音声をUSBのWebカメラとして入力できます。
映像はV4L2(Video for Linux Two)経由、音声はALSA-PulseAudio経由でVLCに取り込みます。
ALSAは実際に音声の入出力を行います。
ただ、ALSAはハード依存が強いうえ1つのアプリケーションがスピーカーを使っていると他のアプリケーションは音を出せません。そこで、ALSAのハードの違いを吸収してくれるPulseAudioという上位のドライバを使用するのが一般的です。
未だにALSAを使う"お行儀の悪い"アプリケーションも存在しますが、PulseAudioは自動でALSAをエミュレーションしてくれるます。事実上、全てのアプリケーションはAulseAudio経由でALSAを利用することになります。
映像と音声をVLCに取り込むコマンドは以下のとおりです
$ vlc alsa://plughw:{カード番号},{デバイス番号} \ --input-slave=v4l2:///dev/video{ビデオ番号}
GUIの場合はVLCのビデオカメラ入力で前述の/dev/videoXとhwX,0を選択することでJ:COM TVの表示ができるようになります。
「メディア」→「ビデオキャプチャーデバイスを開く」で設定画面を開き、キャプチャーモードで「Video camera」、ビデオデバイス名で/dev/videoX、オーディオデバイス名にhwX,0を選択して再生します。
デバイス情報の確認方法
ALSAのカード番号とデバイス番号はarecordで確認できます。
今回はカード番号は2番、デバイス番号は0であることがわかります。
$ LANG=C $ arecord -l | grep card card 0: U0x46d0x825 [USB Device 0x46d:0x825], device 0: USB Audio [USB Audio] card 1: USB [Realtek Audio USB], device 0: USB Audio [USB Audio] card 2: Plus [Live Gamer Portable 2 Plus], device 0: USB Audio [USB Audio] card 3: PCH [HDA Intel PCH], device 0: ALC887-VD Analog [ALC887-VD Analog] card 3: PCH [HDA Intel PCH], device 2: ALC887-VD Alt Analog [ALC887-VD Alt Analog]
ビデオデバイスはv4l2-ctlで確認できます。
今回は/dev/video2か/dev/video3であることがわかります。まずは早い番号の/dev/video2と想定してテストし、ダメなら/dev/video3を使ってみます。
$ v4l2-ctl --list-device
UVC Camera (046d:0825) (usb-0000:00:14.0-4):
/dev/video0
/dev/video1
Live Gamer Portable 2 Plus (usb-0000:00:14.0-5):
/dev/video2
/dev/video3
コマンドでVLCを起動する場合は以下のとおりです
$ vlc alsa://plughw:2,0 \ --input-slave=v4l2:///dev/video2
映像や音が出ない場合
うまく映像や音が出ない場合はffmpegで動作確認できます。ffmpegは-fでフォーマット、-iで入力ストリームをセットで指定します
$ ffmpeg -f alsa -i pulse \ ←音声の入力ストリーム -f v4l2 -i /dev/video2 \ ←映像の入力ストリーム out.mp4
出力されたout.mp4を再生してみて音声と映像が出力されているか確認します。音声が出力されていない場合はalsaやpulseに問題があり、映像が出力されていない場合は/dev/videoXが間違っている可能性があります。
使ってみた感想
USB2.0で十分
60fpsで再生していますがコマ飛びなどの問題は全く発生していません。
USB3.0の方が速いと言う話を聞いたことが有りますが体感速度の差が出るほどでは無いということでしょうか。
映像もかなり綺麗に見れています。
J:COM.NETの速度は...まあこんなもんか
仕様上は320Mbpsらしいですが、スピードテストの結果は60〜100Mbps。
まあSoftbank Airの20倍になったのでかなり快適になりました。
J:COM観てたら突然
浦和レッズの番組(Reds! Get!Goal!!)が始まったw
ユースから目をつけてるおばちゃんとか最強すぎ。
次は録画用のディスクを追加
気が向いたらやっとく。