关于VLC SDK的下载
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”;