(GTK3+;libvlc)未正确渲染视频覆盖,且未应用视频不透明度

(GTK3+;libvlc)未正确渲染视频覆盖,且未应用视频不透明度,gtk,gtk3,libvlc,gtk#,libvlcsharp,Gtk,Gtk3,Libvlc,Gtk#,Libvlcsharp,我将libvlcsharp(使用GtkDrawingArea)嵌入到我的GtkSharp(GTK3)应用程序中 我想在透明视频上显示透明覆盖(标签和图像)(使用GtkOverlay) 我在这方面遇到了两个问题: 不透明度不应用于视频视图 像标签这样的覆盖在视频顶部是不透明的 该示例适用于webview(webkit2)。 使用vlclib是否可以使用透明覆盖的透明视频视图 Program.cs: [STAThread] 公共静态void Main(字符串[]args) { Core.Ini

我将libvlcsharp(使用GtkDrawingArea)嵌入到我的GtkSharp(GTK3)应用程序中 我想在透明视频上显示透明覆盖(标签和图像)(使用GtkOverlay)

我在这方面遇到了两个问题:

  • 不透明度不应用于视频视图
  • 像标签这样的覆盖在视频顶部是不透明的
该示例适用于webview(webkit2)。 使用vlclib是否可以使用透明覆盖的透明视频视图

Program.cs:

[STAThread]
公共静态void Main(字符串[]args)
{
Core.Initialize();
Application.Init();
var app=新应用程序(“org.GtkTest4.GtkTest4”,GLib.ApplicationFlags.None);
应用程序注册(GLib.cancelable.Current);
使用(var libvlc=new libvlc())
使用(var mediaPlayer=newmediaplayer(libvlc))
{
var window=CreateWindow();
app.AddWindow(窗口);
window.StyleContext.AddProvider(Styles.GetProvider(),UInt32.MaxValue);
window.StyleContext.AddClass(“红色背景”);
var videoView=new videoView(){MediaPlayer=MediaPlayer,Valign=Align.Center,Halign=Align.Center};
var label=new label{Text=“Lorem Ipsum Dolor”,Valign=Align.Center,Halign=Align.Fill};
var overlay=new overlay{Valign=Align.Fill,Halign=Align.Fill};
videoView.SetSizeRequest(500400);
不透明度=0.5;
叠加。添加(视频视图);
叠加。添加叠加(标签);
窗口。添加(覆盖);
ShowAll();
videoView.MediaPlayer.Play(新媒体(libvlc,“video.mp4”);
Application.Run();
}
}
VideoView.cs:

公共类视频视图:绘图区域,IVideoView
{
私人媒体播放器(MediaPlayer);;
公共视频视图()
{
已实现+=(s,e)=>Attach();
}
[DllImport(“libgdk-3.so.0”,CallingConvention=CallingConvention.Cdecl)]
内部静态外部单元gdk_x11_窗口_get_xid(IntPtr gdkWindow);
公共媒体播放器
{
get=>\u mediaPlayer;
设置
{
_mediaPlayer=价值;
附加();
}
}
无效附加()
{
如果(!IsRealized | | | u mediaPlayer==null)
{
返回;
}
MediaPlayer.XWindow=gdk_x11_window_get_xid(window.Handle);
}
void Detach()
{
如果(!IsRealized | | | u mediaPlayer==null)
{
返回;
}
MediaPlayer.XWindow=0;
}
公共空间处置()
{
分离();
base.Dispose();
}
}
vlclib控制台输出:

libEGL warning: DRI2: failed to authenticate
Failed to open VDPAU backend libvdpau_nvidia.so: cannot open shared object file: No such file or directory
使用过的工具:

  • .NET核心3.0.100
  • GtkSharp 3.22.24
  • LibVLCSharp 3.2.3
操作系统:

  • Ubuntu 18.04.3 LTS

我认为GTK3没有得到官方支持。我可能会在接下来的几天内尝试,但没有承诺…libvlc有一个官方的GTK2示例,但不确定是否有帮助…感谢您的回答,@cube45 GTK3没有得到libvlc的官方支持?据我所知,LibVLCSharp已经实现了GTK#2,但没有实现GTK#3。这与libvlc无关,因为libvlc只知道X标识符。我并不是说它在GTK#2中工作得更好,我只是说我们从未尝试过,也从未尝试过在任何GTK#实现上添加覆盖。那么我想我的问题只与libvlc有关。在我的示例(VideoView.cs)中,我将DrawingArea的xid传递给MediaPlayer.XWindow。vlclib创建本机窗口,由于某些原因,无法将这些窗口用作覆盖或设置不透明度。