<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

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

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    在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 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_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做自己的播放器是如此的簡單。     VLC SDK 怎么知道VLC 已經播放結束,急。

    我已經用VLC SDK 嵌入到MFC中,能播放視頻,但是想知道視頻播放的狀態,就是知道什么時候結束的。

    ------解決方案--------------------------------------------------------
    里面有一個libvlc_media_player_get_state獲取播放狀態的函數,如果返回libvlc_Ended,則表示視頻已經播放完了。RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全