在Kurento Media Server中使用gstreamer过滤器究竟是什么呢?

时间:2017-02-24 09:51:08

标签: webrtc gstreamer kurento

根据Kurento文件:http://doc-kurento.readthedocs.io/en/stable/mastering/kurento_API.html

GstreamerFilter是一个通用过滤器接口,允许在Kurento Media Pipelines中使用GStreamer过滤器。

我试图在谷歌上找到 Gstreamer过滤器,我发现只有 Gstreamer插件。 (https://gstreamer.freedesktop.org/documentation/plugin-development/advanced/

这是否意味着我可以使用Kurento Gstreamer过滤器,添加rtph264depay和rtmpsink等插件?

e.g。

WebRTC endpoint > RTP Endpoint > (rtph264depay) Gstreamer filter  (rtmpsink) > RTMP server.

所有没有单独安装Gstreamer?

3 个答案:

答案 0 :(得分:1)

GstreamerFilter允许您使用本机GStreamer过滤器配置过滤器(与使用gst-launch-1.0时相同)。例如,以下Kurento过滤器允许在KMS中水平旋转您的媒体:

GStreamerFilter filter = new GStreamerFilter.Builder(pipeline, "videoflip method=horizontal-flip").build();

说,关于你的问题,据我所知,我想是的,你可以使用GstreamerFilter来使用rtph264depay和rtmpsink。

答案 1 :(得分:1)

Boni Garcia的代码是对的。

但如果你更换&#34; videoflip method = horizo​​ntal-flip&#34; as&#34; rtmpsink location = rtmp://deque.me/live/test01" ;,您将收到一条错误消息:&#34;如果命令无效,则pad模板不匹配&#34;。< / p>

你可以更深入地检查来自https://github.com/Kurento/kms-filters的kms-filter源代码,在kms-filters / src / server / implementation / objects / GStreamerFilterImpl.cpp中有一行:

     99     throw KurentoException (MARSHALL_ERROR,
     100                             "Given command is not valid, pad templates does not match");

我担心你不能使用GstreamerFilter将数据发送到rtmp服务器,也许你应该稍微修改源代码。

答案 2 :(得分:0)

Kurento

只看source - GStreamerFilter仅限于简单的GStreamer插件。他们拒绝垃圾箱,我不知道如何指定/隔离多个打击垫,所以它可能不会这样做。

(编辑:也许我在这里错了 - 我还在学习。我看到调音台example隔离了媒体类型,这让我觉得有可能这样做了)

gstreamer的

另一方面,安装gstreamer不应该是那么多开销 - 然后将输出RTP连接链接到可以输出RTMP的gst-launch管道。只是糟透了,你无法使用kurento来管理整个管道。

(我不知道那条管道会是什么样的 - 自己调查一下。它是这样的:

gst-launch-1.5 -v \ udpsrc port=9999 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! mux. \ multifilesrc location=sample.aac loop=1 ! aacparse ! mux. \ mpegtsmux name=mux mux. ! rtpmp2tpay ! queue ! udpsink host=10.20.20.20 port=5000

但是我在这里伪装音频并且没有完整的流程工作)

回到kurento

进一步的探索表明,Composite MediaElement可能会起作用(tl; dr:no):

Composite composite = new Composite.Builder(pipeline).build();
HubPort in_audio = new HubPort.Builder(composite).build();
HubPort in_video = new HubPort.Builder(composite).build();
HubPort out_composite = new HubPort.Builder(composite).build();

GStreamerFilter filter = new GStreamerFilter.Builder(pipeline, "rtmpsink location=rtmp://127.0.0.1/live/live_stream_720p").build();

webRtcEndpoint.connect(in_audio, MediaType.AUDIO);
webRtcEndpoint.connect(in_video, MediaType.VIDEO);

out_composite.connect(filter);

导致(kurento日志):

...15,011560 21495 [0x4f01700]   debug KurentoWebSocketTransport WebSocketTransport.cpp:422 processMessage()  Message: >{"id":28,"method":"create","params":{"type":"GStreamerFilter","constructorParams":{"mediaPipeline":"5751ec53_kurento.MediaPipeline","command":"rtmpsink location=rtmp://127.0.0.1/live/live_stream_720p"},"properties":{},"sessionId":"d8abb1d8"},"jsonrpc":"2.0"}<
...15,011862 21495 [0x4f01700]   debug KurentoGStreamerFilterImpl GStreamerFilterImpl.cpp:47 GStreamerFilterImpl()  Command rtmpsink location=rtmp://127.0.0.1/live/live_stream_720p
...15,015698 21495 [0x4f01700]   error filterelement             kmsfilterelement.c:148 kms_filter_element_set_filter() <kmsfilterelement0>  Invalid factory "rtmpsink", unexpected pad templates
...15,016841 21495 [0x4f01700]   debug KurentoWebSocketTransport WebSocketTransport.cpp:424 processMessage()  Response: >{"error":{"code":40001,"data":{"type":"MARSHALL_ERROR"},"message":"Given command is not valid, pad templates does not match"},"id":28,"jsonrpc":"2.0"}

即。失败。