帮酷LOGO
0 0 评论
文章标签:换行  VLC  WRAP  Libvlc  
VLCWrapper/VLCWrapper1.jpg

介绍

本文为 libvlc -library提供了一些 C++-wrapper,它是VLC媒体播放器的核心组件。 我正在寻找一个简单的方法来集成我的C++ 应用程序中的视频播放。 因为我已经使用了,多年来用于媒体播放,所以我开始使用,。 结果是在libvlc库周围有一个小包装器。 它提供基本媒体播放功能。 因为 v.2.0的libvlc -library已经被发布下来,所以你可以在商业应用程序中使用它。 这里arcticle中的所有源代码均在CPOL下授权。 因为这个包装器比功能完整的包装器更快,所以请原谅任何 Bug。 ; )

我写了一个简单的媒体播放器,它使用了 VLCWrapper。 它包含在上面的示例中。

背景

VLC API的最重要信息来源是VLC网站的开发者部分和VLC源代码的文档化的标题。 如果你打算用VLC编写代码或者扩展 VLCWrapper,项目网站是一个很好的起点。

VLCWrapper到LIBVLC的C++-Interface

" vlcwrapper.h"中声明的接口很小,成员函数是非常自解释的。 为了得到很好的忽略,我去掉了评论。 查看来源以获得更多信息。

class VLCWrapper
{
 std::auto_ptr<VLCWrapperImpl> pImpl_;
 public:
 VLCWrapper();
 ~VLCWrapper();
 void SetOutputWindow(void* pHwnd);
 void SetEventHandler(VLCEventHandler event, void* pUserData);
 void OpenMedia(constchar* pMediaPathName);
 void Play();
 void Pause();
 void Stop();
 int64_t GetLength();
 int64_t GetTime();
 void SetTime(int64_t newTime);
 void Mute(bool mute = true);
 bool GetMute();
 int GetVolume();
 void SetVolume(int volume);
}; 

使用代码

使用 VLCWrapper 很容易。 第一步是将新的VLCWraper 作为窗口类的成员和视频输出的CStatic 添加:

#include"VLCWrapper.h"class CVlcDialogDlg : public CDialog
{
 VLCWrapper vlcPlayer_; /// Our VLCWrapper.. 
. 
 //{{AFX_DATA(CVlcDialogDlg) CStatic vlcControl_; /// This CStatic will be used as device context by libvlc.. . . 
 //}}AFX_DATA

现在,我们可以在 OnInitDialog() 中初始化 VLCWrapper:

BOOL CVlcDialogDlg::OnInitDialog()
{
 CDialog::OnInitDialog();
 vlcPlayer_.SetOutputWindow((void*)vlcControl_.GetSafeHwnd()); // the CStatic will be // used for video output vlcPlayer_.SetEventHandler(&HandleVLCEvents, this); // Set handler for vlc events

VLC事件的处理程序函数:

staticvoid HandleVLCEvents(const VLCEvent* pEvent, void* pUserData)
{
 CVlcDialogDlg* pDlg = reinterpret_cast<CVlcDialogDlg*>(pUserData); 
 switch(pEvent->type)
 {
 case libvlc_MediaPlayerTimeChanged:
 TRACE("VLC_EVT_TIME_CHANGED: new_time %d[ms]n",
 pEvent->u.media_player_time_changed.new_time);
 if(pDlg)
 pDlg->UpdatePosition();
 break;
 } 
}

现在一切就绪,你可以开始播放媒体文件了。 比如," Load"和" Play"成员如下所示:

void CVlcDialogDlg::OnBnClickedButtonLoad()
{
 CFileDialog dlgFile(TRUE);
 if(dlgFile.DoModal()==IDOK)
 {
 CString file=dlgFile.GetPathName();
 vlcPlayer_.OpenMedia((LPCTSTR)file);
 vlcPlayer_.Play(); // start media after loading.... }
}void CVlcDialogDlg::OnBnClickedButtonPlay()
{
 vlcPlayer_.Play();
}

历史记录

  • 03/12/2012
    • 更新了项目以使用 VLC 2.0.0.
    • 已经更改许可证到 CPOL。
  • 09/20/2011
    • 添加了 Visual Studio 2010的项目文件。
  • 09/11/2010
    • 一些错误修正和优化,感谢 heretic13.
    • 使用 VLC 1.1.4构建演示。
    • 删除了演示&源链接的旧 VLCDialog 版本,需要 VLC <1.1.
  • 05/29/2010
    • 更新了项目以使用 VLC 1.1
    • 包装器现在为它的Pimpl使用了一个 auto_ptr。 我没有在第一个版本中删除 Pimpl
    • 修正了一个重绘错误。
    • 感谢 Haim Engler 关于内存泄漏和重绘问题的提示 !
  • 08/20/2009
    • Pimped VLCDialog ( 调整大小,图标按钮)
    • class VLCWrapperclass VLCWrapperImpl 中关闭对" StdAfx.h"的依赖
    • 已经将已经否决的函数调用替换为 libvlc ;现在 SetOutputWindow(void*) 将一个 void 指针指向窗口句柄
  • 08/14/2009
    • 示例列表中的一些修复
  • 08/11/2009
    • 初始版本


文章标签:WRAP  换行  VLC  Libvlc  

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语