有一个 C# 应用程序通过 NuGet 包使用 LibVLC。
这些是包:
使用这些包,可以很容易地将一些媒体播放器放入您的 WinForms 应用程序中。
您所要做的就是初始化一个播放器并Media为其赋予一个新值:
LibVLCSharp.Shared.LibVLC libVLC = new LibVLC();
LibVLCSharp.WinForms.VideoView videoView;
videoView.MediaPlayer = new LibVLCSharp.Shared.MediaPlayer(libVLC)
videoView.MediaPlayer.Play(new Media(libVLC, "URL", FromType.FromLocation));
Run Code Online (Sandbox Code Playgroud)
现在我想向媒体播放器提供缓冲区中的自定义数据。它可以是字节数组,或任何类似的东西。(数据应被视为来自有效的 mp4 文件逐块)。
如何在 C# 中使用 libVLC 实现这一目标?
我已经在code.videolan网站上测试了 WPF 最小 VLC 示例,它工作正常。
然后,我按照此处的Microsoft 文档准备(并打包)适用于 Windows 商店的应用程序,基本上它不再适用于无法加载库消息。
将 .package 项目设置为启动项目会产生问题。这些是我拥有的包,尽管 UWP 刚刚添加并且没有在任何地方引用。

在 VLC 示例中,它直接在 Core.Initialize() 上失败;
void VideoView_Loaded(object sender, RoutedEventArgs e)
{
Core.Initialize();
_libVLC = new LibVLC();
_mediaPlayer = new MediaPlayer(_libVLC);
VideoView.Media
_mediaPlayer.Play(new Media(_libVLC, new Uri("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")));
}
Run Code Online (Sandbox Code Playgroud)
如果我输入:
var url = typeof(LibVLC).Assembly.Location;
Run Code Online (Sandbox Code Playgroud)
在 Core.ini 行之前检查它的位置,我得到:“C:\Users\franc\Documents\Visual Studio 2019\Projects\VLCTest\VLC.Package\bin\x64\Debug\AppX\VLCTest\LibVLCSharp.dll ”
这对我来说看起来不错..有什么建议吗?
编辑1
AppX 文件夹下未创建 libvlc 文件夹:
{“无法加载所需的本机库。\r\n您是否为目标平台从 nuget 安装了最新的 LibVLC 包?\r\n搜索路径包括
...项目\VLCTest\VLC.Package\bin\x64\Debug\AppX\VLCTest\libvlc\win-x64\libvlc.dll,...项目\VLCTest\VLC.Package\bin\x64\Debug\AppX\ VLCTest\libvlc\win-x64\libvlccore.dll; ...项目\VLCTest\VLC.Package\bin\x64\Debug\AppX\VLCTest\libvlc\win-x64\libvlc.dll,...项目\VLCTest\VLC.Package\bin\x64\Debug\AppX\ VLCTest\libvlc\win-x64\libvlccore.dll; ...Projects\VLCTest\VLC.Package\bin\x64\Debug\AppX\VLCTest\libvlc.dll,"}
因此,我手动将文件夹从 WPF 项目(不再是启动项目)复制到新的 .package 启动项目 AppX ... 文件夹中,它起作用了。
对此有什么干净的解决方案?
我有 libvlcsharp 为我的 windows 和 android 项目工作。它非常好且易于使用!但是我找不到任何让播放自动循环的方法
我尝试使用 mediaplayer 事件处理程序在创建后重新开始播放并将选项传递到媒体中,但似乎没有任何效果。
我试过:
loopSong = new Media(VLCMediaPlayer.LibVLC, xmlLoader.GetResourceStream(loopFileName));
loopSong.AddOption(":no-video");
loopSong.AddOption(":input-repeat");
Run Code Online (Sandbox Code Playgroud)
和
static VLCMediaPlayer()
{
Core.Initialize();
LibVLC = new LibVLC();
MediaPlayer = new MediaPlayer(LibVLC);
MediaPlayer.EndReached += MediaPlayer_EndReached;
}
private static void MediaPlayer_EndReached(object sender, EventArgs e)
{
MediaPlayer.Stop();
MediaPlayer.Play();
}
Run Code Online (Sandbox Code Playgroud)
播放只是停止。事件被调用,但 MediaPlayer.WillPlay 是假的,调用 Play 什么也不做。
我正在使用 LibVLCSharp(Vlc nuget 包)设置视频播放器。我已经安装了VideoLAN.LibVLC.Windows 和LibVLCSharp.WPF,到目前为止,在我编译和运行我的代码之前,一切看起来都很好。
我的 VideoPlayer.xaml.cs 文件是这样的:
using LibVLCSharp.Shared;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using MediaPlayer = LibVLCSharp.Shared.MediaPlayer;
namespace kec_wpf.ui
{
public partial class VideoPlayer : Window
{
LibVLC _libVLC;
MediaPlayer _mediaPlayer;
public VideoPlayer()
{
InitializeComponent();
var label = new Label
{
Content = "TEST",
HorizontalAlignment = HorizontalAlignment.Right,
VerticalAlignment = VerticalAlignment.Bottom,
Foreground = new SolidColorBrush(Colors.Red)
};
test.Children.Add(label);
_libVLC = new LibVLC();
_mediaPlayer = new MediaPlayer(_libVLC);
// we need the VideoView to be fully loaded before …Run Code Online (Sandbox Code Playgroud) 我一直在寻找有关如何为 LibVLCSharp 创建自定义播放控件的指南,这似乎每个人都在谈论,但我从未找到过指南。
我只是想为底部播放控制面板创建其他带有事件处理程序的按钮,我尝试过这个,但在进入中断模式时在启动时抛出System.NullReferenceException异常......
<vlc:MediaPlayerElement MediaPlayer="{Binding MediaPlayer}" LibVLC="{Binding LibVLC}">
<vlc:MediaPlayerElement.PlaybackControls>
<vlc:PlaybackControls>
<vlc:PlaybackControls.ControlTemplate>
<ControlTemplate>
<Grid>
<StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand">
<Button Grid.Column="0" Text="Test 1"/>
<Button Grid.Column="1" Text="Test 1"/>
<Button Grid.Column="2" Text="Test 1"/>
</StackLayout>
</Grid>
</ControlTemplate>
</vlc:PlaybackControls.ControlTemplate>
</vlc:PlaybackControls>
</vlc:MediaPlayerElement.PlaybackControls>
</vlc:MediaPlayerElement>
Run Code Online (Sandbox Code Playgroud)
我希望它像原来的一样(自动隐藏,点击时覆盖等),但具有我自己的布局和控件。我还考虑过使用现有的并尝试覆盖它们的处理程序来实现我自己的代码并覆盖每个按钮的 text 属性以更改其图标但没有找到任何帮助的运气。
提前谢谢^_^