Bluetooth A2DP on Linux

– 삽질 기록용 –

라즈베리파이의 블루투스를 사용해서 aux단자 출력을 하려했는데… 연결된 장치에서 전송하는 포맷에따라서 디코딩이 실시간으로 안되어 툭툭 끊기는 현상이있었다(…)

결국 메인 PC에서 사용하고있던 인텔 듀얼링크 무선랜을 때다가 사용하고있는 젠투리눅스에 연결-_-;; (어차피 유선으로 사용하고있었고 블루투스도 연결된 기기가 없기에)

기본적으로 Gentoo Wiki의 이 페이지에 기술된 내용대로 빌드되어있으면 일부 기기(ex 안드로이드)에서 스트리밍되는 음원 재생 문제없지만, TV나 아이폰에서 전송되는 음원을 디코딩하지 못하였다. 대부분 다른 배포본 위주의 설명이라 그냥 감으로 해보았는데… 일단 성공하였다. (아직 해결되어야할게 한가지있지만.)

일단 사용한 pulseaudio의 USE 옵션은 아래와같다. 아마도 libsamplerate 이 USE 옵션이 핵심인거같다. (우분투같은경우 리소스가 너무나도 많으니 패스.)
X alsa alsa-plugin asyncns bluetooth caps dbus gdbm glib gnome gtk ipv6 libsamplerate native-headset orc qt4 realtime ssl systemd tcpd udev webrtc-aec

이제 블루투스에서 오디오를 사용하기 위해서는 아래와같이 설정한다.

/etc/bluetooth/audio.conf (기본적으로 없으므로 생성, 내용출처)

# Configuration file for the audio service

# This section contains options which are not specific to any
# particular interface
[General]

# Switch to master role for incoming connections (defaults to true)
Master=true

# If we want to disable support for specific services
# Defaults to supporting all implemented services
#Disable=Control,Source
Enable=Source

# SCO routing. Either PCM or HCI (in which case audio is routed to/from ALSA)
# Defaults to HCI
#SCORouting=PCM

# Automatically connect both A2DP and HFP/HSP profiles for incoming
# connections. Some headsets that support both profiles will only connect the
# other one automatically so the default setting of true is usually a good
# idea.
AutoConnect=true

# Headset interface specific options (i.e. options which affect how the audio
# service interacts with remote headset devices)
[Headset]

# Set to true to support HFP, false means only HSP is supported
# Defaults to true
HFP=true

# Maximum number of connected HSP/HFP devices per adapter. Defaults to 1
MaxConnected=1

# Just an example of potential config options for the other interfaces
#[A2DP]
#SBCSources=1
#MPEG12Sources=0

/etc/pulse/system.pa (마지막 부분에 추가, 내용출처)

### Automatically load driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif

.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif

load-module module-switch-on-connect 도 한라인 추가하였다. 정확한 내용은… 기억 안난다. 패스.

마지막으로 아래 github 저장소에서 simple-agent.autotrust, bluezutils.py 두개의 파일을 다운받아서 simple-agent.autotrust를 실행시킨다. (이벤트를 처리안하면 오디오 연결이 안된다.)
https://github.com/BaReinhard/Super-Simple-Raspberry-Pi-Audio-Receiver-Install/tree/master/usr/local/bin

만약 장치이름을 바꾸고싶다면 /etc/bluetooth/main.conf 파일에서 Name을 바꿔주면 되고 DiscoverableTimeout 항목을 0으로 설정하면 discovering를 무한으로 한다. Policy에서 AutoEnable을 true로 설정하는것도 있던데 차이는 모르겠다.

또한 Class 항목을 0x200414로 바꾸면 오디오 장치로 블루투스가 인식된다. 일부 장치는 기본값을 사용하면 스피커 장치가 아니여서 목록에 나타나지않는다. 젠투에서는 Class 값이 적용되지않아 hciconfig hci0 class 0x200414 명령을 실행하여 변경하였다.

