基於VLC的一個播放器

    VLC屬於Video LAN開源項目組織中的一款全開源的流媒體服務器和多媒體播放器。做爲流媒體服務器,VLC跨平臺,支持多操做系統和計算機體系結構;做爲多媒體播放器,VLC能夠播放多種格式的媒體文件。主要包括有:WMV、ASF、MPG、MP、AVI、H.264等多種常見媒體格式。windows

    VLC採用全模塊化結構,在系統內部,經過動態的載入所需的模塊,放入一個module_bank的結構體中統一管理,連VLC的Main模塊也是經過插件的方式動態載入的(經過module_InitBank函數在初始化創建module_bank時)。對於不支持動態載入插件的系統環境中,VLC也能夠採用builtin的方式,在VLC啓動的時候靜態載入所須要的插件,並放入module_bank統一管理。服務器

        VLC官網:ide

    http://www.videolan.org/模塊化

一、安裝所須要的開發庫文件(SDK)函數

二、相關文檔測試

https://wiki.videolan.org/Documentation:Documentation/ui

 

一個簡單的例子:spa

#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);
                // 此處獲取信息...
                // 釋放內存
                libvlc_media_tracks_release(&media_tracks, trackCount);
                // 把打開的媒體文件設置給播放器
                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; }

相關文章
相關標籤/搜索