0

gstreamerパイプラインを構築して、iLBCコーデックでRTPオーディオストリームを作成しようとしています。Gstreamer(バージョン0.10以降)には、と呼ばれるRTPローダーパイプライン要素がありrtpilbcpayます。残念ながら、RTPパケット化のみが実装されており、コーデック自体はgstreamerに含まれていません。RFC 3951の参照コードを使用して、gstreamerで使用できるようにしたいと考えていたサンプルオーディオ用のiLBCエンコードファイルを作成しました。ただし、これらのファイルをパイプで接続する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 ...

これは単なるバグですか、それともパイプラインの設定が間違っていますか(後者だといいのですが)?パイプラインにはさらにどのような「接着剤」要素が必要ですか?

4

1 に答える 1

2

確かに私は何かが欠けていました。正しい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
于 2010-12-20T00:06:06.960 に答える