VLC SDK在VS2010中的配置及简单使用举例
1.????????從http://www.videolan.org/vlc/download-windows.html下載vlc-2.2.0-win32.7z,解壓縮;
2.????????新建一個VLCtest控制臺工程;
3.????????將/vlc-2.2.0-win32/vlc-2.2.0/sdk/include添加到工程屬性中,C/C++ -->General --> Additional Include Directories;
4.????????將/vlc-2.2.0-win32/vlc-2.2.0/中的libvlc.lib、libvlc.dll、libvlccore.lib、libvlccore.dll及plugins目錄拷貝到工程執行目錄下;
5.????????VLCtest工程中各個文件的代碼為:
stdafx.h:
#pragma once#include "targetver.h"#include <stdio.h>
#include <time.h>
#include <windows.h>#include <vlc/vlc.h>
stdafx.cpp:
#include "stdafx.h"#ifdef _DEBUG#pragma comment(lib, "../../../lib/dbg/x86_vc10/libvlc.lib")#pragma comment(lib, "../../../lib/dbg/x86_vc10/libvlccore.lib")
#else#pragma comment(lib, "../../../lib/rel/x86_vc10/libvlc.lib")#pragma comment(lib, "../../../lib/rel/x86_vc10/libvlccore.lib")
#endif
VLCtest.cpp:
#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版本在此處會crashvlc_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, "f:\\photo\\WP_20140405_002.mp4");if (vlc_media != NULL) {//解析媒體實例libvlc_media_parse(vlc_media);//獲取媒體文件的播放長度,返回mslibvlc_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 onceinst = libvlc_new(0, NULL);//Create a new itemm = libvlc_media_new_path(inst, "f:\\photo\\WP_20140405_002.mp4");//Create a media player playing environmentmp = 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 nowlibvlc_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 windowsvoid *drawable = &g_hwnd;libvlc_media_player_set_hwnd(mp, drawable);
#endif// play the media_playerlibvlc_media_player_play(mp);Sleep((DWORD)duration); //Let it play a bit//Stop playinglibvlc_media_player_stop(mp);// Free the media_playerlibvlc_media_player_release(mp);libvlc_release(inst);
}int main(int argc, char* argv[])
{//test1();test2();cout<<"ok!"<<endl;return 0;
}
6. ? ?經測試,test1()和test2()在Debug模式下均能正常運行,在Release下均會crash,均是執行到libvlc_new函數處有問題,具體原因還不清楚,后面會進一步分析。
說明:在Release下,將Linker->Optimization->References中的值由Yes (/OPT:REF)修改為No (/OPT:NOREF),就可以在Release下執行了。
以上測試代碼來自于:
1.??????http://blog.sina.com.cn/s/blog_62949ff40101edml.html?
2.??????http://www.360doc.com/content/14/0309/10/2036337_358957305.shtml?
總結
以上是生活随笔為你收集整理的VLC SDK在VS2010中的配置及简单使用举例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VLC简介
- 下一篇: Ubuntu14.04 32位上编译VL