systemctl restart bluetooth 명령으로 서비스를 재실행하여 변경된 내용들 적용. (아마 재부팅 해야할수도있다.)

A2DP 스택이 적용되었으면 bluetoothctl에서 show 커맨드를 실행하면 아래와같이 나온다.

Controller 7C:5C:F8:D7:99:7E
        Name: BlueZ Gentoo
        Alias: BlueZ Gentoo
        Class: 0x000000
        Powered: yes
        Discoverable: yes
        Pairable: yes
        UUID: Headset AG                (00001112-0000-1000-8000-00805f9b34fb)
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        UUID: OBEX File Transfer        (00001106-0000-1000-8000-00805f9b34fb)
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: OBEX Object Push          (00001105-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        UUID: IrMC Sync                 (00001104-0000-1000-8000-00805f9b34fb)
        UUID: Audio Source              (0000110a-0000-1000-8000-00805f9b34fb)
        UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
        UUID: Message Notification Se.. (00001133-0000-1000-8000-00805f9b34fb)
        UUID: Phonebook Access Server   (0000112f-0000-1000-8000-00805f9b34fb)
        UUID: Message Access Server     (00001132-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v1D6Bp0246d052B
        Discovering: no

여기서 중요한것이 Audio Sink.

오디오 장치로 연결이 잘 되었다면 pactl list sources short명령을 치면 아래와같이 나온다.

1       alsa_output.pci-0000_00_1b.0.analog-stereo.monitor      module-alsa-card.c      s16le 2ch 48000Hz       IDLE
2       alsa_input.pci-0000_00_1b.0.analog-stereo       module-alsa-card.c      s16le 2ch 44100Hz       SUSPENDED
3       alsa_output.pci-0000_00_03.0.hdmi-stereo.monitor        module-alsa-card.c      s16le 2ch 44100Hz       SUSPENDED
7       bluez_source.F8_3F_51_27_C2_1F.a2dp_source      module-bluez5-device.c  s16le 2ch 48000Hz       RUNNING

아직은 Gnome Desktop에 사용자가 로그인되어야 음원이 출력되는 문제가있지만… 더 깊이 알아보기 귀찮다. 어차피 24시간 켜놓는것이니까 -_-;;
어차피 두면 잠금화면이 뜨기때문에 걍 다음에 의욕이 생길 때 까진 이렇게 써야겠다.

https://github.com/BaReinhard/Super-Simple-Raspberry-Pi-Audio-Receiver-Install/blob/master/usr/local/bin/volume-watcher.py 이 파일은 AVRCP 이벤트를 처리하는것이지만… 역시나 귀찮…

https://ludwig.im/en/projects/steam-pulseaudio-sound-latency-lagging-problem-noise 이것은 latency를 줄이기 위한 팁

덧) 위와같이 별별삽질 다 해봐야 무선 특유의 지연시간 사라지지않고 결국 그냥 제품으로 잘 나와있는거 사는게 정신건강과 시간적으로 더 이득이라는 생각이 드는건 안비밀. 결국 주머니 사정(…). 일단 두어달 후에 그냥 옵티컬 DAC 잘 나온거 하나 사야겠다 -_-;;

NAS의 DLNA(미디어 서버)를 사용해본 결과

  1. NAS의 미디어 서버를 통하여 영상에서 자막을 사용하려면 MP4나 MKV 컨테이터에 자막을 내장시켜야한다.
  2. 플레이 스테이션 4의 미디어 플레이어는 MP4에 자막을 넣으면 자막인식을 못하는것으로 보임.
  3. 주변의 소문으로는 webOS 3.0을 쓴 LG 스마트 TV가 MKV 컨테이너를 인식하지 못한다고 함.
  4. 플스의 미디어플레이어는 자막에 테두리가 들어가지않음. 즉 흰색 글자로만 표현되고 하얀색의 장면이 표시되고있으면 자막이 안보인다. ‘콘텐츠에서 지정한 대로 클로즈드 캡션 표시하기’ 옵션을 끄고 직접 스타일을 지정하면 된다. 단, 한글폰트의 윤곽선 품질은 형편없다. 하는 수 없이 배경색을 25%주어서 흰색 화면에서 글자가 좀 더 잘보이게 하여 어느정도 해결. (그마저도 배경색이 폰트의 위/아래 여분의 영역없이 들어가버려서 불만족) 기분탓인지 모르겠지만 오늘(2017-03-28) 업데이트 된 3.00버전에서는 한글자막의 배경색도 나름 만족스러울정도로 적용된다.
  5. 시놀로지 나스에서 호환성 옵션으로 재공되는 영상의 트랜스코딩이란것을 활성화하여 재생하면 자막이 빠져버린다.

 

이정도가 약 일주일동안 이리저리 사용해본 결론. 플스의 미디어 플레이어가 자막에 테두리효과가 없이 흰색 글자로만 표현된다는건 큰 실망이였다.

메뉴얼에는 단순히 H.264 High Profile, Level 4.2까지 지원하고 지원하는 영상의 색상정보는 표기되어있지않은데 재생해본결과 YUV 444 형식이면 재생이안되고 YUV 420이라도 10bit 컬러깊이를 사용하는 영상은 재생이되지만 감상할 수 없을정도로 영상이 끊긴다.

분명 하드웨어 성능으로는 전혀 무리없이 디코딩 가능할것으로 보이는데 포터블 기기도아니고 멀티미디어를 재생하는 미디어 플레이어가 이러한 제한이있다는것이 의외였다. (소프트웨어 디코더의 라이센스 문제일가능성이 크지만.)

PC를 쓰지않고 TV나 모니터로 자막을 지원하는 플레이어로 영상을 보려면 IPTV의 셋톱박스에서 지원하는 USB 미디어의 플레이어를 쓰는것이 훨신 유용할것이라고본다.

DS Cloud의 모바일버전은 쓸만하지않다

결론을 말하자면 그냥 구글드라이브 쓰자. 기본재공 드라이브의 용량이 부족하다면 그냥 과금하여 사용하자. 기능확인을 위해 구글 드라이브로 사진 동기화 방법을 알아봤지만 iCloud에 동기화하여 사용중이기때문에 이 글을 쓰고나서는 구글 드라이브로의 동기화는 해제할것이다. (아이폰은 그냥 iCloud가 좋다. 그래도 종종 날려먹는 파일이 생긴다는 소문이있으니 iCloud와 Google Drive 둘 다 동기화하는것도 나쁘지않다.)

이전에 아이폰 베타버전 펌웨어 잠깐 올려보다가 꼬여버려서 다른건 다 iCloud 동기화 시켜놓았지만 용량이안되어 사진만 iCloud에 동기화하지 않도록 했다가 전부 날린적이있었다. 그나마 OneDrive에 용량이차서 당시 기준 일년치 사진을 동기화하지 못하고 그 이전 사진과 동영상이 남아있었는데 그것마저아니였다면 수년동안 찍었던 사진들을 전부 날릴뻔한적이있었다. 지금도 그 일년동안의 사진이 아깝다. 외냐면 이전보다 조금은 더 활동적이고싶어 밖에 돌아다니면서 돌아다녔던 곳들을 찍었고 출장이였지만 외국에서도 찍은사진들이 유난히 많았던 일년이였으니까.

그 후로는 그냥 저장용량을 추가구입하여 iCloud에 동기화한다. 아마 ‘난 그런거 당하지않아’라던지 ‘그정도로 중요하지않아’와 같은 마음가짐으로 한달 천얼마 아깝다고 안하는 사람 주변에 보이는데… 겪어보면 정말 그럴까? 난 게임을하면서 찍은 스크린샷이나 고등학교때, 대학교때 찍었던 사진 전부(일부는 날렸을테지만) 가지고있는 성격인데 베타버전 펌웨어를 사진 백업없이 했다가 몇시간만에 일년치의 사진을 날려먹어보니 일년에 1~2만원 사용하는거 아깝지않았다.

아래는 아이폰 기준으로 구글드라이브로 사진을 동기화하는 방법이다. Continue reading DS Cloud의 모바일버전은 쓸만하지않다

플레이스테이션 펌웨어 4.50버전 확장 스토리지 사용

상품권도 있고 무언가 살때 쓰려했던것을 사용하여 이마트에서 WD MyPassport Metal Edition 2TB를 약 15만원에 샀다. 위에서 봤을땐 작아보였는데 제품을 개봉해서보니 두깨가 꽤나 두꺼웠다. 마치 SAS하드를 보는 느낌. 이건 그리 중요한 정보는 아니고…

확장 스토리지의 조건은 USB 3.0 지원, 500GB이상, 8TB이하의 저장장치.

설정 -> 주변기기 -> USB 저장장치에서 확장스토리지로 포맷할 수 있고 드라이브의 모든 공간을 플스전용으로 포맷해버린다. 즉, 플스의 소프트웨어 말고는 아무것도 저장하지 못한다는것.

기존의 게임이나 소프트웨어를 옮기기위해서는 설정 -> 스토리지에서 본체 스토리지를 선택하여 Options 버튼을 누르면 확장스토리지로 이동 메뉴가 나타난다. 이것을 통해서 이동하면 된다. 35기가가 약 8~9분 걸리는거같다.

암튼 사용해보았으나 기대를 걸었던 로딩속도는 동일한거같다. 아마 플스 프로에서 확장 스토리지를 사용해도 속도의 이득은 없을듯하다. USB 3.0을 지원하는 저장장치를 요구하는건 최소한의 성능을 보장받기위해서인듯하다.

확장 스토리지는 소프트웨어를 전부 외장하드로 옮겨놓고 플스의 하드의 모든 공간을 동영상, 사진, 세이브 데이터 저장용으로 사용할 수 있게되었다는점에서 만족을해야할듯하다. 용량도 넉넉해져서 그간 구입했던 DL판 게임을 전부 다시 받아도 절반을 사용하지못했다.

확장스토리지로 포맷하고나면 기본 소프트웨어 설치 위치가 확장스토리지로 변경된다. 설정 -> 스토리지에서 Options을 누르면 기본 설치위치를 바꾸거나 확장 스토리지를 분리할 수 있다.

메뉴얼의 내용은 http://manuals.playstation.net/document/kr/ps4/basic/extendedstorage.html 링크 참조.

게임을 깔때마다 하나 지우는일이 계속 발생했는데 몇년동안은 그럴일이 없을 듯 하다. 그리고 개인 취향이지만 데이터를 읽거나 쓰는것을 확인할 수 없던것이 이젠 외장하드의 LED가 깜빡거리니 지금은 게임 데이터가 읽히고있구나…를 확인가능하다는것이 장점(?).

단점이라면 플스 프로가 아닌한 USB는 전면부에만 있으므로 다소 케이블때문에 난잡해진다. 당연하겠지만 위 메뉴얼대로 USB를 분리하지않으면 안된다. (데이터 손상이 생기지안겠지만 게임 중 나이어린 자녀가 확 뽑게되면 나름 패닉에 빠질듯.)

우리나라는 넷플릭스 가능한 TV 찾기가 쉽지않다

https://devices.netflix.com/ko/ 이곳에서 볼 수 있는 넷플릭스 로고. 정확하게 이것이 상품 정보에 표기가 된다는것인지 넷플릭스 홈페이지에서만 사용하는것인지는 잘 모르겠다(설명이 정확하지 않기도하고).

얼마전 엘지 매장에 찾아가서 넷플릭스 가능한 TV좀 알고싶다했더니 명확하게 이런 목적으로 찾아온 손님이 없어서인지 점원조차 모르고, 제품 카탈로그에도 스마트 TV에대한 자세한 정보가 없었다. 일단 스마트 TV라며 안내 받은 TV는 있었지만 매장의 점원조차 다루기 힘들어하던 리모컨과 TV의 인터페이스. 설정 메뉴에 앱이라는 내용이있고 TV후면에 이더넷 포트, Wi-Fi가 내장되어있는걸 봐서는 일단 스마트 TV라는 부류에 속하는것같지만 이것이 어디까지되고 안되는지 리모컨으로 직접 조작하여 메뉴를 둘러보았으나… 회사에있는 동일한 엘지의 스마트 TV와 완전하게 달라 좀처럼 기능을 둘러보기가 힘들었다. (오히려 3~4년 된 사무실의 스마트 TV가 더 사용자 조작이 직관적이였다. 일단 사무실의 스마트 TV는 기본적으로 내장되어있는 앱 말고는 다운로드 센터나 스토어같은건 찾을 수 없었고 스마트 TV라고 넷플릭스 되는거라고 생각하면 안된다고 생각하고있기때문에 무조건 된다고 생각하기도 힘든상태.)

위 링크 페이지 우측하단의 삼성이나 엘지 두 제조사 로고를 클릭하여 들어가보면 엘지같은경우 대놓고 넷플릭스를 홍보하면서 TV가 나열되어있다. 삼성은 따로 넷플릭스가 명시되어있지않지만 엘지와 삼성 둘 다 제품의 선택가능한 분류, 제품의 종류부터 우리나라 자국의 제품소개 페이지가 훨신 부실하게 되어있다. (아무리 외국시장이 우리나라 내수시장보다 훨신 크다곤해도 자국에 대한 안내가 부실한건 도무지 이해하기힘들다. 거짓말 살작 보태면 동내 매장에 전시되어있는 제품이 홈페이지 제품보다 많을것이다.)

거기에 한술더떠서 엘지는 Smart+3D TV항목에 등록된 55LF6200은 스마트 TV가 아니다. 단순히 3D TV일뿐이다. 당최 이게 왜 여기에 등록이되어있는지 전혀 모르겠다. 현재 제품이 딱 세개밖에 없는데 세 제품을 둘러보니 이 분류가 Smart+3D TV가 아니라 Smart or 3D TV이다. -_-;; (이것들 + 와 or 의 차이를 모르는건 아닌가 하는 억측이든다.)

(http://www.lge.co.kr/lgekor/product/media/tv/productDetail.do?cateId=1190&prdId=EPRD.285449)

뭐… 상품이 부실한건 좋게본다면 제품을 보러 방문한 사용자에게 엄선된(?) 제품의 정보만 재공하여 선택의 복잡함을 줄여주기위해서 일부러 카테고리가 외국 제품페이지보다 절반도 못미치는것일 수 있고… 나쁘게 본다면 그냥 관리를 못하는것일 수 있다고본다.

평소 전자기기 알아보는것을 자주 하기도했고 집에도 내 책상에 전자기기만해도 7가지씩이나 올려놓고 사용하는 나조차도 넷플릭스가 되는 TV하나 알아보는데 소요된 삼일동안 매장가보고 제조사 홈페이지가보고 넷플릭스 홈페이지가보고 오늘 사일째 되는 날 이 글을 쓰기까지되었다. 내가 넷플릭스 페밀리로 끊어서 구독하고있기도하고 추석때 집 TV가 망가져서 가까이 살고있는 매형이 바꿔준 일이 생기고나서 아쉬움에 평소 들어보았던 크롬 캐스트로 시청방법 찾아보고, 기왕 내 집에서도 TV의 필요성이 느껴져 제품을 찾게되었는데 이렇게까지도 찾기가 힘들지는 몰랐다.

 

P.S. 이 글을 쓰면서 상품하나를 클릭하게되었는데… 드디어 넷플릭스가 언급된 제품을 보게 된건 안비밀. 일단 webOS 3.0을 쓰는 엘지 TV는 공통될것이라고 어느정도는 믿어보아야겠다. (그래봐야 제조사 제품 페이지에 등록된 제품이 부실하지만)