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


49

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

遅延の原因がBluetooth標準、A2PDプロトコル、Ubuntu 12.04でのA2DP実装、またはBelkin Z73 Bluetooth Receiverのいずれであるかはわかりません。

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


9
問題に対する実際の解決策ではなく、回避策:ムービーの再生のみに関する場合は、オーディオ/ビデオオフセットを調整して、ビデオも遅延させることができます。を使用してmplayer、キー+-キーを押します。VLCでは、遅延を設定する方法がわかりませんが、VLCにそのようなオプションがない場合は驚かれることでしょう。
リーム

私はそれについて考えましたが、YouTubeの解決策がありません。ビデオをHTML5で再生するときの解決策は、ビデオオフセットを設定するブラウザー拡張機能をインストールすることです。しかし、ビデオがフラッシュで再生される場合、それを実現する方法がわかりません。
-brillout

ちなみに、VLCオプションはにTools->Track Synchronisationあるか、--audio-desyncオプションで遊んでください。ユニットが何であるか、どの方向がポジティブであるのか、そしてこの問題に関して助けが来ることはないのではないかと思いますが、それはあなたが見たいところです。
ダラエル


この問題の永続的な解決策を見つけましたか?現在、このソリューションを使用してA2DP / HSP / A2DPを切り替えていますが、同期の問題が発生するたびにそれを続けるのは実用的ではありません。
フレッドヴュルゲス16

回答:


37

いいえ、これは正常ではありませんが、時々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-card-profile $ BLUEZCARD a2dp
  • ターミナルを開いて入力して、ファイルを実行可能にします chmod +x ~/pabluezswitch.sh

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

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


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


私はこれを数日間使用してきましたが、うまく機能します。- 14.04
DPB

7
pactlにはひどいエラーメッセージがあり、多くのオーディオ機器にはこれらad2pとがありませんhsp。私のボーズにはad2p_sink、これらの他の2つはありません。
odinho - Velmont

1
そのegrepパターンの周りに引用符が必要だと思う
-naught101

1
待機時間を監視し、基準を超えるしきい値を超えたときにこのスクリプトを自動的にトリガーする方法はないと思いますか?pacmd info | grep "current latency"またpacmd stat、実際のレイテンシーがどれだけ大きくなったとしても同じレイテンシー数/バッファーサイズを提供するようです(たとえば、ヘッドセットを範囲外にして戻した場合)。
ポンカドゥードル

2
間をトグル@ odinho-Velmont ad2p_sinkoff私のために動作します。私は最近、誰かに役立つかもしれない私のパルスオーディオ/ボリュームコントロールスクリプトにこれを和らげました
サムメイソン

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

2
不要なSassを回答から削除しました。失礼になる必要はありません。また、それが動作するはずのように、これは音が、実際に私のために何もしていないようです...
naught101

私にとっては、これは、Bluetoothスピーカーを使用したyoutube再生で機能しました。ありがとう。最初にpavucontrolを開いたとき、詳細オプションは表示されていませんでした。ウィンドウを垂直方向に拡張する必要がありました。
user75505

11

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

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

7

ここの一番上の返信は機能しますが、すべての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セクションに興味があります。このセクションでは、我々は3つのプロファイルを参照してくださいa2dp_sinkheadset_head_unitoff。必要な2つのプロファイル(A2DPシンク)と(HSP / HFP)が必要です。この場合、それらはa2dp_sinka2dpプロファイルおよびhspプロファイルheadsethead_unit用です。これは元のポスターa2dpやのとは異なりhspます。

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

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

touch bluezswitch.sh

それから

nano bluezswitch.sh

このコメントの一番上にあるコードをコピーして貼り付け、a2dpand 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-xその後、yファイルして終了nanoを保存し、その後、ファイルを実行可能にします:

chmod +x bluezswitch.sh

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

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

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


1
私にとって、、、を順番にオフにすることa2dp_sinkoffa2dp_sink私にとって非常にうまくいきます。headset_head_unitI / Oエラーへの設定。
モハShahril

5

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


6
圧縮の問題は、確実に0.5秒ではなく、数十ミリ秒を占めるでしょうか?
-naught101

4

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

pulseaudioを使用している場合:

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

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

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

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


1
この古い投稿に出くわして答えを探している人にとって、Arindam Mani Dasの答えは完璧に機能します。「no such entity」エラーが表示された場合は、「pactl list cards」を実行して、デバイスで使用可能なポートを確認してください。デバイスにはスピーカー出力ポートがないため、2番目のコマンドで「スピーカー出力」を「ヘッドセット出力」に変更する必要がありました。
ビリーファリントン

1

解決策は次のとおりです$ sudo apt-get install phonon-backend-vlc。KDEで[システム設定] [マルチメディア] [オーディオとビデオの設定] [バックエンド]に移動し、[優先ボタン]を使用します。


1
@dargaudこれを拡張して、推奨バックエンドにする方法を説明することをお勧めします。
エリアケイガン14

0

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

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


1
それthatsの..上のブルートゥース管理し、オーディオプロファイルに移動してハイFedelity再生を選択ゴー
アレックス・フォース

0

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


0

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

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

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マイクロ秒を使用していますが、これもうまく機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.