双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

libvlc视频开发遇到了个大问题,求解啊

l8409 l8409 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题:

客户端上有个打开文件的按钮,响应函数如下:
void CViewLeft::OnMyButtonFileOpen()
{
CFileDialog fd(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, NULL);

CString oriPath;
CMainFrame* pMain = (CMainFrame*)AfxGetApp()->m_pMainWnd;

if (fd.DoModal() == IDOK){
if (pMain->m_MediaPlayer != NULL &&
libvlc_media_player_get_state(pMain->m_MediaPlayer, &pMain->m_media_ex) == libvlc_Playing){
libvlc_media_player_stop(pMain->m_MediaPlayer, &pMain->m_media_ex);
}
pMain->m_strPath = fd.m_ofn.lpstrFile;
pMain->m_strPath.Format("%s", pMain->OnAnsiToUtf8());

pMain->OnPlay();
}
}


第一次打开一个视频文件不会存在问题,可以正常播放,然后再去打开一个文件就会卡死。

OnPlay()函数如下:

void CMainFrame::OnPlay()
{
char path[100];
CViewLeft* pLeftv = (CViewLeft*)m_wndSplitter.GetPane(0, 0);

if (m_strPath.IsEmpty())
return;
strcpy(path, m_strPath);

if (m_pInstance == NULL)
m_pInstance = libvlc_new(vlc_argc, vlc_argv, &m_media_ex);

if (!m_isinit_libex){
libvlc_exception_init(&m_media_ex);
m_libvlc_drawable = (libvlc_drawable_t) pLeftv->GetDlgItem(IDC_MY_MEDIA_PLAY)->GetSafeHwnd();
m_isinit_libex = 1;
}
m_media = libvlc_media_new(m_pInstance, path, &m_media_ex);
m_MediaPlayer = libvlc_media_player_new_from_media(m_media, &m_media_ex);
libvlc_media_player_set_drawable(m_MediaPlayer, m_libvlc_drawable, &m_media_ex);

libvlc_video_set_spu(m_MediaPlayer, 0, &m_media_ex);
libvlc_media_player_play(m_MediaPlayer, &m_media_ex);
libvlc_media_player_set_rate(m_MediaPlayer, 1, &m_media_ex);

pLeftv->m_btnPlay.SetIcon(IDI_ICON2);
pLeftv->m_sliderPro.ShowWindow(SW_SHOW);

m_ls = libvlc_Playing;
}


到底是什么问题,求解啊
...全文

相关推荐

最简单的基于libVLC的例子

本工程是包含了一些基于libVLC的示例程序。一共包含了如下几个子程序。 playerGUI: 最简单的基于libVLC的播放器-图形界面版。 simplest_libvlc_example: 最简单的基于libVLC的播放器。 simplest_libvlc_streamer: 最简单的基于libVLC的推流器。

雷霄骅

libVLC 提取视频帧

但如果你想要在自己的应用程序中处理视频帧(例如进行视频编辑、分析或其他自定义渲染),可以使用 libvlc_video_set_callbacks 来指定自定义的回调函数。如果应用程序需要在视频渲染前对视频帧进行一些处理,那么可以在libvlc_video_lock_cb中进行这些处理,并将处理后的帧数据地址赋值给 *planes。在前面的文章中,我们使用libvlc_media_player_set_hwnd设置了视频的显示的窗口。以下是libvlc_video_lock_cb声明。

灬Sunnnnn

libVLC 视频抓图

libVLC 中通过libvlc_video_take_snapshot核心接口来截图。以下是VLC播放器中使用的截图界面,我们仿照这个做一个界面。首先,你需要初始化 libVLC 实例和媒体播放器对象。1. 初始化 libVLC 和媒体播放器。菜单添加action,并响应槽函数。生成目录下snap.png。

灬Sunnnnn

基于libVLC的视频播放器(支持RTSP协议)

基于libVLC的视频播放器(支持RTSP协议)

DaveBobo

用opencv处理RTSP视频流,其中视频流的采集用libvlc库

用opencv处理RTSP视频流,其中视频流的采集用libvlc库 VLC播放函数封装成一个类,可以直接使用

jianing112
评论 7
收藏 已收藏
分享
返回顶部
l8409
ATL 3,248 成员 48,530 内容