代码目录:E:\vlc-3.0.12\doc\libvlc\QtPlayer
编译成立,但是
libvlc_new返回NULL
老子就是要搞他,在网上的其他人成功的代码帮助下要把他搞成
(背景是:老板要在Qt界面里播放视频文件,本身知道opencv会更简单点,但是想自己去根据文档再熟悉vlc sdk的使用)
libvlc_new返回NULL原因是plugins目录没加入,整个vlc的依赖包括*.dll *.exe 及plugins目录,解决了这个问题继续搞
最后搞出来,在win环境下的Qt应用总结:
1.严禁用linux风格的路径"F:/Exercises/OpenSources/."
在vs中不用操心这点,在vs中最好是li风格路径
2.用std::string保存路径,以下形式不会乱码
std::string path = "F:\\Material\\Video\\res3.avi";
m_media = libvlc_media_new_path(m_vlcInstance, path.c_str());
3.即使原始字符串也不能解决乱码,以下试过仍会乱码
char ch_array[] = {R"(F:/Material/Video/res3.avi)"};
char ch_array[] = {R"(F:\\Material\\Video\\res3.avi)"};
char ch_array[] = {R"(F:\Material\Video\res3.avi)"};
//同样无果,禁用上面三种的形式
4.保存路径可以是char[]用以先,实际2方法中c_str()得到的就是char*
//以下两种是正确示范
char ch_array[] = {"F:\\Material\\Video\\res3.avi"};
const char* path = "F:\\Material\\Video\\res3.avi";
//以下是错误示范:
char ch_array[] = {R"(F:\Material\Video\res3.avi)"};
QString filepath.toUtf8().data();
5.另一个办法,将QString获取的字符串处理,同样得到没乱码的字符串
//QString保存的路径处理下
//前有QString filepath声明
filepath = QDir::toNativeSeparators(filepath).toUtf8().constData();
//转成char*传给目标
libvlc_media_t *vlcMedia = libvlc_media_new_path(vlcInstance, filepath.toUtf8().data());
//抑或使用qtu()宏,转成char*传给目标
libvlc_media_t *vlcMedia = libvlc_media_new_path(vlcInstance, qtu(filepath));
启动文件路径对话框
QString filepath = QFileDialog::getOpenFileName(this, tr("Load a file"), "~");