gpt4 book ai didi

c# - gStreamer-Sharp - 管道无法链接

转载 作者:太空宇宙 更新时间:2023-11-03 14:04:44 26 4
gpt4 key购买 nike

我们刚刚开始试用 gStreamer-Sharp,看看我们是否可以创建管道,以便为我们的 .NET 软件编写媒体播放器组件。我们在 Windows/.NET 上运行,而不是 Linux/Mono。

一些管道可以创建、链接和运行没有问题,但其他管道会失败。那里缺乏文档和支持,所以我希望在这方面有一定知识的人能够解决我的问题并给我一些提示。

无论如何,事不宜迟,我在下面有一个无法从 avidemux 元素链接到 mpeg4 元素的重现案例。

using System.Windows.Forms;
using Gst;
using Gst.Interfaces;

namespace gStreamerTest
{
public partial class MainForm : Form
{
// Pipeline.

private Gst.Pipeline MyPipeline;



// Elements.

private Gst.Element MyFileSource, MyDemux, MyMpeg4, MyDrawSink;




// Overlay adapter.

private XOverlayAdapter MySinkAdapter;




public MainForm()
{
InitializeComponent();




// Initialise gStreamer.

Gst.Application.Init();




// Create new pipeline.

MyPipeline = new Gst.Pipeline();

Pipeline pipeline = new Pipeline("pipeline");




// Construct pipeline filesrc -> avidemux -> mpeg4 -> directdrawsink

MyFileSource = ElementFactory.Make("filesrc", "filesrc");
MyFileSource["location"] = "c:\\test.mp4";
MyDemux = ElementFactory.Make("avidemux", "avidemux");
MyMpeg4 = ElementFactory.Make("ffdec_mpeg4", "ffdec_mpeg4");
MyDrawSink = ElementFactory.Make("directdrawsink", "directdrawsink");




// Output to our window.

MySinkAdapter = new XOverlayAdapter(MyDrawSink.Handle);
MySinkAdapter.XwindowId = (ulong)this.Handle;




// Add and link pipeline.

MyPipeline.Add(MyFileSource, MyDemux, MyMpeg4, MyDrawSink);

if (!MyFileSource.Link(MyDemux))
{

}

if (!MyDemux.Link(MyMpeg4))
{
// FAILS HERE
}

if (!MyMpeg4.Link(MyDrawSink))
{

}


// Play video.

MyPipeline.SetState(Gst.State.Playing);
}
}
}

有趣的是,当我们从命令行启动上面的管道时,它工作正常。在设置管道时,我们有一种模糊的感觉,我们可能在这里做错了什么。似乎无法将解复用器链接到 mpeg4 元素。

正如我所建议的,一些管道确实有效。我们还可以在媒体播放器中播放 test.mp4 并将其加载到其他地方(例如,从命令行使用 gStreamer)。

我们也不确定如何为 gStreamer-Sharp 打开日志记录,或者是否可能。如果有人可以在这里帮助我,我将不胜感激。

谢谢。

最佳答案

在项目维护者的一些提示之后,我发现我的代码中有几个错误。第一个是解复用器还不能链接到 mpeg4 元素,因为解复用器只在管道启动时得到它的垫。这意味着我只需要处理 demux 元素上的 PadAdded 事件并在那里链接到 mpeg4 组件。

第二个问题是我需要将颜色空间从 YUV 转换为 RGB,以便 directdrawsink 接受输入。这将涉及我在中间添加一个 ffmpegcolorspace 元素。

最后,我根本无法得到调试输出。解决方案是将 stderr 重定向到 Visual Studio 2010 中的输出窗口。为此,我转到项目属性 -> 调试并将以下命令行参数放入:“2 > ErrorLog.txt”(不带引号)。现在我可以看到 gStreamer 调试输出,它由 GST_DEBUG 环境变量控制。

太棒了!

关于c# - gStreamer-Sharp - 管道无法链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9685318/

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