[英]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.