我将 libvlcsharp(使用 GtkDrawingArea)嵌入到我的 GtkSharp(GTK 3)应用程序中,我想在透明视频(使用 GtkOverlay)上显示透明覆盖(标签和图像)。
我遇到了两个问题:
- 不透明度不适用于视频视图
- 像标签这样的叠加层在视频顶部不透明
该示例适用于 webview (webkit2)。使用 vlclib 甚至可以实现带有透明覆盖的透明视频视图吗?
程序.cs:
[STAThread]
public static void Main(string[] args)
{
Core.Initialize();
Application.Init();
var app = new Application("org.GtkTest4.GtkTest4", GLib.ApplicationFlags.None);
app.Register(GLib.Cancellable.Current);
using (var libvlc = new LibVLC())
using (var mediaPlayer = new MediaPlayer(libvlc))
{
var window = CreateWindow();
app.AddWindow(window);
window.StyleContext.AddProvider(Styles.GetProvider(), UInt32.MaxValue);
window.StyleContext.AddClass("red-background");
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(500, 400);
videoView.Opacity = 0.5;
overlay.Add(videoView);
overlay.AddOverlay(label);
window.Add(overlay);
window.ShowAll();
videoView.MediaPlayer.Play(new Media(libvlc, "video.mp4"));
Application.Run();
}
}
视频视图.cs:
public class VideoView : DrawingArea, IVideoView
{
private MediaPlayer _mediaPlayer;
public VideoView()
{
Realized += (s, e) => Attach();
}
[DllImport("libgdk-3.so.0", CallingConvention = CallingConvention.Cdecl)]
internal static extern uint gdk_x11_window_get_xid(IntPtr gdkWindow);
public MediaPlayer MediaPlayer
{
get => _mediaPlayer;
set
{
_mediaPlayer = value;
Attach();
}
}
void Attach()
{
if (!IsRealized || _mediaPlayer == null)
{
return;
}
MediaPlayer.XWindow = gdk_x11_window_get_xid(Window.Handle);
}
void Detach()
{
if (!IsRealized || _mediaPlayer == null)
{
return;
}
MediaPlayer.XWindow = 0;
}
public void Dispose()
{
Detach();
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