VLC简单创建和错误修复

来源:互联网 发布:男友尺寸知乎 编辑:程序博客网 时间:2024/06/04 21:47

关于VLC SDK的下载

  • http://www.videolan.org/vlc/
  • window下的开发包、安装文件http://www.videolan.org/vlc/download-windows.html

VLC简单创建借鉴

http://blog.sina.com.cn/s/blog_62949ff40101edml.html
1、在工程中设置好vlc的 include和lib路径,一般VLC sdk路径是C:\Program Files\VideoLAN\VLC\sdk
2、复制C:\Program Files\VideoLAN\VLC下面的 libvlc.dll, libvlccore.dll,plugins目录到工程debug目录,如果是release需要复制到release目录,否侧就会出现下面所说的错误。

#include "stdafx.h"#include <iostream>using namespace std;void test1()  {    libvlc_instance_t* vlc_ins    = NULL;      libvlc_media_player_t* vlc_player = NULL;      libvlc_media_t* vlc_media  = NULL;      const char* vlc_args[] = {"-I", "dummy", "--ignore-config", "--extraintf=logger", "--verbose=2"};        //创建一个VLC实例,release版本在此处会crash      vlc_ins = libvlc_new(sizeof(vlc_args) / sizeof(vlc_args[0]), vlc_args);      if (vlc_ins != NULL) {          //创建一个VLC播放器          vlc_player = libvlc_media_player_new(vlc_ins);          if (vlc_player != NULL) {              //通过文件路径创建一个媒体实例              vlc_media = libvlc_media_new_path(vlc_ins, "D:\\visumotionlogo.mp4");              if (vlc_media != NULL) {                  //解析媒体实例                  libvlc_media_parse(vlc_media);                  //获取媒体文件的播放长度,返回ms                  libvlc_time_t duration = libvlc_media_get_duration(vlc_media);                  //此处是获取媒体包含多个的视频和音频轨以及其它类型的轨道信息                  libvlc_media_track_info_t* media_tracks = NULL;                  int trackCount = libvlc_media_get_tracks_info(vlc_media, &media_tracks);                  //这里是释放内存,但我测试的时候会有问题,还没仔细研究是为何                  //free(media_tracks);  //crash?                  //把打开的媒体文件设置给播放器                  libvlc_media_player_set_media(vlc_player, vlc_media);                  // 因为是windows系统,所以需要设置一个HWND给播放器作为窗口,这里就直接使用桌面窗口,这里仅是测试                  libvlc_media_player_set_hwnd(vlc_player, ::GetDesktopWindow());                  //开始播放视频                  libvlc_media_player_play(vlc_player);                  //这里仅是为了打印一些信息出来,20秒后退出                  time_t last_time = time(NULL);                  while ((time(NULL) < (last_time + 20))) {                      Sleep(10);                      //获取当前播放位置                      libvlc_time_t play_time = libvlc_media_player_get_time(vlc_player);                      printf("playing time : %lld ms\r", (__int64)(play_time));                      //获取媒体的状态                      //libvlc_state_t media_state = libvlc_media_get_state(vlc_media);                      //printf("\nmedia state : %d\n", (int)(media_state));                  }                     libvlc_media_player_stop(vlc_player);//停止                  libvlc_media_release(vlc_media);//释放              }              libvlc_media_player_release(vlc_player);//释放          }          libvlc_release(vlc_ins);//释放      }  }  void test2()  {      libvlc_instance_t* inst;      libvlc_media_player_t* mp;      libvlc_media_t* m;      //init vlc modules, should be done only once      inst = libvlc_new(0, NULL);      //Create a new item      m = libvlc_media_new_path(inst, "D:\\visumotionlogo.mp4");      //Create a media player playing environment      mp = libvlc_media_player_new_from_media(m);      libvlc_media_parse(m);      libvlc_time_t duration = libvlc_media_get_duration(m);      //No need to keep the media now      libvlc_media_release(m);  #if 0      //This is a non working code that show how to hooks into a window,      //if we have a window around      //libvlc_drawable_t drawable = xdrawable;      //or on windows      void *drawable = &g_hwnd;      libvlc_media_player_set_hwnd(mp, drawable);  #endif      // play the media_player      libvlc_media_player_play(mp);      Sleep((DWORD)duration); //Let it play a bit      //Stop playing      libvlc_media_player_stop(mp);      // Free the media_player      libvlc_media_player_release(mp);      libvlc_release(inst);  }  int main(int argc, char* argv[]){    //test1();      test2();      cout<<"ok!"<<endl;    return 0; }

遇到的问题及解决 转文http://blog.csdn.net/qtbmp/article/details/39399733

[0x99e58f0] main libvlc error: No plugins found! Check your VLC installation. 和 函数libvlc_new一直返回空
这两个问题的解决方法是:
(1)由于创建的工程是非安装版的播放器,因此需要VLC的plugins,该文件夹里面包含播放器需要的各种库文件。在编译的时候,把plugins文件夹放在debug的文件夹下。
(2)在初始化的时候,参数设置为vlc_args[vlc_args_num++] = “–ignore-config”;

0 0
原创粉丝点击