gstreamer выбирает один канал и конвертирует в моно (деинтерлейв)

Я создаю аудиопоток с аудиосервера и передаю его на ресивер, и я хотел бы, чтобы ресивер выбрал один канал и преобразовал его в моно.

Код ниже является конвейером моего приемника. Это получает поток rtp.

gst-launch-0.10 -v \
udpsrc multicast-group=224.0.0.7 port=5000 \
! "application/x-rtp,media=audio, clock-rate=44100, width=16, height=16, encoding-name=L16, encoding-params=2, payload=96" \
! gstrtpjitterbuffer latency=200 ! rtpL16depay ! audioconvert ! deinterleave name=d    interleave name=i ! alsasink \
d.src_0 ! queue ! audioconvert !"audio/x-raw-int,channels=1"! i.sink1 \
d.src_0 ! queue ! audioconvert !"audio/x-raw-int,channels=1"! i.sink0

Он будет ничего не слушать, но когда поток пройдет, он выдаст ошибку.

ERROR: from element /GstPipeline:pipeline0/GstUDPSrc:udpsrc0: Internal data flow error.

0

Решение

ты не можешь подключиться d.src_0 дважды.

Вместо этого вы можете отказаться от чередования и просто сконцентрироваться на воспроизведении монопотока (надеюсь, все нормально, я заменил ваш udpsrc с uribin, но конвейер легче читать таким образом):

gst-launch-0.10 -v uridecodebin uri=file://file.ogg ! audioconvert ! \
deinterleave name=d  d.src0 ! queue ! audioconvert ! alsasink

Это, как и ваш конвейер, отменяет перемежение стереопотока и просто берет левый канал (d.src0, используйте d.src1 для другого), который обеспечивает монопоток и передает его в alsasink.

ALSA не возражает против того, будете ли вы передавать на него моно- или стереоданные, но что, если вам явно нужен стереопоток / файл? Просто добавь audiopanorama, Он берет аудиопоток и размещает его где-то между левым и правым динамиком ( panorama параметр по умолчанию равен 0 (это центр) и создает стереопоток:

gst-launch-0.10 -v uridecodebin uri=file://file.mp3 ! audioconvert ! \
deinterleave name=d d.src0 ! queue ! audioconvert ! audiopanorama ! alsasink

Но, как я уже сказал, ALSA (и большинству других звуковых серверов, таких как pulse, osd, …) не важно, подаете ли вы в него моно или стерео, он будет проигрывать его на обоих каналах.

0

Другие решения

Других решений пока нет …