文档章节

基于VLC的一个播放器

种地瓜
 种地瓜
发布于 2016/07/04 19:44
字数 606
阅读 365
收藏 1

    VLC属于Video LAN开源项目组织中的一款全开源的流媒体服务器和多媒体播放器。作为流媒体服务器,VLC跨平台,支持多操作系统和计算机体系结构;作为多媒体播放器,VLC可以播放多种格式的媒体文件。主要包括有:WMV、ASF、MPG、MP、AVI、H.264等多种常见媒体格式。

    VLC采用全模块化结构,在系统内部,通过动态的载入所需的模块,放入一个module_bank的结构体中统一管理,连VLC的Main模块也是通过插件的方式动态载入的(通过module_InitBank函数在初始化建立module_bank时)。对于不支持动态载入插件的系统环境中,VLC也可以采用builtin的方式,在VLC启动的时候静态载入所需要的插件,并放入module_bank统一管理。

        VLC官网:

    http://www.videolan.org/

1、安装所需要的开发库文件(SDK)

2、相关文档

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

 

一个简单的例子:

#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;
}

 

 

本文转载自:http://blog.sina.com.cn/s/blog_62a8419a01014eey.html

种地瓜
粉丝 10
博文 177
码字总数 45450
作品 0
深圳
程序员
私信 提问
libvlc 的 JavaScript 封装--WebChimera

WebChimera 为你提供一个强大的基于 VLC 的视频开发工具。 目前主要支持以下分支工具: 1. WebChimera.js 播放器 -一个全功能的视频播放器 2. WebChimera.js 角播放器 -角视频播放器 3. Web...

匿名
2016/03/02
5.8K
4
C语言基于GTK+Libvlc实现的简易视频播放器

小编心语:现下,各种视频播放软件层出不穷,竞争也越演越烈,不知道大家有木有这个想法,小编有时在想能不能做一款属于自己的视频播放器呢~小编特意去实验楼,整理出了这篇关于如何实现简易...

实验楼
2014/12/22
950
8
HoloLens 平台的 3D 视频播放器--VR for VLC

VR for VLC 是基于著名的开源播放器项目 VLC 而开发的,根据 HoloLens 的设备特性开发出了 VR 播放模式,支持播放 3D 左右格式的视频,此应用同时也继承了 VLC 播放器所有的音乐视频播放的完整...

易天
2017/05/12
1K
0
VLC 媒体播放器发现漏洞,目前仍未修补

根据 ZDNet 报道,在最新版本的 VLC 媒体播放器中发现了一个严重的漏洞,可能支持远程代码执行和其他恶意操作,而且目前没有修补程序。 非营利视频局域网的 VLC 播放器是一款流行的软件,用于...

afterer
07/24
1K
1
使用nginx-rtmp-module搭建直播流媒体服务器

先下载nginx-rtmp-module nginx-rtmp-module的官方github地址:https://github.com/arut/nginx-rtmp-module 使用的详细wiki https://github.com/arut/nginx-rtmp-module/wiki/Directives 安装......

cp3_1dbc
2018/06/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一套完整的软件开发流程是怎样的?

做什么事都需要一个流程,软件开发也不例外。 那么,一个软件从无到有到底是怎么开发的?一个软件产品的结果为什么是这样?为什么开发的速度不能再快一点。为什么程序员大多秃顶?他们有那么...

我想造火箭
9分钟前
2
0
漂亮思维导图怎样绘制?教你快速套用思维导图模板绘制d

用MindMaster软件绘制思维导图,会更加高效和美观!因为MindMaster是一款专业的思维导图软件,零基础经验的朋友花费5分钟时间就能掌握它的相关画法。以下是电脑软件思维导图画法的简单步骤。...

工具分享
11分钟前
3
0
SVN 装完了 但是再bin 下边没有svn.exe

bin中找不到svn.exe文件 找到你的安装包重新运行 选择modify

简小姐
12分钟前
1
0
linux 软链接与 硬链接的区别

软链接与硬链接的区别 1. 硬链接不会创建inode,即使用的inode都是一样的。软链接会创建新的inode。 2. 硬链接的访问属性和源文件一模一样,没有l的标识。软链接的访问属性写明了是l,且访问...

突突突酱
12分钟前
1
0
新特性解读 | MySQL 8.0.18 有权限控制的复制

原文:Replication with restricted privileges https://mysqlhighavailability.com/replication-with-restricted-privileges/ 作者:Pedro Figueiredo 翻译:管长龙 背景 MySQL 8.0.18 以前......

爱可生
21分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部