One-shot bluetoothctl pairing exited before SSP finished, leaving the headphone paired but not bonded, so it was lost on reboot. Pair inside a single bluetoothctl session with a persistent agent, and clear temporary pairings first. Document that SBC medium + 500 ms buffer removed the iPhone -> Radxa -> headphone dropouts, verified by listening and logs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5.2 KiB
검증 기록 — 2026-10-12
완료
- 입력값 검증, 연결 없는 출력 전환 중단, 서비스 실패 시 설정 복구, 설치 백업 복구/심볼릭 링크 보존, 등록 장비 재페어링 방지, 입력 PCM 제한, 출력 볼륨 변경 거부, HTTP 토큰/동일 출처 검사, 활성 AirPlay 속성 파싱, 영구 등록 실패 처리 등 자동 검사 23개 통과.
- Bash 문법 검사와 ShellCheck 통과.
- Python 문법 확인: macOS Python 3.14, 보드의 Debian Python에서 확인.
- systemd의 새
radxa-bt-output.service검증 통과. - 배포할 Git bundle에서 새 작업 디렉토리로 복제하고 실제 보드에서 컴파일 성공.
- Shairport Sync 웹 버전:
5.5.2-dirty-AirPlay2-smi10-OpenSSL-Avahi-ALSA-soxr-metadata-dbus-sysconfdir:/etc - 포함된 네이티브 볼륨 패치를 적용한 실제 보드 빌드 및 설치 성공.
dirty는 해당 패치를 적용했기 때문에 표시됩니다. - NQPTP: 1.2.8 / 공유 메모리 규격 10.
- Shairport Sync 웹 버전:
- 기존 얕은 Git 복제에서 만든 bundle의 누락 이력을 발견하고, 완전한 이력이 있는 독립 bundle로 교체함. 최종 SHA-256은 manifest에 기록.
- 기존 보드에 새 관리 명령을 설치하고 기존 이름/보스 출력 설정으로 이전 성공.
radxa-audio output dac→output bluetooth왕복 확인 및 각 경로 무음 재생 성공.- 최종 보드 설정: Bluetooth 출력, Bose QC Headphones.
- 보스 PLAYBACK(SBC 48 kHz)과 아이폰 CAPTURE(SBC 44.1 kHz) 동시 연결 확인.
- 기존 Wi-Fi 안정화 옵션
he_on=N,ps_on=N유지 확인. - 웹 서비스 자동 시작, 브라우저의 AirPlay/휴대폰 입력 볼륨과 음소거, DAC 선택을 실제 API와 장치 속성으로 확인.
- 공통 감쇠 −3 dB, 명령행 제어 유지, JavaScript/Bash 문법 검사 통과.
Bluetooth 끊김 조사
사용자가 iPhone Bluetooth → 보스 헤드폰 경로의 끊김을 보고했습니다.
iPhone 수신 RTP 패킷 손실과 입력 재생 underrun이 반복됐고,
헤드폰 출력 alsaloop에서 capture overrun도 한 번 확인됐습니다.
Wi-Fi는 5 GHz, CPU 부하는 낮았으며 원인은 아직 확정하지 않았습니다.
출력 버퍼를 200 ms에서 500 ms로 늘려도 사용자가 끊김을 확인했습니다.
송신을 멈춘 약 18초 동안에는 입력 패킷 손실이 없었고, 송신 재개 후 다시 발생했습니다.
SBC 송신 품질을 high에서 medium으로 줄인 뒤 사용자는 정상 청취라고 답했지만,
같은 시점에 Radxa의 보스 출력 PCM이 없고 연결 재시도 중인 것을 발견했습니다.
직접 연결 경로의 소리일 수 있어 이 응답만으로 해결됐다고 판단하지 않습니다.
medium과 500 ms 버퍼를 저장했고 출력 등록 복구 후 다시 검증해야 합니다.
이후 컨트롤러에서 HCI 명령 0x0c1a/0x0408 시간 초과와 BlueZ NoReply를
확인했습니다. Bluetooth 서비스 재시작만으로 복구되지 않아 보드를 재부팅했습니다.
SBC 품질 변경으로 컨트롤러 오류가 해결됐다고 보지는 않습니다.
재부팅 후 Wi-Fi/USB 관리 연결이 돌아오지 않아 전원을 재연결했고, 컨트롤러는 정상 초기화됐습니다. 500 ms 버퍼와 SBC medium 설정은 유지됐습니다. 임시 등록이던 보스는 재부팅으로 등록이 사라졌습니다.
일회성 bluetoothctl --agent NoInputNoOutput pair는 인증 완료 전에 종료돼
Bonded: no로 남았던 것으로 보고, 하나의 bluetoothctl 세션에서
에이전트 등록 → 검색 → 페어링을 진행하도록 바꿨습니다. 이 방식으로 보스가
Paired/Bonded/Trusted: yes로 영구 등록됐습니다.
2026-10-12 19:00 전후로 iPhone → Radxa Bluetooth → 보스 경로(PCM 연결을
bluealsa-aplay -l로 확인)에서 사용자가 정상 청취를 확인했습니다. 해당 구간
로그에서 Missing RTP packets, underrun/overrun, HCI 시간 초과는 없었습니다.
따라서 SBC medium + 500 ms 버퍼 조합으로 끊김이 해소된 것으로 판단합니다.
장시간 재생 안정성은 아직 확인하지 않았습니다.
이미 영구 등록된 휴대폰 등록은 재부팅 후 유지됐습니다.
실제 청취로 확인한 범위
사용자가 AirPlay 재생, AirPlay + 아이폰 Bluetooth 입력의 DAC 믹스 재생을 정상 청취했다고 확인했습니다. iPhone Bluetooth 입력 → 보스 헤드폰 출력도 SBC medium / 500 ms 버퍼 설정에서 끊김 없이 청취했다고 확인했습니다.
아직 검증하지 않은 범위
- 새 SD 카드/새 OS에서
install.sh전체를 처음부터 실행하는 시험. - 다른 Radxa 모델의 무선 드라이버와 블루투스 컨트롤러.
- 여러 Bluetooth 입력 기기의 동시 음악 재생 한계.
- 새 범용 출력 서비스의 재부팅/헤드폰 전원 껐다 켜기 이후 자동 재연결.
- 패키지 저장소가 향후 바뀐 환경. AirPlay 소스는 고정했지만 apt 의존 패키지는 Debian 13 저장소가 제공하는 버전을 사용합니다.
새 보드 설치 시 서비스가 모두 실행되는 것만으로 음질 검증을 마쳤다고 보지 말고, AirPlay 단독 → Bluetooth 단독 → 두 입력 믹스 → 재부팅 후 재연결 순서로 직접 들어 확인해 주세요.