Android/Android Audio

HDMI 및 SPDIF 오디오 출력 지원

임베디드 친구 2025. 6. 27. 19:53
728x90
반응형

HDMI 및 SPDIF 오디오 출력 지원

1. 개요

Android 시스템에서 오디오 출력 경로는 다양하게 설정할 수 있으며, HDMI와 SPDIF(Audio over S/PDIF)는 고품질 디지털 오디오 출력을 지원하는 중요한 인터페이스입니다. 본 포스팅에서는 Android에서 HDMI 및 SPDIF 오디오 출력을 지원하는 방법을 설명하고, 시스템 설정 및 연동 방안을 다룹니다.

2. HDMI 및 SPDIF 개요

2.1 HDMI 오디오 출력

HDMI(High-Definition Multimedia Interface)는 오디오와 비디오 신호를 함께 전송할 수 있는 디지털 인터페이스입니다. HDMI 오디오 출력은 일반적으로 AV 리시버, TV 또는 사운드바와 같은 외부 장치로 오디오 신호를 전달하는 데 사용됩니다.

HDMI 오디오 출력 특징

  • 멀티채널 오디오 지원(최대 8채널 LPCM, Dolby TrueHD, DTS-HD 등)
  • 비압축 및 압축 오디오 포맷 지원
  • 동기화된 오디오 및 비디오 출력 가능
  • EDID(Extended Display Identification Data)를 통해 연결된 장치의 오디오 기능 확인 가능

2.2 SPDIF 오디오 출력

SPDIF(Sony/Philips Digital Interface)는 디지털 오디오 데이터를 전송하는 표준 인터페이스로, 광(Optical) 또는 동축(Coaxial) 케이블을 통해 연결됩니다.

SPDIF 오디오 출력 특징

  • 2채널 PCM 및 압축된 멀티채널 오디오 지원(Dolby Digital, DTS 등)
  • 낮은 지연시간(Latency)과 간섭 최소화
  • HDMI에 비해 지원하는 오디오 포맷이 제한적
  • 비트스트림 전송 방식으로 디지털 신호 전달 가능

3. Android에서 HDMI 및 SPDIF 오디오 출력 설정

Android에서는 ALSA(Audio Layer in Kernel) 및 Audio HAL을 통해 HDMI와 SPDIF 오디오 출력을 관리할 수 있습니다. 다음은 각 단계별 설정 방법입니다.

3.1 Audio HAL에서 HDMI 및 SPDIF 지원 확인

Android의 오디오 HAL(Hardware Abstraction Layer)은 /vendor/etc/audio_policy_configuration.xml 또는 /vendor/etc/audio_policy.conf에서 설정됩니다. HDMI 및 SPDIF 출력 지원을 위해 해당 파일에서 관련 오디오 출력이 정의되어 있는지 확인해야 합니다.

예제 설정(XML 방식):

<audioPolicyConfiguration>
    <module name="audio_hw" halVersion="3.0">
        <mixPorts>
            <mixPort name="HDMI" role="sink">
                <profile format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="44100,48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
            </mixPort>
            <mixPort name="SPDIF" role="sink">
                <profile format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="44100,48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
            </mixPort>
        </mixPorts>
    </module>
</audioPolicyConfiguration>

이 설정은 HDMI와 SPDIF 오디오 출력이 16비트 PCM 오디오를 44.1kHz 및 48kHz로 지원하도록 구성합니다.

3.2 Audio HAL에서 HDMI 및 SPDIF 경로 추가

오디오 HAL(audio_hw.c 또는 audio_hw.cpp)에서 HDMI와 SPDIF를 지원하는 경로를 추가해야 합니다.

예제 코드:

static int adev_open_output_stream(struct audio_hw_device *dev,
                                  audio_io_handle_t handle,
                                  audio_devices_t devices,
                                  audio_output_flags_t flags,
                                  struct audio_config *config,
                                  struct audio_stream_out **stream_out) {
    if (devices & AUDIO_DEVICE_OUT_HDMI) {
        ALOGI("Opening HDMI audio output");
        // HDMI 오디오 출력 초기화
    }
    if (devices & AUDIO_DEVICE_OUT_SPDIF) {
        ALOGI("Opening SPDIF audio output");
        // SPDIF 오디오 출력 초기화
    }
    return 0;
}

위 코드는 HDMI 및 SPDIF 출력 장치가 선택되었을 때 적절한 오디오 경로를 설정하는 로직을 포함하고 있습니다.

3.3 Audio Policy 설정

Android 오디오 시스템에서 HDMI 및 SPDIF 오디오 출력을 정책적으로 관리하려면 audio_policy_configuration.xml 파일에서 해당 출력이 적절한 규칙에 따라 동작하도록 설정해야 합니다.

예제 정책 설정:

<devicePort type="AUDIO_DEVICE_OUT_HDMI" role="sink" name="HDMI">
    <profile format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="44100,48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
<devicePort type="AUDIO_DEVICE_OUT_SPDIF" role="sink" name="SPDIF">
    <profile format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="44100,48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>

이 설정을 통해 HDMI와 SPDIF가 오디오 정책에 따라 동작하도록 구성됩니다.

4. HDMI 및 SPDIF 출력 테스트

4.1 HDMI 및 SPDIF 장치 연결 확인

Android의 ADB 명령어를 활용하여 현재 연결된 오디오 디바이스를 확인할 수 있습니다.

adb shell dumpsys audio

이 명령을 실행하면 현재 시스템에서 활성화된 오디오 장치 목록을 확인할 수 있습니다.

4.2 HDMI 및 SPDIF 오디오 출력 테스트

음성 출력을 테스트하려면 tinyplay 또는 aplay 유틸리티를 사용할 수 있습니다.

adb shell tinyplay /vendor/etc/test.wav -d 0

이 명령을 실행하면 HDMI 또는 SPDIF 오디오 출력이 정상적으로 동작하는지 확인할 수 있습니다.

5. 문제 해결

5.1 HDMI 및 SPDIF 오디오 출력이 작동하지 않는 경우

  1. audio_policy_configuration.xml 또는 audio_policy.conf 설정이 올바르게 구성되었는지 확인
  2. adb shell dumpsys media.audio_flinger를 실행하여 HDMI 및 SPDIF 오디오 장치가 감지되었는지 확인
  3. adb shell setprop vendor.audio.hdmi.enabled 1 명령을 사용하여 HDMI 오디오 출력을 강제로 활성화
  4. 커널 로그(dmesg | grep audio), logcat 로그(adb logcat -b audio)를 확인하여 오류 메시지 분석

6. 결론

Android에서 HDMI 및 SPDIF 오디오 출력을 지원하려면 Audio HAL, Audio Policy, ALSA 설정을 적절히 구성해야 합니다. HDMI는 멀티채널 오디오 및 다양한 포맷을 지원하며, SPDIF는 광 또는 동축 연결을 통해 안정적인 오디오 출력을 제공합니다. 본 포스팅에서 다룬 설정을 적용하면 Android 디바이스에서 HDMI 및 SPDIF 오디오 출력을 효과적으로 활용할 수 있습니다.

728x90
반응형