最简单的基于libVLC的例子文章列表:

最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器

最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器(图形界面版)

最简单的基于libVLC的例子:最简单的基于libVLC的推流器

=====================================================

本文记录使用libVLC的开发的最简单的视频播放器示例。VLC Media Player是一款优秀的播放器,但是由于它的源代码编译的难度比较大,一直没有深入研究过它的开发方面的技术。此前触到了一些VLC开发方面的东西,因此总结了一下libVLC的开发示例程序。

如何获取VLC的SDK

VLC开发所需的库文件可以有2种获取方法:

1. 自行编译
2. 直接从安装目录里面拷贝出来

第一种方法难度要大一些。尤其是在Windows下编译VLC是个比较麻烦的事情。一般情况下可以选择第二种方法获取VLC开发所需的文件。
开发VLC所需的文件的位置:

1. 动态链接库*.dll:安装目录下的libvlc.dll,libvlccore.dll以及plugins目录下的所有文件。
PS:VLC支持非常多的plugin。因此plugins目录的体积确实是非常大的。
2. 静态链接库*.lib:安装目录/sdk/lib
3. 头文件*.h:安装目录/sdk/include

新建一个VC工程后,把上述三类文件分别拷贝至新工程目录下,并且配置它们的路径之后,就可以使用libVLC进行开发了。

最简单的基于libVLC的视频播放器

使用libVLC开发一个播放器十分的容易。最简单的基于libVLC的视频播放器的流程图如下图所示。

流程图中包含了3个结构体:

libvlc_instance_t:代表一个libVLC的实例。
libvlc_media_t:代表一个可以播放的媒体。
libvlc_media_player_t:代表一个VLC媒体播放器(一个视频播放器播放一个视频)。注意VLC并不仅仅用于媒体播放。

创建或者以上3个结构体通过以下6个函数:

libvlc_new():创建libvlc_instance_t。
libvlc_media_new_path():创建libvlc_media_t。
libvlc_media_player_new_from_media():创建libvlc_media_player_t。
libvlc_media_player_release():释放libvlc_media_player_t
libvlc_media_release():释放libvlc_media_t。
libvlc_release():释放libvlc_instance_t。

可以已通过下面的函数控制媒体的播放或者暂停,这些函数都需要使用libvlc_media_player_t作为参数。这里处于简化的目的,只使用了播放和停止函数:

libvlc_media_player_play():播放。
libvlc_media_player_pause():暂停。
libvlc_media_player_stop():停止。

除了上述3个函数之外,还包括libvlc_media_player_set_position()等函数,这里不再一一记录。

几点注意事项

libvlc_media_t的创建

