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

l8409 2013-07-03 06:24:02
问题:

客户端上有个打开文件的按钮,响应函数如下:
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;
}


到底是什么问题,求解啊
...全文
1354 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
a525087259 2015-11-10
  • 打赏
  • 举报
回复
你没释放掉现有的资源,释放就行了。 if (m_pvlc_player) { libvlc_media_player_stop(m_pvlc_player); libvlc_media_player_release(m_pvlc_player); m_pvlc_player = nullptr; }
糊涂*张 2015-01-30
  • 打赏
  • 举报
回复
问题解决了吗? 我也是有时调用Stop接口的时候卡死
  • 打赏
  • 举报
回复
这个问题解决了吗?
yzm19840803 2013-07-15
  • 打赏
  • 举报
回复
应该是VLC的Stop接口,调用的时候卡死,好像是出现了死锁!
123_321_1234567 2013-07-11
  • 打赏
  • 举报
回复
OnPlay的18行之前,先将media_player释放掉: if( m_MediaPlayer ) { libvlc_media_player_stop(m_MediaPlayer,ex); libvlc_media_player_release (m_MediaPlayer); m_MediaPlayer = NULL; }
Eleven 2013-07-04
  • 打赏
  • 举报
回复
你得先看看卡在哪里吧,是否需要先将先前的那个关闭?
l8409 2013-07-04
  • 打赏
  • 举报
回复
怎么没有人应呢,高手快进啊

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