vlc開發學習

用C/C++開發基於VLC SDK的視頻播放器


在windows系統如果開發萬能播放器,一般都是基本DirectShow來開發,開發也很簡單,但缺點也很多,一個文件格式是否能夠播放完全取決於你否安裝了正確的解析器和解碼器,即使現在有了萬能解器安裝包也會出現很多問題,不過自從很多開源軟件的出現比如大名鼎鼎的ffmpeg,vlc等,一切都變得簡單起來,基於ffmpeg sdk開發就不多介紹了,本文主要介紹基於 VLC SDK來開發自己的播放器,一切都是那麼的簡單.

1.先下載VLC player, http://www.videolan.org/vlc/,  安裝的時候要安裝開發庫(SDK)
2.用VC 6.0/2003/2005/2008/2010 IDE均可開發自己的測試程序
3.創建一個控制檯程序,當然創建一個窗口程序更好,由於只是爲了關注於如何使用VLC SDK,所以都無所謂的
4.在工程中設置好vlc的 include和lib路徑,一般VLC sdk路徑是C:\Program Files\VideoLAN\VLC\sdk
5.複製libvlc.dll, libvlccore.dll,plugins目錄到工程debug目錄,如果是release需要複製到release目錄,目錄結構如圖:
            用C/C++開發基於VLC <wbr>SDK的視頻播放器

之後 就是完整的代碼:

#include
#include
#include
#include

#include
#pragma comment(lib, "libvlc.lib")
#pragma comment(lib, "libvlccore.lib")

int main(int argc, char* argv[])
{
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實例
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:\\clips\\org.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);
}
return 0;
}

編譯運行,就可以在桌面上看到播放的視頻了,用VLC SDK做自己的播放器是如此的簡單。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章