A2DP를 사용하여 Bluetooth를 통해 오디오를 재생할 때 0.5 초의 대기 시간 제거


49

제목에서 설명한 것처럼 A2DP로 Bluetooth를 통해 오디오를 재생할 때 0.5 초 지연이 발생합니다.
사운드가 비디오와 동기화되지 않아 동영상을 볼 수 없습니다.

지연이 Bluetooth 표준, A2PD 프로토콜, Ubuntu 12.04의 A2DP 구현 또는 Belkin Z73 Bluetooth 수신기로 인한 것인지 확실하지 않습니다.

어쨌든, 이것이 정상적인 지연입니까? 지연 시간없이 Bluetooth를 통해 오디오를 재생하는 방법이 있습니까?


8
문제에 대한 실질적인 해결책은 아니지만 해결 방법 : 영화 만 재생하는 경우 오디오 / 비디오 오프셋을 조정하면 비디오도 지연됩니다. 을 사용 mplayer하여 +-키 를 눌러 수행 합니다. VLC에서는 지연을 설정하는 방법을 모르지만 VLC에 그러한 옵션이 없으면 놀랍습니다.
leemes

나는 그것에 대해 생각했지만 YouTube 솔루션이 없습니다. 비디오를 HTML5로 재생할 때 해결책은 비디오 오프셋을 설정하는 브라우저 확장을 설치하는 것입니다. 그러나 비디오가 플래시로 재생되는 경우 어떻게 달성 해야할지 모르겠습니다.
brillout

또한 VLC 옵션은에 Tools->Track Synchronisation있거나 --audio-desync옵션 과 함께 재생됩니다 . 나는 그 단위가 무엇인지, 어떤 방향이 긍정적인지 확신하지 못하고 도움이 다가올 것이 아니라 두려워하는 곳입니다.
Darael


이 문제에 대한 영구적 인 해결책을 찾았습니까? 현재 솔루션을 사용하여 A2DP / HSP / A2DP 사이를 전환하고 있지만 동기화 문제가 발생할 때마다 계속 그렇게하는 것은 실용적이지 않습니다.
Fred Wuerges

답변:


37

아니요, 이것은 정상이 아니지만 때때로 Altec Lansing iMT525 Bluetooth 스피커와 비슷한 문제가있었습니다. 개념적으로 Sri의 답변과 비슷한 것이 거의 항상 저에게 효과적이며 연결 당 한 번만 수행하면됩니다.

PulseAudio를 다시 초기화하기 위해 블루투스 프로파일 자동 전환

범인을 찾고 있다면 우분투의 사운드 시스템, PulseAudio, 블루투스 수신기를 살펴 보겠습니다. 이 시도:

  • 먼저 블루투스 장치를 삭제하고 다시 페어링하십시오.

  • 그런 다음 아래를 복사 .sh하여 홈 디렉토리 의 파일에 붙여 넣으십시오 /home/brillout/pabluezswitch.sh.

    #! / bin / bash
    BLUEZCARD =`pactl리스트 카드 짧은 | egrep -o bluez. * [[: space :]]` pactl 세트 카드 프로필 $ BLUEZCARD a2dp pactl 세트 카드 프로필 $ BLUEZCARD hsp pactl 세트 카드 프로필 $ BLUEZCARD a2dp
  • 터미널을 열고 다음을 입력하여 파일을 실행 가능하게하십시오. chmod +x ~/pabluezswitch.sh

  • 설정 ... 키보드 ... 바로 가기로 이동하여 사용자 정의 바로 가기를 작성하십시오. /home/brillout/pabluezswitch.sh(경로에서 적절한 사용자 이름을 대체하십시오!) 명령을 사용하여 원하는 이름을 지정하십시오 . 클릭 적용 하고 그것이 말하는 오른쪽 클릭 장애인이 스크립트를 실행하는 키보드 단축키를 설정할 수 있습니다.

이것이하는 일은 PulseAudio 시스템이에서 프로파일을 전환하여 헤드셋 / 스피커로 전송되는 오디오를 다시 동기화하도록하여 ad2p -> hsp -> a2dp대기 시간을 없애는 것입니다.


연결하고 지연을 확인할 때마다 위에서 선택한 키보드 단축키를 눌러 대기 시간을 수정해야합니다.


나는 이것을 며칠 동안 사용해 왔으며 훌륭하게 작동합니다. - 14.04
DPB

