基于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; }