DTS ou AC-3 realtime encodeur sur HDMI via pulseaudio

Tags: #<Tag:0x00007f63e5687630>

Bien bonjour,

Voici mon problème mon pc sous debian est connecté à ma TV via HDMI, elle même connecté à mon home cinéma 5.1 via un câble optique SPDIF.

Contrainte : le SPDIF ne supporte que le mono / stéréo via PCM ou des formats compréssé Dolby Surround (AC-3 ou DTS).

Les contraintes sont bien détectés par le système :

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

J’ai déjà effectué des recherches sur le net la majorité des topics sont vraiment dépassé au mieux 2012. J’ai tout de même trouver une première solution le plugin a52 de alsa mais malheureusement j’ai bien l’impression que cela ne fonctionne pas voir même que les configs ne soit pas lue par 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
   }
}

J’ai trouver un moyen qui fonctionne pour lire mes films car si j’ai bien compris celui-ci passe bypass en quelque sorte pulseaudio.
mpv --fullscreen --speed=24000/25025 --hwdec=vaapi --deinterlace=yes --af scaletempo,lavcac3enc=tospdif=yes:bitrate=640:minch=2

Mais j’aimerais franchement que pulseaudio fonctionne de lui-même en AC-3 ou DTS pour transmettre mon son 5.1 au travers du SPDIF.

Je vous remercie d’avance pour vos futures réponses.

Hideman

Je vois bien que mon sujet ne passionne pas des masses mais j’aimerais bien apporter une solution à mon problème. En espérant que ce petit up me permettras d’avoir d’éventuel commentaire de la communauté :wink:

5j de plus et absence de résultat :disappointed_relieved: je désespère un peu de trouver une solution à mon problème …

Bonjour,

J’ignorais que pulseaudio pouvait avoir connaissance du câble SPDIF…

Je ne dois pas avoir bien compris l’énoncé du problème.

EDIT

Cette page faisait-elle partie des lectures ?

PulseAudio - Official Kodi Wiki

Oui je suis tomber sur cette page mais elle ne répond pas à mon problème car elle supose que c’est l’ordi qui a une sortie optique et donc en mode «Passthrougth».

En effet je n’est pas de carte son disposant du sortie optique SPDIF, j’ai une sortie HDMI (video + audio) qui est connecté à ma TV et qui elle est relié en cable optique SPDIF sur mon Home Cinema 5.1 (qui lui n’a rien d’autre comme entrée intéressante).

Donc ce que je rechercher c’est un encoder temps reel qui m’encode en DTS ou AC-3 avant d’evoyer le flux sur mon HDMI.

VLC doit savoir faire : voir menu convertir/diffuser

1 J'aime

Du genre comme ça ?

Tutoriel : Lire le DTS et le Dolby Digital (AC3) en bitstream avec VLC | HDfever

L’idée c’est pas qu’une appli ou une autre marche l’idée c’est que pulseaudio marche en 5.1 je n’est pas envie de paramètrer chaque appli de mon système étant donner que le mixeur de son système doit pouvoir le gérer avec une configuration ou une autre.

Creuser peut-être côté gstreamer

Désolé j’ai cherché un peu partout mais non gstreamer est une librairie son pour développement d’app.

J’ai trouvé ceci qui fonctionne mais avec du grésillement :

Sinon il y a aussi cette solution :
https://www.linuxquestions.org/questions/linux-hardware-18/alsa-sb-omni-surround-5-1-iec958-is-routed-to-the-analog-output-not-the-digital-output-4175609669/

Le problème étant que pour le moment je n’arrive pas a faire en sorte que ce soit le bon device et du coup je ne peux l’utiliser :frowning: (je précise que j’ai changé device 2 par device $DEV et je l’ai ajouté au params d’entré)

Ceci produit :

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)
...

Config complete : https://pastebin.com/ZtF9npBD

Toute aide serais bienvenu :wink:

Finalement je ne comprends pas bien où es ton problème. Chez moi, quand je lance pavucontrol (donc la config de pulseaudio en mode graphique) dans l’onglet configuration je trouve une petite fenêtre “prifil”. En déroulant le popup de cette fenêtre il me propose des tas de configurations dont des hdmi en 5.1. N’ayant pas le matériel qui va avec je n’ai pas testé. Mais c’est cet onglet que j’utilise pour envoyer le son en stéréo sur ma télé via hdmi.

