gpt4 book ai didi

c++ - 如何设置 GstPlayer 管道?

转载 作者:太空狗 更新时间:2023-10-29 23:13:31 25 4
gpt4 key购买 nike

我构建了一个自定义 GStreamer 管道,我将使用它来播放 RTSP 流。同时我想创建一个新的 GstPlayer 来使用这个管道。问题是我看不到设置 GstPlayer 管道的方法(唯一相关的方法是 gst_player_get_pipeline() 。我不明白怎么没有办法自定义GstPlayer 的管道。这似乎是基本功能,所以我一定遗漏了一些东西。

我的管道:

  GstElement *pipeline, *source, *filter, *sink;

// Create pipeline elements
pipeline = gst_pipeline_new ("vdi-pipeline");
source = gst_element_factory_make ("rtspsrc", "vdi-source");
filter = gst_element_factory_make ("decodebin", "vdi-filter");
sink = gst_element_factory_make ("appsink", "vdi-sink");
if (!source || !filter || !sink)
{
__android_log_print (ANDROID_LOG_ERROR, "Error", "A GstElement could not be created. Exiting.");
return;
}

// Add elements to pipeline
gst_bin_add_many (GST_BIN (pipeline), source, filter, sink, NULL);

// Link elements together
if (!gst_element_link_many (source, filter, sink, NULL)) {
__android_log_print (ANDROID_LOG_ERROR, "Warning", "Failed to link elements!");
}

最佳答案

但是您可以开箱即用地通过 GstPlayer 播放 rtsp。为什么要自定义管道?播放器正在使用接受任何类型的 url 的 playbin。它会根据正在播放的内容动态创建管道。

如果你真的不能使用 playbin,那么修补播放器本身呢?我不认为它是为自定义管道设计的。但你可以破解它 here .

然后您将在 rtspsrc 上挂接 newpads 和其他回调而不是 playbin.. 和其他东西 - 我猜您不想要这个。

另一种方法是 - 当 playbin 构造管道时,它在内部使用 rtspsrc - 你可以从管道对象中获取这个元素并更改一些参数..但要小心,因为在播放期间更改参数非常棘手..

更新:

嗯,我想我以某种方式忽略了 appsink.. 我想你可以设置 playbin 属性 audio-sink或视频接收器覆盖它以使用 appsink。

但是你仍然必须以某种方式从 GstPlayer 中获取 playbin 元素或在初始化时设置 playbin 参数(我不知道如何) - 在这种情况下我会在 IRC(freenode,#gstreamer)上询问你是否要正确的方向。

也许更好的方法是使用 decodebin 甚至 playbin 创建您自己的应用程序并向那里传递 appsink 元素。如果您不玩游戏而是处理缓冲区,为什么要使用 GstPlayer?

HTH

关于c++ - 如何设置 GstPlayer 管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38646333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com