我們剛剛開始嘗試gStreamer-Sharp,以瞭解是否可以創建管道,以便爲我們的.NET軟件編寫媒體播放器組件。我們運行在Windows/.NET上,而不是Linux/Mono。gStreamer-Sharp - pipeline無法鏈接
一些管道可以創建,鏈接和運行沒有問題,但其他管道失敗。這裏缺少文檔和支持,所以我希望在這個領域裏有一些具有一定知識的人在我的問題的驅使下給我一些提示。
無論如何,沒有進一步的道理,我有一個下面的再生案例,無法從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);
}
}
}
有趣的是,當我們從命令行啓動它時,上述管道工作正常。我們有一種模糊的感覺,我們可能在設置管道時在這裏做了不正確的事情。它似乎在將demux鏈接到mpeg4元素時失敗了。
正如我所建議的,一些管道工作。我們也可以在媒體播放器中播放test.mp4並在別處加載它(例如,使用命令行中的gStreamer)。
我們也不確定如何開啓gStreamer-Sharp的日誌記錄功能,或者甚至有可能。如果有人能幫助我,我會非常感激。
謝謝。