创建libvlc_media_t有两种方法:libvlc_media_new_path()和libvlc_media_new_location()。简单描述一下这两个函数的区别:libvlc_media_new_location()用于打开协议,而libvlc_media_new_path()用于打开文件。因而传递给libvlc_media_new_path()的就是普通的文件路径(绝对路径例如D:\xxx.flv,或者相对路径例如xxx.flv),而传递给libvlc_media_new_location()的就是协议地址(例如“udp://….”,“http://”)。但是这里有一点需要注意,在VLC中“文件”也属于一种广义上的“协议”。因此使用libvlc_media_new_location()也可以打开文件,但是必须在文件路径前面加上“文件协议”的标记“file:///”。例如打开“F:\movie\cuc_ieschool.flv”下的视频,实际使用的代码如下所示。

libvlc_media_new_location (inst, "file:///F:\\movie\\cuc_ieschool.flv");

此外,VLC还支持很多“神奇”的协议,比如输入“screen://”协议就可以进行屏幕录制,代码如下。

libvlc_media_new_location (inst, "screen://");

把libVLC的弹出窗口嵌入到程序中

在这里我只实践过Windows下把libVLC的弹出窗口嵌入到程序中。将窗口或者控件的句柄传递给libvlc_media_player_set_hwnd()函数即可。
这里有一点需要注意,如果把libVLC弹出窗口嵌入到程序中的话,“全屏”功能就不能使用了。

关于libVLC加载的问题

在libVLC中可以通过libvlc_media_player_get_length(),libvlc_video_get_width(),libvlc_video_get_height()等函数获取到视频的时长,宽,高等信息。但是有一个很奇怪的现象:如果在调用完libvlc_media_player_play()之后立即调用上述3个函数的话,返回的值都是0,只有“等待”一段时间(例如调用sleep())后再调用上述函数,才能得到正确的数值。对于这种现象,我觉得可能是libVLC加载完成之后,才能通过上述几个函数获得正确的值(自己推测的,还没有深究)。

代码

/*** 最简单的基于libVLC的播放器* Simplest libVLC Player** 雷霄骅 Lei Xiaohua* leixiaohua1020@126.com* 中国传媒大学/数字电视技术* Communication University of China / Digital TV Technology* http://blog.csdn.net/leixiaohua1020** 本程序是一个最简单的基于libVLC的视频播放器。* 适合初学者学习libVLC。** This example is the simplest Video Player based on libVLC.* Suitable for the beginner of libVLC.*/
#include <Windows.h>
#include "vlc/vlc.h"int main(int argc, char* argv[]){libvlc_instance_t * inst;libvlc_media_player_t *mp;libvlc_media_t *m;libvlc_time_t length;int width;int height;int wait_time=5000;//libvlc_time_t length;/* Load the VLC engine */inst = libvlc_new (0, NULL);//Create a new item//Method 1://m = libvlc_media_new_location (inst, "file:///F:\\movie\\cuc_ieschool.flv");//Screen Capture//m = libvlc_media_new_location (inst, "screen://");//Method 2:m = libvlc_media_new_path (inst, "cuc_ieschool.flv");/* Create a media player playing environement */mp = libvlc_media_player_new_from_media (m);/* No need to keep the media now */libvlc_media_release (m);// play the media_playerlibvlc_media_player_play (mp);//wait until the tracks are created_sleep (wait_time);length = libvlc_media_player_get_length(mp);width = libvlc_video_get_width(mp);height = libvlc_video_get_height(mp);printf("Stream Duration: %ds\n",length/1000);printf("Resolution: %d x %d\n",width,height);//Let it play _sleep (length-wait_time); // Stop playinglibvlc_media_player_stop (mp);// Free the media_playerlibvlc_media_player_release (mp);libvlc_release (inst);return 0;}

运行结果

程序运行后,会弹出一个窗口播放“cuc_ieschool.flv”文件。

下载

Simplest libVLC Example

项目主页

SourceForge:https://sourceforge.net/projects/simplestlibvlcexample/

Github:https://github.com/leixiaohua1020/simplest_libvlc_example

开源中国:http://git.oschina.net/leixiaohua1020/simplest_libvlc_example

CDSN下载地址: http://download.csdn.net/detail/leixiaohua1020/8342413

本工程是包含了一些基于libVLC的示例程序。一共包含了如下几个子程序。
playerGUI: 最简单的基于libVLC的播放器-图形界面版。
simplest_libvlc_example: 最简单的基于libVLC的播放器。
simplest_libvlc_streamer: 最简单的基于libVLC的推流器。

最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器相关推荐

  1. 基于Phonon+QT的音视频播放器设计与实现

    目 录 摘 要 2 第一章 软件需求说明书 1 1.1 引言 1 1.2 业务流程整体说明 1 第二章 需求分析报告 3 2.1 引言 3 2.2 任务概述 3 2.3 功能需求 3 2.4 性能需求 ...

  2. QT简单的视频播放器

    1.功能 选择路径下的固定视频格式文件播放,对应的音频和视频同步播放 2.新建一个不含UI界面的QT工程 特别注意:QT中的路径名不能含中文 设置一个不含UI界面的工程 取消构建目录 因为要引入视频播 ...

  3. 将一个简单远程调用的方式例子改为异步调用

    将一个简单远程调用的方式例子改为异步调用 package com.xsxy.asynctest.test03;import java.util.ArrayList; import java.util. ...

  4. 最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG ...

  5. rtsp协议_基于libVLC的视频播放器(支持RTSP协议)

    VLC Media Player是一款优秀的播放器,大多数多媒体开发人员都使用过.VLC是一款开源的.跨平台的.可扩展的.多媒体播放器.流媒体服务器及框架,可播放大多数多媒体文件,以及DVD.音频CD ...

  6. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答...

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  7. 最简单的基于FFMPEG+SDL的视频播放器:拆分-解码器和播放器

    ===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG ...

  8. 最简单的基于DirectShow的示例:视频播放器自定义版

    ===================================================== 最简单的基于DirectShow的示例文章列表: 最简单的基于DirectShow的示例:视 ...

  9. 最简单的基于DirectShow的示例:视频播放器图形界面版

    ===================================================== 最简单的基于DirectShow的示例文章列表: 最简单的基于DirectShow的示例:视 ...

最新文章

  1. 可恶,新网互联又出问题了
  2. 6-tips-for-managing-property-files-with-spring--转
  3. 数据仓库分层ODS DW DM 主题 标签
  4. javaEE jdbc编程步骤
  5. JavaScript 中的函数介绍
  6. 实践2.2 内核模块编译
  7. Controller接口控制器详解(1)
  8. 信息化项目甲方采购的准备与实施
  9. 一步一步安装Git控件版本工具
  10. ie下使用frameset布局导致跨域cookie丢失问题解决
  11. 人工智能“国家队”云从科技行人再识别达到96.6%,创世界纪录;知产链IPC与雷神展开合作,推出雷神通证
  12. 用计算机怎样搜wifi网,笔记本电脑搜索不到无线网络(Wifi)怎么办
  13. Pitfall of OO Programming
  14. 《Java程序员,上班那点事儿》荣登北京新华书店销售榜第2名
  15. SSD(ECCV 2016)
  16. ChatGPT有多厉害,影响到谷歌地位?
  17. 龙威ol服务器维护是什么意思,《龙威OL》六大职业定位介绍解析
  18. 产品经理——从一块钱看产品推广方案
  19. 芯片到底是怎么制造的?
  20. 信号的产生——方波函数:矩形波square

热门文章

  1. 【PaddleSeg】【天池大赛】真实场景篡改图像检测挑战赛线上2391
  2. 美团产品经理助理实习生笔试小计
  3. 情感分类——Attention(前篇)
  4. 记录——超声相控阵,斜入射;大道理(取自主论文)
  5. 《那些年啊,那些事——一个程序员的奋斗史》——91
  6. 树莓派与电脑之间的串口通信编程
  7. java给定n和随机数输出素数_输出所有质数因子java
  8. 2多线程之龟兔赛跑案例
  9. 使用protege过程中的一些小技巧
  10. 12306实时余票查询接口