![](/img/trans.png)
[英]How to play video from a data stream using libvlcsharp (c# or vb.net)
[英]Parsing libvlcsharp video loaded from stream not working
我想在 WinForms 中使用 C# 播放帶有 libvlcsharp 的視頻(mp4)。
我使用 Stream 加載媒體,因為該文件將被加密,然后我將設法在將其加載到媒體 object 之前對其進行解密。
我成功加載並播放了視頻,但我無法解析它。
我想解析它,以便在播放之前能夠獲取 Duration、AudioChannels、FrameRate、Width 等信息。
我調用 Parse(嘗試使用每種選項組合),IsParsed 屬性更改為 True,但 ParsedStatus 不是 Done 而是 Skipped。
如果我直接加載文件(不使用 srtream)它可以解析。
我的代碼:
Stream contentStream = System.IO.File.Open("c:\test\test.mp4" , System.IO.FileMode.Open);
Media Video = new Media(utils.GetLibVLC(), new StreamMediaInput(contentStream));
Video.Parse(MediaParseOptions.ParseLocal | MediaParseOptions.ParseNetwork);
while (!Video.IsParsed)
System.Threading.Thread.Sleep(50);
if (Video.ParsedStatus == MediaParsedStatus.Done) //Video.ParsedStatus equals to Skipped
{
long Duration = Video.Duration;
foreach (MediaTrack track in Video.Tracks)
{
switch (track.TrackType)
{
case TrackType.Audio:
int AudioChannels = (int)track.Data.Audio.Channels;
int AudioRate = (int)track.Data.Audio.Rate;
break;
case TrackType.Video:
float FrameRate = track.Data.Video.FrameRateNum / track.Data.Video.FrameRateDen;
int Width = (int)track.Data.Video.Width;
int Height = (int)track.Data.Video.Height;
float Ratio = (float)Width / Height;
break;
}
}
}
(我知道這很危險,我稍后會改進它)。
有人知道如何解析通過 stream 加載的視頻嗎?
我的解釋是不支持。
我看過這行代碼: https://code.videolan.org/videolan/vlc/-/blob/a4ca0de9e087e6a6a3bb86c585cf29ad5c553576/src/preparser/preparser.c#L362 ,這似乎意味着如果解析被跳過不是網絡也不是文件。
如果你想要這個功能,你可以在 videolan 的 bugtracker 上提出這個問題。
你試過這個嗎?
var parseStatusTask = Task.Run(async () => await Video.Parse(MediaParseOptions.ParseNetwork));
parseStatusTask.Wait();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.