Потоковый файл в кодировке iLBC через RTP с помощью gstreamer - PullRequest
0 голосов
/ 19 декабря 2010

Я пытаюсь построить конвейер 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 ...

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

1 Ответ

2 голосов
/ 20 декабря 2010

Действительно, я что-то упустил. После того, как я добавил правильный 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
...