web-dev-qa-db-ja.com

A2DPを使用してBluetooth経由でオーディオを再生するときの0.5秒の遅延を取り除く

タイトルで説明したように、A2DPでBluetooth経由でオーディオを再生すると、0.5秒の遅延が発生します。
これにより、音声がビデオと同期されないため、映画を見ることができなくなります。

遅延がBluetooth標準、A2PDプロトコル、Ubuntu 12.04でのA2DP実装、またはBelkin Z73 Bluetoothレシーバーによるものかどうかはわかりません。

とにかく、これは通常の遅れですか?顕著な遅延なしにBluetooth経由でオーディオを再生する方法はありますか?

48
brillout

いいえ、これは正常ではありませんが、時々Altec Lansing iMT525 Bluetoothスピーカーで同様の問題が発生しました。 Sriの答えに概念的に似た何かが私にとってほとんど常に機能し、接続ごとに一度だけそれをする必要があります。

PulseAudioを再初期化するためのBluetoothプロファイルの自動切り替え

犯人を探しているなら、まずUbuntuのサウンドシステム、PulseAudio、次にBluetoothレシーバーを見てみましょう。これを試して:

  • まず、Bluetoothデバイスを削除して再度ペアリングします。

  • 次に、以下をコピーして、ホームディレクトリの.shファイルにコピーし、/home/brillout/pabluezswitch.shと言います。

    #!/ bin/bash
    BLUEZCARD = `pactl list cards short | egrep -o bluez。* [[:space:]] ` pactl set-card-profile $ BLUEZCARD a2dp pactl set-card-profile $ BLUEZCARD hsp pactl set-カードプロファイル$ BLUEZCARD a2dp
  • ターミナルを開いてchmod +x ~/pabluezswitch.shと入力して、ファイルを実行可能にします

  • 設定...キーボード...ショートカットに移動して、カスタムショートカットを作成します。 /home/brillout/pabluezswitch.sh(パスの適切なユーザー名に置き換えてください!)のようなコマンドで、好きな名前を付けてください。 適用をクリックしてから、右側の無効をクリックして、スクリプトを実行するためのキーボードショートカットを設定します。

これは、ad2p -> hsp -> a2dpからプロファイルを切り替えることにより、PulseAudioシステムがヘッドセット/スピーカーに送信されるオーディオを強制的に再同期させ、遅延を取り除くことを願っています。


接続して遅延に気付くたびに、上記で選択したキーボードショートカットを押して遅延の修正を試みてください。うまくいけばうまくいきます!

37
ish
  • Pavucontrolをインストールします:Sudo apt install pavucontrol
  • メニューからpavucontrolを実行します
  • 出力デバイスに移動
  • Bluetoothデバイスに移動
  • 詳細に移動
  • そこで、レイテンシオフセットをミリ秒単位の値(プラスまたはマイナス)に設定できます。値を確認するには、250.00マイルなどの任意の値で開始する必要があります。
  • YouTubeから「オーディオ同期テスト」を再生し、再生速度を0.25に設定して(低速にします)、そこから値が正しいか、増減する必要があるかどうかに気づくことができます。
20
Roelf Renkema

使用するプレーヤーに関係なく、同様の問題が時々発生します。私のものは、MSI CR400ラップトップとUbuntu 11.10を搭載したNokia BH-503 Bluetoothステレオヘッドフォンです。私はたまたまあなたが試すことができる回避策に出くわしました。

  • ビデオの再生を開始します。
  • [サウンド設定]> [ハードウェア]に移動します。
  • Bluetoothデバイスを選択します。
  • 次に、[選択したデバイスの設定]ドロップダウンで、テレフォニーデュプレックス(HSP/HFP)プロファイルに切り替えてから、高忠実度再生(A2DP)に切り替えます。
10
Sri

ここの一番上の返信は機能しますが、すべてのBluetoothオーディオデバイスに対応しているわけではありません。一部のデバイスのプロファイル名は、ポスターがBluetoothスピーカーで持っているものとは異なります。たとえば、元々その人によって投稿された次のコードには、明らかにa2dpおよびhspという名前のプロファイルがあります。たとえば、これらはどちらもLGトーンでは使用できませんが、Sonyヘッドセットなどの他のデバイスでは使用できます。

#!/bin/bash

BLUEZCARD=`pactl list cards short | egrep -o bluez.*[[:space:]]`
pactl set-card-profile $BLUEZCARD a2dp
pactl set-card-profile $BLUEZCARD hsp
pactl set-card-profile $BLUEZCARD a2dp

そのコードは表示されるほとんどのBluetoothデバイスで機能しますが、a2dpプロファイルまたはhspプロファイルを持たないデバイスでこれを正しく機能させるには、次のように入力します。

pactl list | grep -Pzo '.*bluez_card(.*\n)*'

これにより、bluetoothデバイスが見つかった後のすべてが返されます。たとえば、LG Tone Ultraヘッドセットでは、次のようになります。

Name: bluez_card.B8_AD_3E_**_**_**
    Driver: module-bluez5-device.c
    Owner Module: 36
    Properties:
        device.description = "LG HBS810"
        device.string = "B8:AD:3E:**:**:**"
        device.api = "bluez"
        device.class = "sound"
        device.bus = "bluetooth"
        device.form_factor = "headset"
        bluez.path = "/org/bluez/hci0/dev_B8_AD_3E_**_**_**"
        bluez.class = "0x240404"
        bluez.alias = "LG HBS810"
        device.icon_name = "audio-headset-bluetooth"
        device.intended_roles = "phone"
    Profiles:
        a2dp_sink: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 10, available: yes)
        headset_head_unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 20, available: yes)
        off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
    Active Profile: a2dp_sink
    Ports:
        headset-output: Headset (priority: 0, latency offset: 0 usec)
            Part of profile(s): a2dp_sink, headset_head_unit
        headset-input: Headset (priority: 0, latency offset: 0 usec)
            Part of profile(s): headset_head_unit