7
그 pactl 끔찍한 오류 메시지를 가지고 있습니다, 그리고 많은 오디오 장비는이이 없다고 ad2p하고 hsp. 내 Bose는 ad2p_sink다른 두 개가 아닌
odinho-Velmont

1
나는 당신이 그 egrep을 패턴 따옴표 필요가 있다고 생각
naught101

1
지연 시간을 모니터링 하고이 스크립트가 참조 위의 임계 값을 초과 할 때 자동으로 트리거하는 방법이 있다고 생각하지 않습니까? pacmd info | grep "current latency"pacmd stat상관없이 실제 대기 시간이 성장하는 방법 좋은 같은 대기 번호 / 버퍼 크기를주지하는 것 (예를 들어 범위를 벗어 헤드셋을 복용하고 다시 가져 오는 경우)는, 어쩌면 스택의 다른 부분은 지연에 대한 책임?
Ponkadoodle

2
@ odinho-Velmont 사이를 전환 ad2p_sink하고 off나를 위해 일합니다. 최근 에 누군가에게 도움이 될만한 Pulse 오디오 / 볼륨 컨트롤 스크립트에 이것을 추가했습니다
Sam Mason

21
  • pavucontrol을 설치하십시오. sudo apt install pavucontrol
  • pavucontrol메뉴에서 실행
  • 출력 장치로 이동
  • 블루투스 기기로 이동
  • 고급으로 이동
  • 여기서 지연 시간 오프셋을 밀리 초 (플러스 또는 마이너스) 값으로 설정할 수 있습니다. 값을 확인하려면 250.00 mi와 같은 값으로 시작해야합니다.
  • YouTube에서 "오디오 동기화 테스트"를 재생하고 재생 속도를 0.25 (느리게)로 설정하면 값이 올바르거나 증가 또는 감소해야하는 경우 알 수 있습니다.

2
답변에서 불필요한 사스를 제거했습니다. 무례 할 필요는 없습니다. 또한, 이것이 효과가있는 것처럼 들리지만 실제로는 나를 위해 아무것도하지 않는 것 같습니다.
naught101

나에게 이것은 블루투스 스피커로 YouTube를 재생하는 데 효과적이었습니다. 감사. 내가 pavucontrol을 처음 열었을 때 고급 옵션이 숨겨졌습니다. 창을 세로로 확장해야했습니다.
user75505

11

사용하는 플레이어에 관계없이 때때로 비슷한 문제가 발생합니다. Mine은 MSI CR400 노트북 및 Ubuntu 11.10이 설치된 Nokia BH-503 Bluetooth 스테레오 헤드폰입니다. 시도 할 수있는 해결 방법을 발견했습니다.

  • 비디오 재생을 시작하십시오.
  • 소리 설정> 하드웨어로 이동하십시오.
  • 블루투스 장치를 선택하십시오.
  • 그런 다음 선택한 장치 설정 드롭 다운에서 Telephony Duplex (HSP / HFP) 프로파일로 전환 한 다음 A2DP (High Fidelity Playback)로 다시 전환하십시오.

7

여기의 상단 답변은 작동하지만 모든 블루투스 오디오 장치에는 적용되지 않습니다. 일부 장치의 포스터 이름과 블루투스 스피커의 프로파일 이름이 다릅니다. 예를 들어, 그 사람이 처음 게시 한 다음 코드에서 이름이 a2dpand 인 프로필이 hsp있습니다. 예를 들어 LG Tones에서는이 두 가지를 모두 사용할 수 없지만 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

이 코드는 대부분의 블루투스 장치에서 작동하지만 a2dp 프로파일이나 hsp 프로파일이없는 장치에서 올바르게 작동하려면 다음을 입력하십시오.

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

블루투스 장치를 찾은 후에 모든 것을 반환합니다. 예를 들어 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_sink에는 headset_head_unit,, 및 세 개의 프로파일이 있습니다 off. 필요한 두 가지 프로파일 (A2DP 싱크)과 (HSP / HFP)가 있어야합니다. 이 경우 a2dp_sink에는 a2dp 프로파일과 headsethead_unithsp 프로파일을위한 것입니다. 이 원래 포스터의 다른 예고 a2dp하고 hsp.

이제 위의 코드를 사용하여 코드를 수정하고 파일에 넣습니다. 나는 파일을 불렀다 bluezswitch.sh.

