C# Vlc.DotNet 库 - 空引用异常

Posted

技术标签:

【中文标题】C# Vlc.DotNet 库 - 空引用异常【英文标题】:C# Vlc.DotNet Libraries - Null reference exception 【发布时间】:2012-04-27 17:11:00 【问题描述】:

最近在尝试决定让 VLC 播放器进入 C# 的最佳方式时偶然发现了这篇文章。

Does VLC media player have a C# interface?

我下载了 dll 文件并将它们导入到我的项目中,但后来意识到我并不真正知道如何使用它们。有没有人有这个有效的代码的 Windows 窗体示例?尝试过的代码如下-

Vlc.DotNet.Core.Medias.MediaBase media = new
    Vlc.DotNet.Core.Medias.PathMedia(@"C:\Users\...\SampleVideos\Wildlife.wmv");

Vlc.DotNet.Forms.VlcControl vlcControl1 = new Vlc.DotNet.Forms.VlcControl();
vlcControl1.Play(media);

我也在我项目的 main program.cs 中使用此链接中的代码。

http://vlcdotnet.codeplex.com/wikipage?title=Forms

我遇到的当前问题是,在启动项目时它会抛出 NullReferenceException ->

vlcControl1.Play(media)

问题似乎出在 vlcControl 上,但我不确定原因。文档似乎很薄,我在 codeplex 站点上找不到任何工作示例。如果有人有工作表单示例或知道我可能遗漏了什么,请告诉我!

这是发生错误时出现的调用堆栈 ->

RTSPViewer_Test.exe!RTSPViewer_Test.Form1.Form1_Load(object sender, 
    System.EventArgs e) Line 31 + 0xd bytes C#
RTSPViewer_Test.exe!RTSPViewer_Test.Program.Main() Line 30 + 0x1d bytes C#

在调试时,VLC 控件的 Media 和 Medias 属性似乎都为空。当试图将控件的 Media 设置为在

之上创建的媒体对象时
NullReferenceException

检查 VLC 控制对象 Media 确实等于 null,但我不确定为什么它没有正确初始化。

【问题讨论】:

是否有可能包含 NullReferenceException 的调用堆栈?鉴于上面的代码,vlcControl1 或 media 都不能为空,因此异常必须来自 Play 方法内部的逻辑。 看看这个vlcdotnet.codeplex.com/… 今天晚些时候我会添加调用堆栈信息,我认为这可能是函数调用中的某些内容。 @Raj,该示例是为旧版本的 DLL 编写的,并且大部分代码不再有效。 【参考方案1】:

我无法使用最新版本的 Vlc.dotnet 库使程序运行,而是使用 Raj 发布的 alpha 2 版本。我使用 VLC 版本 1.1.5 和这个库来让基本示例正常运行。我的最终目标是从 rtsp 设备流式传输,但是这个库似乎还不支持此功能。

对于任何希望使用良好的 C# 包装器来使用 VLC 的人来说,这是一个很好的例子 -

http://www.codeproject.com/Articles/109639/nVLC

在这个项目中使用了 VLC 1.1.1 中的库文件并且工作正常。几乎支持您通常在 VLC 中使用的所有功能,但让您可以更好地控制使用它们的目的。

在使用这些 DLL 包装器时出现的许多问题都源于源 DLL 文件的不正确版本。 VLC 库目前只有 32 位,因此您需要确保使用 x86 模式进行编译,否则 libvlc.dll 将无法正确加载并导致应用程序崩溃。使用上面的示例,您还必须确保 libvlc.dll、libvlccore.dll 和 plugins 文件夹包含在 build 文件夹中。

【讨论】:

以上是关于C# Vlc.DotNet 库 - 空引用异常的主要内容,如果未能解决你的问题,请参考以下文章

C# FFmpeg推流Vlc.DotNet拉流优化参数

C# Cognex,为啥他说空引用异常 [重复]

HTTP客户端NoCache标志导致空引用异常C# [重复]

如何避免在迭代集合为 null 时抛出的空引用异常?

使用 C# 8 的可空引用类型

从另一个类引用时获取窗口抛出空指针异常