profilesセクションに興味があります。このセクションには、a2dp_sinkheadset_head_unit、およびoffの3つのプロファイルがあります。必要な2つのプロファイル(A2DPシンク)と(HSP/HFP)が必要です。この場合、a2dpプロファイルの場合はa2dp_sink、hspプロファイルの場合はheadsethead_unitです。これは元のポスターのa2dpおよびhspとは異なることに注意してください。

さて、上記のコードで、それを修正してファイルに入れます。ファイルbluezswitch.shを呼び出しました。

ファイルを置きたいディレクトリに移動します。どこでもかまいません。

touch bluezswitch.sh

それから

nano bluezswitch.sh

このコメントの一番上にあるコードをコピーして貼り付け、a2dpおよびhspを上記のコマンドを実行したときに取得した値に置き換えて、そのファイルに貼り付けます。たとえば、これは私のファイルがLGトーンに対してどのように見えるかです。

#!/bin/bash

BLUEZCARD=`pactl list cards short | egrep -o bluez.*[[:space:]]`
pactl set-card-profile $BLUEZCARD a2dp_sink
pactl set-card-profile $BLUEZCARD headset_head_unit
pactl set-card-profile $BLUEZCARD a2dp_sink

ここで、ctrl-xyの順にクリックしてファイルを保存し、nanoを終了してから、ファイルを実行可能にします。

chmod +x bluezswitch.sh

次に、説明したようにキーボードショートカットを設定してフォローアップします。

設定...キーボード...ショートカットに移動し、カスタムショートカットを作成します。 /home/brillout/bluezswitch.sh(パスの適切なユーザー名に置き換えてください!)のようなコマンドで、好きな名前を付けてください。 [適用]をクリックし、右側の[無効]をクリックして、スクリプトを実行するキーボードショートカットを設定します。

これですべてです。これは、以前は機能していなかったすべてのユーザーに対して機能するはずです。

7
Timm Simpkins

適応差分パルス符号変調には、先読み型圧縮アルゴリズムが含まれます。このアルゴリズムでは、エンコーダが数バイトの情報を調べる前に情報を送信できません。そのため、データはエンコーダーに蓄積されなければならず、エンコーダーに出入りするストリーム間には固有の時間シフトがあります。ずっと前に、私はデータネットワーク遅延の研究を行って、Voice over Dataテレフォニー(現在のVoIP)の実現可能性を判断しました。私は、ADPCMスタイルの圧縮/エンコードが非常に多くの遅延を導入すると結論付けたと思います。このBluetooth遅延の問題を克服するには、レイテンシーの少ない非圧縮タイプのオーディオエンコーディングが必要になると思います。

5
Kirk Shrewsbury

私はこの問題に対して多くのアプローチを試みましたが、何もそれを修正できませんでした。それから私はつまずいたset-port-latency-offset

Pulseaudioを使用している場合:

pactl list cards short | egrep -o bluez.*[[:space:]]

これにより、Bluetoothインターフェイスが提供されます。それに応じてレイテンシーを設定します:

pactl set-port-latency-offset <INTERFACE> speaker-output 100000

私は100000マイクロ秒を使用していますが、これは私には問題ありません。

4

これが私のために解決したものです:$ Sudo apt-get install phonon-backend-vlcそしてそれが優先バックエンドであることを確認し、KDEで[システム設定] [マルチメディア] [オーディオとビデオ設定] [バックエンド]に移動し、[優先ボタン]

1
dargaud

Timmの回答と同様に、受け入れられた回答のプロファイルもありませんでした。 HSPを設定すると、エラーコードが発生しました。

最終的に、ほぼ同一の次のスクリプトを使用しました。

#!/bin/bash
BLUEZCARD=`pactl list cards short | egrep -o bluez.*[[:space:]]`
pactl set-card-profile $BLUEZCARD a2dp_sink
pactl set-card-profile $BLUEZCARD off
pactl set-card-profile $BLUEZCARD a2dp_sink
0
raahlb

この問題は、これらすべての年後もまだ関連があるようです。

Arindam Mani Das の回答と Billy Farrington のコメントに基づいて、次のシェルスクリプトを作成しました。

#!/bin/bash
export BLUEZCARD=`pactl list cards short | egrep -o bluez.*[[:space:]]`
pactl set-card-profile $BLUEZCARD a2dp_sink
pactl set-port-latency-offset $BLUEZCARD headphone-output 100000

私はArindamが推奨するように100000マイクロ秒を使用していますが、これもうまく機能します。

0
Yakir Magriso

VLCメディアプレーヤーの[ツール]に移動[トラックの同期]タブ[オーディオ/ビデオオーディオトラックの同期]で、約-0.67などの負の値を使用すると、ラグが完全に補正されます。新しいファイルを開くたびに、手動でこれを行う必要があります。クリス

0
Lex

この問題を抱えている人はこのウェブサイトをご覧ください: http://projectzeorymer.wordpress.com/2011/09/01/ubuntu-how-to-connect-nokia-bh-503-bluetooth-headset-to -your-pc / ダウンロードする必要があるものの写真を表示します。

Bluetoothマネージャーをダウンロードし、それを使用してヘッドセットの設定を操作します。サウンド設定をHigh Fidelity Playback(A2DP)に設定してから、サウンド設定に入ります。

0
Alex Force