LibVLC —— 常用函数解析

article/2025/10/1 18:28:11
函数

     ● LIBVLC_API libvlc_instance_t *libvlc_new( int argc , const char *const *argv );

          功能:创建libvlc_instance_t对象。

          用法:

libvlc_instance_t *VlcInstance = libvlc_new(0, nullptr);

          参数:
               具体参数查看我写的另一篇文章。

// 一般用法是上面的。// 带参数用法const char * vlc_args[] ={"-I","dummy","--ignore-config","--extraintf=logger","--verbose=2"};libvlc_instance_t  *VlcInstance= libvlc_new(sizeof(vlc_args)/sizeof(vlc_args[0]), vlc_args);


     ● LIBVLC_API void libvlc_release( libvlc_instance_t *p_instance );

          功能:释放libvlc_instance_t对象。


     ● LIBVLC_API libvlc_media_player_t * libvlc_media_player_new( libvlc_instance_t *p_libvlc_instance );

          功能:创建一个媒体播放器对象。


     ● LIBVLC_API void libvlc_media_player_release( libvlc_media_player_t *p_mi );

          功能:使用后释放媒体播放器减少媒体播放器对象的引用计数。如果引用计数为0,则进行释放;如果已释放则不应调用本函数。


     ● LIBVLC_API libvlc_state_t libvlc_media_player_get_state( libvlc_media_player_t *p_mi );

          功能:获取传入参数的媒体状态。

          返回:

// 获取媒体播放器状态。
libvlc_state_t  vlcState = libvlc_media_player_get_state(xxx);typedef enum libvlc_state_t
{libvlc_NothingSpecial=0,			// 默认值。libvlc_Opening,						// 打开中。libvlc_Buffering,					// 缓冲状态。可查看libvlc_MediaPlayerBuffering事件。libvlc_Playing,						// 播放中。libvlc_Paused,						// 暂停中。libvlc_Stopped,						// 已停止。libvlc_Ended,						// 已结束。libvlc_Error						// 有错误。
} libvlc_state_t;


     ● LIBVLC_API libvlc_event_manager_t * libvlc_media_player_event_manager ( libvlc_media_player_t *p_mi );

          功能:获取媒体播放器从中发送事件的事件管理器。


     ● LIBVLC_API int libvlc_event_attach(
                                             libvlc_event_manager_t
                                             *p_event_manager,
                                             libvlc_event_type_t i_event_type,
                                             libvlc_callback_t f_callback,
                                             void *user_data );

          功能:注册事件通知。

          参数:

