簡體   English   中英

如何在 C# 中以編程方式控制 VLC?

[英]How to programmatically control VLC in C#?

我的應用程序需要跟蹤 VLC 中播放的視頻及其在進度條中的進度。

最好是,如果 VLC 已經在運行,最好收集信息,而不必使用命令行變量重新啟動它。

我嘗試使用控制台,但它沒有讀取所有控制台輸出,並且在寫入輸入流時沒有任何命令起作用。

Process p;

p = new Process();
p.StartInfo.FileName = @"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe";
p.StartInfo.Arguments = "\"C:\\mymovie.mp4\"";

p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;

p.OutputDataReceived += (sender2, e2) =>
{
    if (e2.Data != null)
    {
        Log("Received output data: " + e2.Data);
    }
    else
        Log("Received output data: NULL");
};

p.ErrorDataReceived += (sender2, e2) =>
{
    if (e2.Data != null)
    {
        Log("Received Error data: " + e2.Data);
    }
    else
        Log("Received Error data: NULL");
};

p.Start();

p.BeginOutputReadLine();
p.BeginErrorReadLine();

p.StandardInput.WriteLine("get_time");
p.StandardInput.Flush();

然后我嘗試通過套接字使用遠程控制 API。

IPEndPoint socketAddress = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 54165);
var vlcServerProcess = Process.Start(@"-I rc --rc-host " + socketAddress.ToString());

但是,此方法會打開一個控制台窗口,我不希望該窗口可見並在沒有任何 GUI 控件的情況下播放視頻。 只是一個 d3d 窗口。

如果可以通過這種方法,我需要它看起來和行為完全正常。

有沒有其他簡單的方法可以獲取當前播放的文件名和進度,而無需編寫 VLC 插件或讀取進程的內存?

我也一直在嘗試使其正常工作,我設法發送了不返回任何結果(倒帶等)的基本命令,但是一旦我嘗試接收數據,我就遇到了問題。
直到我發現這個...

https://gist.github.com/SamSaffron/101357

啟動 vlc 時對命令行參數進行一些調整 - 我將它們更改為

--extraintf="rc" --rc-host="localhost:8812"

是需要的,但我仍然得到命令控制台(盡管由於某種原因我無法通過它輸入命令)而且緩沖似乎有點不穩定,但這可能是由於我而不是源代碼造成的。 然而,它主要做我目前需要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM