linux - 通过 pulseaudio 在 hdmi 上的 DTS 或 AC-3 实时编码器
问题描述
这是我的问题,我的笔记本电脑(Debian 8)通过 HDMI 连接到我的电视,它本身通过 SPDIF 光缆连接到我的 5.1 家庭影院。而 SPDIF 只允许使用 PCM 编码的单声道、立体声声道或使用杜比格式的多声道,例如 DTS 或 AC-3 编码。
我的系统正确检测到约束:
cat /proc/asound/card0/eld#0.0
monitor_present 1
eld_valid 1
monitor_name LG TV
connection_type HDMI
eld_version [0x2] CEA-861D or below
edid_version [0x3] CEA-861-B, C or D
manufacture_id 0x6d1e
product_id 0x1
port_id 0x0
support_hdcp 0
support_ai 1
audio_sync_delay 0
speakers [0xffff] FL/FR LFE FC RL/RR RC FLC/FRC RLC/RRC FLW/FRW FLH/FRH TC FCH
sad_count 4
sad0_coding_type [0x1] LPCM
sad0_channels 2
sad0_rates [0x14e0] 32000 44100 48000 96000 192000
sad0_bits [0xe0000] 16 20 24
sad1_coding_type [0x2] AC-3
sad1_channels 6
sad1_rates [0xe0] 32000 44100 48000
sad1_max_bitrate 640000
sad2_coding_type [0xa] E-AC-3/DD+ (Dolby Digital Plus)
sad2_channels 6
sad2_rates [0xe0] 32000 44100 48000
sad3_coding_type [0x7] DTS
sad3_channels 6
sad3_rates [0xc0] 44100 48000
sad3_max_bitrate 1536000
我已经在网上查看了大多数主题在 2012 年充其量已经过时了。我找到了第一个解决方案,a52 alsa 插件,但不幸的是,我觉得它不起作用或pulseaudio 没有读取配置。
#####
# Description: Pour utiliser le plugin a52 d'alsa avec PulseAudio. Les valeurs par défaut sont channels 6 (valeurs possible 2,4,6), bitrate 448 kbit/s par défaut et fréquence échantillonnage 48000 Hz (44100 ou 48000 possible).
# A mettre dans ~/.asoundrc .
pcm.a52hdmi {
@args [CARD]
@args.CARD {
type string
default 0
}
type rate
slave {
pcm {
type a52
bitrate 640
rate 48000
channels 6
card $CARD
}
rate 48000 #nécessaire pour PulseAudio
}
}
我找到了一种使用 mpv 观看电影的方法,它可以工作,因为如果我理解得很好,它会绕过 pulseaudio。
mpv --fullscreen --speed=24000/25025 --hwdec=vaapi --deinterlace=yes --af scaletempo,lavcac3enc=tospdif=yes:bitrate=640:minch=2
但我真的希望 pulseaudio 在 AC-3 或 DTS 中工作,通过 SPDIF 获得 5.1 声音。
解决方案
我找到了第一个解决方案,但我有一些噪音和音频开裂: https ://github.com/darealshinji/dcaenc
但似乎 alsa 无法分配正确的设备编号 :((我只是添加了我通过设备 $DEV 更改设备 2 并将其添加到输入参数)
结果 :
hdmi:CARD=HDMI,DEV=0 HDA Intel HDMI, HDMI 0 (HDMI Audio Output)
hdmi:CARD=HDMI,DEV=1 HDA Intel HDMI, HDMI 1 (HDMI Audio Output)
hdmi:CARD=HDMI,DEV=2 HDA Intel HDMI, HDMI 2 (HDMI Audio Output)
hdmi:CARD=HDMI,DEV=3 HDA Intel HDMI, HDMI 3 (HDMI Audio Output)
hdmi:CARD=HDMI,DEV=4 HDA Intel HDMI, HDMI 4 (HDMI Audio Output)
...
a52:CARD=HDMI,DEV=3 HDA Intel HDMI, HDMI 0 (IEC958 (AC3) Digital Surround 5.1 with all software conversions)
a52:CARD=HDMI,DEV=7 HDA Intel HDMI, HDMI 1 (IEC958 (AC3) Digital Surround 5.1 with all software conversions)
a52:CARD=HDMI,DEV=8 HDA Intel HDMI, HDMI 2 (IEC958 (AC3) Digital Surround 5.1 with all software conversions)
a52:CARD=HDMI,DEV=9 HDA Intel HDMI, HDMI 3 (IEC958 (AC3) Digital Surround 5.1 with all software conversions)
a52:CARD=HDMI,DEV=10 HDA Intel HDMI, HDMI 4 (IEC958 (AC3) Digital Surround 5.1 with all software conversions)
a52upmix:CARD=HDMI,DEV=3 HDA Intel HDMI, HDMI 0 (IEC958 (AC3) Digital Surround 2.0 -> 5.1 with all software conversions)
a52upmix:CARD=HDMI,DEV=7 HDA Intel HDMI, HDMI 1 (IEC958 (AC3) Digital Surround 2.0 -> 5.1 with all software conversions)
a52upmix:CARD=HDMI,DEV=8 HDA Intel HDMI, HDMI 2 (IEC958 (AC3) Digital Surround 2.0 -> 5.1 with all software conversions)
a52upmix:CARD=HDMI,DEV=9 HDA Intel HDMI, HDMI 3 (IEC958 (AC3) Digital Surround 2.0 -> 5.1 with all software conversions)
a52upmix:CARD=HDMI,DEV=10 HDA Intel HDMI, HDMI 4 (IEC958 (AC3) Digital Surround 2.0 -> 5.1 with all software conversions)
dcahdmi:CARD=HDMI,DEV=0 HDA Intel HDMI, HDMI 0 (DTS Encoding through HDMI)
dcahdmi:CARD=HDMI,DEV=1 HDA Intel HDMI, HDMI 1 (DTS Encoding through HDMI)
dcahdmi:CARD=HDMI,DEV=2 HDA Intel HDMI, HDMI 2 (DTS Encoding through HDMI)
dcahdmi:CARD=HDMI,DEV=3 HDA Intel HDMI, HDMI 3 (DTS Encoding through HDMI)
dcahdmi:CARD=HDMI,DEV=4 HDA Intel HDMI, HDMI 4 (DTS Encoding through HDMI)
...
完整配置: https ://pastebin.com/ZtF9npBD
我希望能很快收到你的回信 ;)