// 返回0为成功。
int result = libvlc_event_attach(libvlc_event_manager,					// 注册事件管理对象libvlc_MediaPlayerPositionChanged, 		// 事件类型libvlc_callback, 						// 回调函数this									// 回调函数参数2);// 该回调函数务必设置为全局函数或类内静态函数
void libvlc_callback(const struct libvlc_event_t *p_event, void *p_data)
{// 参数1 - p_event:事件类型// 参数2 - p_data :传入数据
}


     ● LIBVLC_API int libvlc_event_detach(
                                             libvlc_event_manager_t
                                             *p_event_manager,
                                             libvlc_event_type_t i_event_type,
                                             libvlc_callback_t f_callback,
                                             void *user_data );

          功能:注销事件通知。具体参数同上。


     ● LIBVLC_API libvlc_media_t * libvlc_media_new_path(libvlc_instance_t *p_instance,const char *path );

          功能:获取媒体播放器从中发送事件的事件管理器。


     ● LIBVLC_DEPRECATED LIBVLC_API void libvlc_media_parse( libvlc_media_t *p_md );

          功能:解析媒体。获取媒体相关信息。


     ● LIBVLC_API void libvlc_media_player_set_media( libvlc_media_player_t *p_mi,libvlc_media_t *p_md );

          功能:设置媒体播放器将使用的媒体。


     ● LIBVLC_API void libvlc_media_player_set_hwnd ( libvlc_media_player_t *p_mi, void *drawable );

          功能:设置媒体播放器应位于的渲染其视频输出。


     ● LIBVLC_API int libvlc_video_get_size( libvlc_media_player_t *p_mi, unsigned num,unsigned *px, unsigned *py );

          功能:获取视频的宽高。返回0则成功。


     ● LIBVLC_DEPRECATED LIBVLC_API float libvlc_media_player_get_fps( libvlc_media_player_t *p_mi );

          功能:获取视频的帧率。返回0则失败,否则为帧率大小。


     ● LIBVLC_API libvlc_time_t libvlc_media_get_duration( libvlc_media_t *p_md );

          功能:获取视频的总长度。返回-1则失败,否则为长度。默认返回为毫秒。


     ● LIBVLC_API libvlc_time_t libvlc_media_player_get_time( libvlc_media_player_t *p_mi );

          功能:获取视频的当前进度,默认返回为毫秒。


     ● LIBVLC_API void libvlc_media_player_set_time( libvlc_media_player_t *p_mi, libvlc_time_t i_time );

          功能:设置视频的当前进度,参数2为毫秒。


     ● LIBVLC_API void libvlc_video_set_format(libvlc_media_player_t *mp, const char *chroma,unsigned width, unsigned height,unsigned pitch );

          功能:设置解码视频的色度和尺寸。本函数仅适用libvlc_video_set_callback函数,本函数与libvlc_video_set_format_callbacks函数互斥。


     ● LIBVLC_API int libvlc_media_player_play ( libvlc_media_player_t *p_mi );

          功能:开始播放。


     ● LIBVLC_API void libvlc_media_player_pause ( libvlc_media_player_t *p_mi );

          功能:暂停播放。


     ● LIBVLC_API void libvlc_media_player_stop ( libvlc_media_player_t *p_mi );

          功能:停止播放。


     ● LIBVLC_API void libvlc_video_set_callbacks( libvlc_media_player_t *mp,libvlc_video_lock_cb lock,libvlc_video_unlock_cb unlock,libvlc_video_display_cb display,void *opaque );

          功能:
                    设置回调方式得到每帧解码视频数据到自定义内存中。
                    使用libvlc_video_set_format() 或libvlc_video_set_format_callbacks() 函数可配置解码格式。

          参数及使用方式:

/******************************** 参数介绍 ********************************/
void libvlc_video_set_callbacks
(libvlc_media_player_t *mp,				// 媒体播放器对象libvlc_video_lock_cb lock,				// 数据加锁回调函数(必须实现)libvlc_video_unlock_cb unlock,			// 数据解锁回调函数(非必须实现,可传nullptr)libvlc_video_display_cb display,		// 数据显示回调函数(非必须实现,可传nullptr)void *opaque 							// 作为参数1,分别传入上面三个回调函数内
);
/********************************   END   ********************************//******************************** 使用介绍 (基于Qt临时写的测试代码,仅供参考) ********************************/
void *Vlc::vlcVideoLockCb(void *opaque, void **planes)
{Vlc *vlc = static_cast<Vlc*>(opaque);if(vlc){*planes = vlc->imageBuffer;}vlc = nullptr;return nullptr;
}void Vlc::vlcVideoDisplayCb(void *opaque, void *)
{Vlc *vlc = static_cast<Vlc*>(opaque);if(vlc){QImage *Image = new QImage(vlc->imageBuffer,static_cast<int>(vlc->imageWidth),static_cast<int>(vlc->imageHeight),QImage::Format_RGB32);if(Image && !Image->isNull()){// ImageFrame为Qt信号将QImage*传出显示。在显示完毕后记得清理QImage*内存。vlc->ImageFrame(Image);};Image = nullptr;}vlc = nullptr;
}class Vlc : QObject
{Q_OBJECTsignals:void ImageFrame(QImage *);protected:short imageWidth = 0,imageHeight = 0;unsigned char *imageBuffer = nullptr;static void *vlcVideoLockCb(void *opaque, void **planes);static void vlcVideoDisplayCb(void *opaque, void *)public:Vlc(){...// 获取视频宽高libvlc_video_get_size(vlcMediaPlay,0,&imageWidth,&imageHeight);// 设置加锁、显示回调,并将类传入。libvlc_video_set_callbacks(vlcMediaPlay,vlcVideoLockCb,nullptr,vlcVideoDisplayCb,this);/* 配置解码格式:1、	设置解码格式为"BGRA",所以在之后进行处理时请使用BGRA方式进行处理。例如,	当后续处理为使用Qt处理时,Qt中QImage的格式为"RGB"的大方向处理;而又比如后续使用为OpenCv时,cv::Mat则使用的格式为"BGR"大方向处理。2、		设置图像的宽高为imageWidth,imageHeight。3、	设置节距,类似设置总宽度。总宽度 = 宽度 * 色值数。该色值数由参数2决定。*/	libvlc_video_set_format(vlcMediaPlay, "BGRA", imageWidth, imageHeight, imageWidth * 4);// 设置读取帧数据内存imageBuffer = new char[imageWidth imageHeight * 4];memset(imageBuffer,0,imageWidth imageHeight * 4);...}
}
/********************************   END   ********************************/


推荐LibVLC课程

     51cto - 基于Qt的LibVLC专业开发技术

     csdn学院 - 基于Qt的LibVLC专业开发技术

关注

笔者 - jxd

微信公众号搜索 “码农总动员” 或 微信扫描下方二维码,了解更多你不知道的XX,O(∩_∩)O

在这里插入图片描述


http://chatgpt.dhexx.cn/article/onglJJg4.shtml

相关文章

【玩转VLC】--- 基于libvlc写个最简单的播放器

通过【玩转VLC】--- ubuntu下编译vlc 我们已经把vlc编译哦了。生成了一系列的bin和libvlc.so. 接下来我们就用编译好的libvlc.so搞一个最简单的播放器。 我认为vlc的伟大之处有一点就是他并没有把整个播放器写成一个硬生生的bin。而是独立出来个libvlc库&#xff0c;其他的玩…

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

最简单的基于libVLC的例子文章列表&#xff1a; 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器&#xff08;图形界面版&#xff09; 最简单的基于libVLC的例子&#xff1a;最简…

C++调用libVLC播放视频

1、下载libVLC的sdk Index of /pub/videolan/vlc/ 注意下载.7z结尾的 2、Visual Studio建立C的windows控制台项目 3、文件准备 &#xff08;1&#xff09;sdk文件夹解压缩到项目文件夹下 &#xff08;2&#xff09;在Debug下方压缩包内的几个文件 、 4、配置项目属性 注意…

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

最简单的基于libVLC的例子文章列表&#xff1a; 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器&#xff08;图形界面版&#xff09; 最简单的基于libVLC的例子&#xff1a;最简…

基于libVLC的视频播放器之二:使用VLC-Qt播放RTSP流

此篇是 使用VLC浏览器插件播放RTSP流的姊妹篇。 一.直接使用libVLC libVLC是VLC media player多媒体框架的核心引擎和接口&#xff0c;开发者使用它能轻松的创建大量具有VLC特性的应用。 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器详细介绍了libVL…

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

最简单的基于libVLC的例子文章列表&#xff1a; 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器&#xff08;图形界面版&#xff09; 最简单的基于libVLC的例子&#xff1a;最简…

用VLC开发视频播放器/组件(两种方式:libVLC / VLC-Qt)

测试环境 MSVC-2015Qt 5.14.2QCreator 1. libVLC&#xff08;关键步骤&#xff09; 参考&#xff1a;心流剑 libVLC 各版本 下载链接 我的下载版本为&#xff1a;3.0.11 sdk/lib文件夹目录 qmake vlc 部分的配置&#xff08;路径根据自己的修改&#xff09;只需要&#…

idea如何取消debug所有断点

1、debug模式下&#xff0c;在idea左下方找到【View Breakpoints】按钮或者直接按【CtrlShiftF8】快捷键&#xff0c;如下图&#xff1a; 2、在左侧窗口中&#xff0c;点击【Java Line Breakpoints】前方的全选框&#xff0c;如下图&#xff1a; 3、取消 【Java Line Breakp…

Idea断点for循环调试

前言 作为一个开发&#xff0c;最高兴和痛苦的事情就是排查问题&#xff0c;调试代码解决问题&#xff0c;掌握一些技巧可以提升效率&#xff0c;今天就讲讲for循环断点调试的技巧for循环断点调试 操作步骤&#xff1a; 1.在断点调试处加断点 2.点击断点处&#xff0c;鼠标右击…

IntelliJ IDEA-Debug断点调试 看这篇文章就够了

详解IntelliJ IDEA-Debug断点调试 如今&#xff0c;IntelliJ IDEA 目前深受广大开发者喜爱&#xff0c;我们在实际开发工作中&#xff0c;不管是用来阅读源码还是在开发过程中都需要进行代码调试。 以下为大家准备了一篇关于IntelliJ IDEA-Debug断点调试的文章&#xff0c;如…

IDEA 的基本介绍使用及断点调试

文章目录 1、IDE&#xff08;集成开发环境&#xff09;- IDEA2、IDE&#xff08;集成开发环境&#xff09;- Eclipse3、IDEA 的基本介绍和使用3.1、设置字体 和 颜色主题3.2、编译文件和源代码3.3、IDEA 常用快捷键3.4、模板/自定义模板 4、断点调试(debug)4.1、实际需求4.2、定…

idea debug调式进不了断点

问题&#xff1a; 在启动debug断点调试时&#xff0c;代码无法进入断点。 解决方案&#xff1a; 在网上搜索解决方案&#xff0c;看到说在settings——>Debugger下勾选如下位置即可。本人并未亲自测试&#xff0c;所以就做了一波搜集党。 我的解决方法&#xff1a;去掉如下…

idea断点调试jar包

本文以springbootdemo-0.0.1-SNAPSHOT.jar 为例&#xff0c;jar内容需与idea保持一致。 1、启动命令 常规jar启动&#xff1a;java -jar springbootdemo-0.0.1-SNAPSHOT.jar jar包断点调试启动&#xff1a;java -Xdebug -agentlib:jdwptransportdt_socket,servery,suspendn,ad…

如何在idea中打debug断点

在调试代码的时候&#xff0c;你的项目得debug模式启动&#xff0c;也就是点那个绿色的甲虫启动服务器&#xff0c;然后&#xff0c;就可以在代码里面断点调试啦。 下面不要在意&#xff0c;这个快捷键具体是啥&#xff0c;因为&#xff0c;这个keymap是可以自己配置的&#xf…

【IDEA 断点调试】

IDEA 断点调试 断点类型 行断点 【红色圆点】 点击左侧空白区域 、或 在行上ctrlF8 详细断点 【黄色圆点】 shift单击左侧空白区域&#xff0c;同时弹窗选择断点详细设置 方法断点 【红色菱形】 点击方法名所在左侧空白区域 。 进入方法后每一行都是挂起&#xff0c;打在接口…

IDEA debug 断点调试技巧

1、首先看下IDEA中Debug模式下的界面&#xff1a; ① 以Debug模式启动服务&#xff0c;左边的一个按钮则是以Run模式启动。在开发中&#xff0c;我一般会直接启动Debug模式&#xff0c;方便随时调试代码。 ② 断点&#xff1a;在左边行号栏单击左键&#xff0c;或者快捷键Ctrl…

IDEA 加断点debug时阻塞问题

今天有朋友提到一个问题&#xff0c;“我在springBoot项目中建一个Controller&#xff0c;然后写两个方法&#xff0c;方法1中加个断点&#xff0c;然后请求方法1&#xff0c;进入断点之后再请求方法二&#xff0c;此时方法二会一直等待&#xff0c;等方法一执行完才能再执行方…

Idea 进行断点调试的 快捷键

快捷键 功能描述 F8 单步调试&#xff0c;不进入函数内部 F7 单步调试&#xff0c;进入函数内部 ShiftF7 选择要进入的函数 ShiftF8 跳出函数 AltF9 运行到断点 AltF8 执行表达式查看结果 F9 继续执行&#xff0c;进入下一个断点或执行完程序 CtrlF8 设置/取消当前行断…

IDEA中断点调试

调试在开发中大量应用&#xff1a; 【1】Debug的优化设置&#xff1a;更加节省内存空间&#xff1a; 设置Debug连接方式&#xff0c;默认是Socket。 Shared memory是Windows 特有的一个属性&#xff0c;一般在Windows系统下建议使用此设置&#xff0c; 内存占用相对较少。 【…

idea debug无法打断点 以及解决办法

idea debug无法打断点 以及解决办法 今天工作中调试代码时候遇见一个问题 一行很普通的 map.put()代码 无法 进行断点调试 效果如图 出现这种情况大概有两种可能&#xff0c;一种是断点打在了错误的地方&#xff0c;程序进不到这里&#xff1b;第二种是有可能需要重新编译。…