파일을 넣을 디렉토리로 변경하십시오. 어디에나있을 수 있습니다.

touch bluezswitch.sh

그때

nano bluezswitch.sh

복사하고이 댓글의 맨 위에 코드를 붙여 바꾸기 a2dphsp위의 명령을 실행했을 때 가지고와 값을, 그 파일에 붙여 넣습니다. 예를 들어, 이것이 내 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파일 종료 나노을 저장 한 다음 파일을 실행합니다

chmod +x bluezswitch.sh

그런 다음 설명대로 키보드 단축키를 설정하여 후속 조치를 취하십시오.

설정 ... 키보드 ... 바로 가기로 이동하여 사용자 정의 바로 가기를 만듭니다. /home/brillout/bluezswitch.sh 명령을 사용하여 원하는대로 이름을 지정하십시오 (경로에서 적절한 사용자 이름을 대체하십시오!). 적용을 클릭 한 다음 사용 안함이라고 표시된 오른쪽을 클릭하여 스크립트를 실행할 키보드 단축키를 설정하십시오.

거기에 모든 것이 있어야합니다. 이전에는 작동하지 않았던 모든 사람들에게 효과적입니다.


1
나를 위해, 해제 a2dp_sink, off, a2dp_sink순서가 저를 위해 아주 잘 작동합니다. headset_head_unitI / O 오류로 설정 중 입니다.
Mohd Shahril

5

적응 적 차동 펄스 코드 변조는 인코더가 다가오는 정보의 몇 바이트를 검사하기 전에 정보를 전송할 수없는 예견 형 압축 알고리즘을 포함한다. 따라서, 데이터는 인코더에 쌓여 야하며, 인코더로 들어오고 나가는 스트림 사이에는 고유 한 시간 이동이있다. 오래 전에 데이터 음성 통신 (현재 VoIP)의 실현 가능성을 확인하기 위해 데이터 네트워크 지연에 대해 연구했습니다. ADPCM 스타일 압축 / 인코딩이 너무 많은 지연을 초래할 것이라고 결론지었습니다. 이 Bluetooth 지연 문제를 극복하려면 지연 시간이 더 짧은 비 압축 유형의 오디오 인코딩이 필요할 수 있습니다.


6
압축 문제는 0.5 초가 아닌 수십 밀리 초를 차지할 것입니까?
naught101

4

이 문제에 대한 많은 접근 방식을 시도했지만 아무것도 해결할 수 없습니다. 그런 다음 set-port-latency-offset을 우연히 발견했습니다.

pulseaudio를 사용하는 경우 :

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

블루투스 인터페이스가 제공됩니다. 이제 대기 시간을 적절하게 설정하십시오.

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

나는 잘 작동하는 100000 마이크로 초를 사용하고 있습니다.


1
Arindam Mani Das의 답변은이 오래된 게시물에서 답을 찾고있는 사람들에게 완벽하게 작동합니다. "No such entity"오류가 표시되면 'pactl list cards'를 실행하고 장치에 사용할 수있는 포트를 확인하십시오. 장치에 스피커 출력 포트가 없기 때문에 두 번째 명령에서 "스피커 출력"을 "헤드셋 출력"으로 변경해야했습니다.
Billy Farrington

1

해결 방법은 다음 $ sudo apt-get install phonon-backend-vlc과 같습니다. KDE에서 [시스템 설정] [멀티미디어] [오디오 및 비디오 설정] [백엔드]로 이동하여 [바람직한 단추]를 사용하여 선호하는 백엔드인지 확인하십시오.


1
@dargaud 선호하는 백엔드로 만드는 방법을 설명하기 위해 이것을 확장하는 것이 좋습니다.
Eliah Kagan

0

이 문제가 발생하는 개인 다음 웹 사이트를 참조하십시오 : http://projectzeorymer.wordpress.com/2011/09/01/ubuntu-how-to-connect-nokia-bh-503-bluetooth-headset-to-your-pc / 다운로드해야하는 사진을 보려면

블루투스 관리자를 다운로드하여 헤드셋 설정을 조작하십시오. 사운드 설정을 A2DP (High Fidelity Playback)로 설정 한 다음 사운드 설정으로 이동하십시오.


1
Bluetooth 관리로 이동하여 오디오 프로필로 이동 한 다음 고음질 재생을 선택하십시오.
Alex Force

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.