Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

Windows 11でのBluetoothパケットキャプチャ - Windows 11で本当にAACは機能している?


Windows 11はBluetoothコーデックとしてAACをサポートしており、AAC対応のイヤホンならば、AACで接続できる、という話を聞いた。しかしMicrosoftサイトには、そのような情報はどこにも掲載されていない。

もし本当に対応しているのであれば、実際にAAC接続しているかを確かめたら良い。先日と同じくBluetoothパケットキャプチャ*1で、実際にAACが機能しているのかを確かめてみた。

結論から言うと、実際にAAC接続でき、Windows 11がAACに対応していることを確認できた。今回の投稿では、それを明らかにする方法、その作業手順を紹介する。
と言っても、やっていることは前回と何も変わりないのだが。

前提

この投稿での作業は、次の環境で検証した。

version
Windows 11 Pro 21H2 22000.795
Wireshark*2 3.6.6
Microsoft Bluetooth Test Platform (BTP)*3 1.12.2

BTPで提供されるツールのうち、特にBluetooth Virtual Sniffer (btvs.exe)*4を使用する。デフォルトのインストール・パスに基づくと、次の場所に格納されている。

C:\BTP\v1.12.2\x86\btvs.exe

検証用のイヤホンとして、SONY WI-SP500*5を用いた。公式にサポートしているコーデックはSBC、AACなのだが、実際に機能するのかは置いて、aptXもサポートしていることを、後述のパケットキャプチャは示している。

注意事項

作業に着手する前に、出来れば一切のBluetooth機器の接続を解除しておくと良い。Wiresharkが目的のイヤホン以外のパケットをキャプチャしないようにするためだ。

次にソフトウェア起動とイヤホン接続の順序だ。具体的には、以下の手順を経る。

  1. btvs.exeを起動→自動的にWiresharkが起動
  2. Wiresharkがパケット・キャプチャを開始
  3. イヤホンを接続

イヤホン接続開始のネゴシエーション処理のパケットを検証する必要がある。そのため順番は、必ずソフトウェアが先、イヤホンが後だ。

さらに必ずイヤホン側から接続要求すること。Windows側からペアリング済みのイヤホンを指定して接続要求するのではない。どちら側から開始するかによって、ネゴシエーション手順が変化するのだ。

ネゴシエーションを会話に置き換えて説明すると、次のようになる。

子機 イヤホン
親機 Windows

イヤホン側から開始
子機「繋がせてください」
親機「どのコーデックが使えますか?」
子機「〇〇と××と□□です」
親機「〇〇でどうぞ」

Windows側から開始
親機「繋ぎますか?」
子機「〇〇でお願いします」
親機「〇〇でどうぞ」

Windows側から開始すると、実際に使用するコーデックしか特定できない。利用可能な全てのコーデックを特定するには、イヤホン側から開始しなければならない。

最後にもう一つ。コーデックが利用可能だからと言って、必ずしもユーザーが希望するコーデックで接続できるとは限らない。例えば、イヤホンがaptXに対応していると宣言しても、SBCで接続することはあるのだ。この点も合わせて、実例で確認してみよう。

実作業

”C:\BTP\v1.12.2\x86\btvs.exe”を実行すると、次のWindowが表示される。「Full Packet Logging」を選択する。
同時にWiresharkも、自動的にパケット・キャプチャ開始状態で起動する。この状態でイヤホンをBluetooth接続すると、ネゴシエーション以降のパケットがキャプチャされ続ける。

注目したいのは、次に該当する行だ。

Column
Protocol AVDTP
Info Command - GetAllCapabilities ~
Info ResponseAccept - GetCapabilities ~
Info Command - SetConfiguration ~

"Command - GetAllCapabilities"というイヤホンからPCへの問いかけに対し、”ResponseAccept~”でPCが対応しているコーデックを回答する。一連の確認を終えると、イヤホンからPCへ、"Command - SetConfiguration"で接続に利用するコーデックが指定される。
今回のサンプルでは、先日の投稿*6とは、Command、ResponseAcceptの立場が逆転していることに注意してほしい。

次の例では、

に対応していると宣言し、接続にAACが採用されたことを表している。

検証に使用しているSONY WI-SP500は、公式にはaptXに対応していないことになっているのだが、ではネゴシエーションでは問い合わせに対してaptXの回答を得ている。もしかするとXperiaシリーズだけはaptXで接続できるような仕掛けが施されているのかもしれない。

この状態で動画や音声を再生すると、RTP (Realtime Transport Protocol)のパケットをキャプチャし続ける。この中身を確認すると、実際にコーデックとしてAACが機能しているのが分かる。


余談

Windows 11がAACに対応しているという話は本当だった。しかし、なぜMicrosoftが公式にサポートしていることを発表しないのかは謎だ。
Windows 10については、以下のようにaptXをサポートしていることに触れている。しかしWindows 11については、AACをサポートしていることに触れていない以前に、同様の資料が存在していない。

Bluetooth audio enhancements (Wideband speech, aptX®) - High Definition sound while limiting Lip Sync and latency issues.

docs.microsoft.com

参照

habr.com