Потоковая передача закодированного файла iLBC через RTP с помощью gstreamer

Я пытаюсь создать конвейер gstreamer для создания аудиопотока RTP с кодеком iLBC. Gstreamer (начиная с версии 0.10) имеет элемент конвейера полезной загрузки RTP с именем rtpilbcpay. К сожалению, реализовано только пакетирование RTP, сам кодек не включен в gstreamer. Используя справочный код в RFC 3951, я создал закодированные файлы iLBC для образцов аудио, которые я надеялся использовать с gstreamer. Однако, когда я передаю эти файлы в rtpilbcpay, я получаю ошибки. Я "заглушил" трубу до минимума с помощью fakesink, ошибка все та же:

~/tmp% gst-launch-0.10 filesrc location=sample.ilbc ! rtpilbcpay ! fakesink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstRTPILBCPay:rtpilbcpay0: Element doesn't implement handling of this stream. Please file a bug.
Additional debug info:
gstbasertpaudiopayload.c(909): gst_base_rtp_audio_payload_handle_buffer (): /GstPipeline:pipeline0/GstRTPILBCPay:rtpilbcpay0:
subclass did not configure us properly
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

Я, вероятно, упустил важную часть (объявление формата файла?) в конвейере, поскольку я также не смог воспроизвести файл, закодированный PCMU (буферы queue тоже не помогли):

~/tmp% gst-launch-0.10 filesrc location=sample.pcmu ! mulawdec ! fakesink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstFileSrc:filesrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2550): gst_base_src_loop (): /GstPipeline:pipeline0/GstFileSrc:filesrc0:
streaming task paused, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

Это просто ошибка или неправильная настройка конвейера (надеюсь, последнее)? Какие еще «склеивающие» элементы мне нужны в пайплайне?


person paprika    schedule 19.12.2010    source источник


Ответы (1)


Действительно, я что-то упустил. Как только я добавил правильный MIME-тип и некоторые другие атрибуты, я смог успешно передать файл в загрузчик RTP:

~/tmp% gst-launch-0.10 filesrc location=sample.ilbc \
  ! 'audio/x-iLBC,rate=8000,channels=1,mode=20' \
  ! rtpilbcpay ! udpsink host=192.168.10.23 port=5555
person paprika    schedule 20.12.2010