Gstreamer multicast RTP: неожиданный разрыв в аудио - PullRequest
0 голосов
/ 04 мая 2018

Я получаю ошибки, когда запускаю Gstreamer audio RTP на BeagleBone Black .

Вот команда Gstreamer TX :

# gst-launch-1.0 -v filesrc location="test.wav" ! decodebin ! audioconvert ! rtpL16pay ! queue ! udpsink host=224.0.0.10 auto-multicast=true port=5555 --gst-debug-level=3

Установка конвейера на PAUSED ... Трубопровод ОБОРОТАЕТ ... /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind.GstPad:src: заглавные буквы = аудио / x-wav /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind.GstPad:src: caps = NULL 0: 00: 00.300210292 23288 0x75490 FIXME
дефолт gstutils.c: 3648: gst_pad_create_stream_id_printf_valist: Создание случайного идентификатора потока, рассмотрите возможность реализации детерминированного способа создания идентификатора потока /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstWavParse:wavparse0.GstPad:src: caps = audio / x-raw, формат = (строка) S16LE, макет = (строка) с чередованием, channel = (int) 2, channel-mask = (bitmask) 0x0000000000000003, Скорость = (целое) 48000 /GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps = аудио / x-raw, макет = (строка) с чередованием, скорость = (int) 48000, формат = (строка) S16BE, каналы = (int) 2, Канал-маска = (битовая маска) 0x0000000000000003 /GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0.GstPad:src: caps = application / x-rtp, media = (string) audio, тактовая частота = (int) 48000, имя-кодировки = (строка) L16, параметры-кодировки = (строка) 2, каналы = (int) 2, полезная нагрузка = (int) 96, ssrc = (uint) 3613934853, timestamp-offset = (uint) 2678744220, seqnum-offset = (uint) 28780 /GstPipeline:pipeline0/GstQueue:queue0.GstPad:src: caps = application / x-rtp, media = (string) audio, тактовая частота = (int) 48000, имя-кодировки = (строка) L16, параметры-кодировки = (строка) 2, каналы = (int) 2, полезная нагрузка = (int) 96, ssrc = (uint) 3613934853, timestamp-offset = (uint) 2678744220, seqnum-offset = (uint) 28780 /GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application / x-rtp, media = (string) audio, тактовая частота = (int) 48000, имя-кодировки = (строка) L16, параметры-кодировки = (строка) 2, каналы = (int) 2, полезная нагрузка = (int) 96, ssrc = (uint) 3613934853, timestamp-offset = (uint) 2678744220, seqnum-offset = (uint) 28780 /GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = application / x-rtp, media = (string) audio, тактовая частота = (int) 48000, имя-кодировки = (строка) L16, параметры-кодировки = (строка) 2, каналы = (int) 2, полезная нагрузка = (int) 96, ssrc = (uint) 3613934853, timestamp-offset = (uint) 2678744220, seqnum-offset = (uint) 28780 /GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0.GstPad:sink: caps = аудио / x-raw, макет = (строка) с чередованием, скорость = (int) 48000, формат = (строка) S16BE, каналы = (int) 2, Канал-маска = (битовая маска) 0x0000000000000003 /GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps = аудио / x-raw, формат = (строка) S16LE, макет = (строка) с чередованием, каналы = (int) 2, маска канала = (битовая маска) 0x0000000000000003, Скорость = (целое) 48000 /GstPipeline:pipeline0/GstDecodeBin:decodebin0.GstDecodePad:src_0.GstProxyPad:proxypad1: caps = audio / x-raw, формат = (строка) S16LE, макет = (строка) с чередованием, channel = (int) 2, channel-mask = (bitmask) 0x0000000000000003, rate = (int) 48000 / GstPipeline: pipe0 / GstRtpL16Pay: rtpl16pay0: отметка времени = 2678744220 / GstPipeline: pipe0 / GstRtpL16Pay: rtpl16pay0: seqnum = 28780 Трубопровод ПРЕРОЛИРОВАН ... Настройка конвейера на ИГРА ... Новые часы: GstSystemClock

И Gstreamer RX Команда:

# gst-launch-1.0 -v udpsrc multicast-group=224.0.0.10 auto-multicast=true port=5555 caps='application/x-rtp, media=(string)audio, clock-rate=(int)48000, encoding-name=(string)L16, encoding-params=(string)2, channels=(int)2, payload=(int)96' ! rtpL16depay ! audioconvert ! alsasink --gst-debug-level=3

Установка конвейера на PAUSED ... Трубопровод работает и не нуждается PREROLL ... Настройка конвейера на PLAYING ... Новые часы: GstSystemClock /GstPipeline:pipeline0/GstUDPSrc:udpsrc0.GstPad:src: caps = application / x-rtp, media = (string) audio, тактовая частота = (int) 48000, имя-кодировки = (строка) L16, параметры-кодировки = (строка) 2, каналы = (int) 2, Полезная нагрузка = (INT) 96 /GstPipeline:pipeline0/GstRtpL16Depay:rtpl16depay0.GstPad:src: caps = аудио / x-raw, формат = (строка) S16BE, макет = (строка) с чередованием, скорость = (int) 48000, каналы = (int) 2, маска канала = (битовая маска) 0x0000000000000003 0: 00: 00.357371500 23249
0xefb20 WARN alsa conf.c: 4694: snd_config_expand: ошибка alsalib: неизвестные параметры {AES0 0x02 AES1 0x82 AES2 0x00 AES3 0x02} 0: 00: 00.358214833 23249 0xefb20 WARN alsa pcm.c: 2239: snd_pcm_open_noupdate: ошибка alsalib: неизвестный PCM по умолчанию: {AES0 0x02 AES1 0x82 AES2 0x00 AES3 0x02} /GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps = аудио / x-raw, макет = (строка) с чередованием, скорость = (int) 48000, формат = (строка) S16LE, каналы = (int) 2, Канал-маска = (битовая маска) 0x0000000000000003 /GstPipeline:pipeline0/GstAlsaSink:alsasink0.GstPad:sink: caps = аудио / x-raw, макет = (строка) с чередованием, скорость = (int) 48000, формат = (строка) S16LE, каналы = (int) 2, Канал-маска = (битовая маска) 0x0000000000000003 /GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps = аудио / x-raw, формат = (строка) S16BE, макет = (строка) с чередованием, скорость = (int) 48000, каналы = (int) 2, Канал-маска = (битовая маска) 0x0000000000000003 /GstPipeline:pipeline0/GstRtpL16Depay:rtpl16depay0.GstPad:sink: caps = application / x-rtp, media = (string) audio, тактовая частота = (int) 48000, имя-кодировки = (строка) L16, параметры-кодировки = (строка) 2, каналы = (int) 2, полезная нагрузка = (int) 96 0: 00: 08.472125917 23249 0xefb20 WARN
audiobasesink gstaudiobasesink.c: 1593: gst_audio_base_sink_get_alignment: Неожиданный разрыв звуковых меток времени +0: 00: 00.010583333, повторное синхронизирование 0: 00: 51.970270047 23249 0xefb20 WARN
audiobasesink gstaudiobasesink.c: 1593: gst_audio_base_sink_get_alignment: Неожиданный разрыв звуковых меток времени +0: 00: 00.002729166, повторное синхронизирование 0: 00: 51.982288589 23249 0xefb20 WARN
audiobasesink gstaudiobasesink.c: 1593: gst_audio_base_sink_get_alignment: Неожиданный разрыв звуковых меток времени +0: 00: 00.010437500, повторное синхронизирование 0: 00: 52.010382256 23249 0xefb20 WARN
audiobasesink gstaudiobasesink.c: 1593: gst_audio_base_sink_get_alignment: Неожиданный разрыв звуковых меток времени +0: 00: 00.006937500, повторное синхронизирование 0: 00: 52.029231922 23249 0xefb20 WARN
audiobasesink gstaudiobasesink.c: 1593: gst_audio_base_sink_get_alignment: Неожиданный разрыв звуковых меток времени +0: 00: 00.003535166, RESYNCING

Как вы можете видеть выше, предупреждения выводятся на консоль, а звук трещит и шумит:

аудиобазинк Есть идеи решить эту проблему?

Спасибо за чтение.

Обратите внимание, что обе команды Gstreamer работают на одном компьютере. на самом деле он действует как локальная звуковая петля.

1 Ответ

0 голосов
/ 04 мая 2018

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

...