Le problème c’est que le hdmi 5.1 (que je dispose également) est un multicannels standard donc 6 flux audio non compressé.
Hors pour faire simple mon home cinéma ne supporte pas ce type de flux (car connecté via cable spdif optique et pas d’autre entré)
Donc je dois lui fournir un flux audio parmi les 4 format supporté

  • pcm mono
  • pcm stéréo
  • Dolby DTS (multichannels compressé)
  • Dolby AC3 (multichannels compressé)

Donc seuls les deux derniers peuvent me convenir.
Actuellement je suis parvenu a faire fonctionner dcaenc depuis le repo git mais celui-ci me procure des bruits et des grésillement sur mon flux audio mais je retrouve bien un 5.1 sur mon home cinema (Dolby Atmos Sample https://thedigitaltheater.com/index.php/dolby-trailers/)

Voila pour tout résumé :wink:

utile ?
https://kodi.wiki/view/PulseAudio#PulseAudio_Output_Configuration

J’étais déjà tombé sur ce topic j’ai bien les mêmes configs en mode Hdmi Stereo (les checkboxs ac3/eac3/dts/mpeg) mais ceci ne fonctionnais pas (même activé séparément)

J’ai enfin compris ton problme !
Sous Windows :
http://www.ac3filter.net/
http://www.ac3filter.net/files/docs/ac3filter_1_30b/spdif_eng.html#x1-60001.4
Pas évident de trouver l’équivalent sous Linux :
https://alternativeto.net/software/ac3filter/
À la limite : tenter une compilation de ac3filter (il a besoin de ffmpeg, ce qui n’est pas un problème sous Linux) ou tenter une install sous Wine ?

Ac3filter :
L’idée c’est d’avoir un plugin alsa qui encode on the fly soit en DTS soit en AC3 hors ayant fait le tour de ac3filter j’ai bien l’impression qu’il ne peut être intégré avec alsa.

Avec l’avancement de mes recherches voici ce que je suis parvenu à comprendre :

  • Pulseaudio est «un simple» mixer de son système étant donné qu’il utilise alsa pour produire le son de sortie sur le bon device.
  • Pourquoi ne pas simplement utilisé alsa car celui-ci ne permet en quelque sorte un seul flux audio donc une seule appli monopolise le son. Pulseaudio est donc là pour récupéré le son de toute les applis système en faire un mix et se proposé en tant que seul flux pour alsa.
  • Ensuite alsa gère des profiles audio pour chaque cartes / sorties son et il permet l’intégration de plugins pour modifier le son on the fly.

L’idée est donc tout simplement d’ajouter le bon plugin alsa pour encoder en DTS ou AC3 (je préférerais DTS ayant un bitrate maximal supérieur) et d’avoir le bon profil pour mon HDMI.

En parcourant les profils HDMI disponible de base il ce trouverais que la possibilité d’utiliser dcaenc et a52 était pris en charge dans la limite où ils sont installé. J’ai donc cherché dans les repos apt dcaenc et a52 semble être retirés … Je suis donc passé par les repos git et compilé / intallé «à la mano»

Mais maintenant j’ai deux problèmes :

  • A52 «récupère» je ne sais pourquoi les mauvais devices (3, 7, 8, 9, 10) au lieu de (0, 1, 2, 3, 4) comme les profils standard HDMI ou comme mon cher ami dcahdmi le profil utilisant dcaenc
  • Mon second problème étant que dcaenc (alias profil dcahdmi) est fonctionnel mais me produit un son dégueulasse a souhait :frowning:
CF: Message précédent

utile(bis) ?
https://alsa.opensrc.org/DigitalOut#Digital_surround_passthrough

J’ai bien l’impression qu’il ne traite qu’une sortie spdif direct (via carte graphique) et pas un pré traitement avant output hdmi.
Je te remercie pour le temps que tu m’accorde :wink:

C’est vrai.
autre piste :
https://wiki.gentoo.org/wiki/ALSA#S.2FPDIF
Ils évoquent un plugin ffmpeg (lecture rapide de ma part, vérifie !).
À voir également :
https://packages.debian.org/source/stretch/alsa-plugins
en fait : libasound2-plugins