Python 尝试 "SDL_GetWindowID" 时出错 "expected LP_SDL_Window"

Python error "expected LP_SDL_Window" when trying "SDL_GetWindowID"

我正在尝试获取 SDL window 的 Window ID,以提供给 VLC,以便它可以播放 window 中的视频。

作为 Python 的新手,我隐约意识到这与变量类型转换有关,以便与 SDL 配合使用,并使用正确的 python 绑定...

错误的行是"win_id = SDL_GetWindowID(window)"

这是我的代码;

import sys
import sdl2.ext
import vlc

import ctypes
from sdl2 import *

RESOURCES = sdl2.ext.Resources(__file__, "resources")
sdl2.ext.init()

window = sdl2.ext.Window("Hello World!", size=(640, 480))
window.show()

factory = sdl2.ext.SpriteFactory(sdl2.ext.SOFTWARE)
sprite = factory.from_image(RESOURCES.get_path("hello.bmp"))

spriterenderer = factory.create_sprite_render_system(window)
spriterenderer.render(sprite)


vlcInstance = vlc.Instance("--no-xlib")
player = vlcInstance.media_player_new()
win_id = SDL_GetWindowID(window)
player.set_xwindow(win_id)
player.set_mrl("agro.mp4")
player.play()

processor = sdl2.ext.TestEventProcessor()
processor.run(window)
sdl2.ext.quit()

您使用 SDL_GetWindowID 得到的是 SDL 的内部 window ID,它本身在例如事件。你需要的是X11 window ID,可以通过SDL_GetWindowWMInfo获取。然而,这需要一些 SDL 版本控制的技巧,例如(如果 SDL 版本更改但 pysdl2 未更新,我不确定在 python 中调用它是否安全):

wminfo = SDL_SysWMinfo();
SDL_GetVersion(wminfo.version);
if(SDL_GetWindowWMInfo(window.window, wminfo) == 0):
    print("can't get SDL WM info");
    sys.exit(1);

win_id = wminfo.info.x11.window;

然后用那个win_id喂给vlc。