用C/C++開發基於VLC SDK的視訊播放器
阿新 • • 發佈:2019-02-04
在windows系統如果開發萬能播放器,一般都是基本DirectShow來開發,開發也很簡單,但缺點也很多,一個檔案格式是否能夠播放完全取決於你是否安裝了正確的解析器和解碼器,即使現在有了萬能解器安裝包也會出現很多問題,不過自從很多開源軟體的出現,比如大名鼎鼎的ffmpeg,vlc等,一切都變得簡單起來,基於ffmpeg sdk開發就不多介紹了,本文主要介紹基於 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目錄,目錄結構如圖:
之後 就是完整的程式碼: #include <stdio.h> #include <tchar.h> #include <time.h> #include <windows.h> #include <vlc/vlc.h> #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做自己的播放器是如此的簡單。
之後 就是完整的程式碼: #include <stdio.h> #include <tchar.h> #include <time.h> #include <windows.h> #include <vlc/vlc.h> #pragma comment(lib, "libvlc.lib") #pragma comment(lib, "libvlccore.lib") int main(int argc, char* argv[])
// 釋放 libvlc_release(vlc_ins); } return 0; } 編譯執行,就可以在桌面上看到播放的視訊了,用VLC SDK做自己的播放器是如此的簡單。