gpt4 book ai didi

c++ - 使用 QT 4.7.4 窗口显示带有 libvlc 2.1.0 的视频

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:26:09 27 4
gpt4 key购买 nike

我一整天都在尝试在我的 QT 项目中显示一个带有 VLC 的视频。

如果我不使用 libvlc_media_player_set_hwnd 行,视频就可以正常播放。如果没有这一行,VLC 会自动生成一个窗口。这是非常重要的,然后我可以选择我自己的窗口或子窗口区域来显示视频。

错误是:main vout 显示错误:置顶失败

我使用了不同的 QT 类来显示视频。 QVideoWidget、QWidget、QFrame 和 QMainWindow。它没有改变任何东西。 (操作系统是windows)

互联网上有很多不同的解决方案。我想它应该适用于下面的代码。

我也尝试了不同版本的libvlc,但错误总是一样。

播放()方法:

void MainWindow::play()
{

libvlc_instance_t * inst;
libvlc_media_player_t *mp;
libvlc_media_t *m;

/* Load the VLC engine */
inst = libvlc_new (0, NULL);

if(!inst)
std::cout << "Can't load video player plugins" << std::endl;


m = libvlc_media_new_path (inst, "content.avi");

/* Create a media player playing environment */
mp = libvlc_media_player_new_from_media (m);

HWND windowID = reinterpret_cast<HWND>(this->winId());

/* It works without this line */
libvlc_media_player_set_hwnd(mp, windowID);


/* play the media_player */
libvlc_media_player_play (mp);

Sleep(uint(10000)); /* Let it play a bit */

/* Stop playing */
libvlc_media_player_stop (mp);

/* Free the media_player */
libvlc_media_player_release (mp);

libvlc_release (inst);

}

主要.cpp:

QApplication a(argc, argv);
MainWindow w;
w.show();

w.play();

return a.exec();

提前感谢您提供有用的信息。

达里安

最佳答案

解决方案

感谢您的建议。您的两个提示在我的应用程序中都运行良好。我的错误是这条线 sleep (uint(10000));

我认为如果我不使用 libvlc_media_player_set_hwnd,VLC 将创建自己的事件循环。但是在我设置 HWND 的情况下,我自然必须使用我自己的事件循环。由于 sleep 以及随后的停止和释放,VLC 在 Qt 事件循环开始之前完成。

将这几行换成其他方法,合理使用即可解决。

关于c++ - 使用 QT 4.7.4 窗口显示带有 libvlc 2.1.0 的视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19068887/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com