解析从流加载的 libvlcsharp 视频不起作用
Parsing libvlcsharp video loaded from stream not working
我想在 WinForms 中使用 C# 使用 libvlcsharp 播放视频 (mp4)。
我使用 Stream 加载媒体,因为文件将被加密,然后我将在将其加载到媒体对象之前设法对其进行解密。
我成功加载并播放了视频,但我无法解析它。
我想对其进行解析,以便能够在播放之前获取诸如持续时间、音频通道、帧率、宽度等信息。
我调用 Parse(尝试了所有选项组合),IsParsed 属性 更改为 True 但 ParsedStatus 不是完成而是跳过。
如果我直接加载文件(不使用 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;
}
}
}
(我知道这个时候很危险,以后会改进的)
有人知道如何解析通过流加载的视频吗?
我的解释是不支持。
我看过这行代码: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();
我想在 WinForms 中使用 C# 使用 libvlcsharp 播放视频 (mp4)。
我使用 Stream 加载媒体,因为文件将被加密,然后我将在将其加载到媒体对象之前设法对其进行解密。
我成功加载并播放了视频,但我无法解析它。
我想对其进行解析,以便能够在播放之前获取诸如持续时间、音频通道、帧率、宽度等信息。
我调用 Parse(尝试了所有选项组合),IsParsed 属性 更改为 True 但 ParsedStatus 不是完成而是跳过。
如果我直接加载文件(不使用 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;
}
}
}
(我知道这个时候很危险,以后会改进的)
有人知道如何解析通过流加载的视频吗?
我的解释是不支持。
我看过这行代码: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();