LibVLC —— 常用函数解析
函数
● 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
LibVLC —— 常用函数解析相关推荐
- python重要的第三方库pandas模块常用函数解析之DataFrame
pandas模块常用函数解析之DataFrame 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 打开浏览器 ...
- 计算机vb常用计算公式,计算机等级考试二级VB常用函数解析
p=ABS(X):取X的绝对值. p=Log(X):求X的自然对数. Y=Sgn(X):符号函数. 说明: X>0时Y=1;X=0时 Y=0;X<0 时Y=-1. 例: Response. ...
- tensorflow常用函数解析
一.tf.transpose函数的用法 tf.transpose(input, [dimension_1, dimenaion_2,..,dimension_n]):这个函数主要适用于交换输入张量的不 ...
- 的向上取整函数_计算机二级Excel常用函数解析
决定为大家推点干货 让大家学习一下 Excel的函数应用 ABS绝对值 从最简单的开始 第一个是ABS函数 简而言之 就是取绝对值 作用就是 MAX&MIN函数 这两个函数是好哥们 也比较简单 ...
- matlab 职坐标,Axure入门与基础常用函数解析整理
元件函数 序号 函数 说明 使用方法 1 Widget.Width 获取元件的宽度 ...
- Discuz!常用函数解析(续)
/** * 产生随机码 * @param $length - 要多长 * @param $numberic - 数字还是字符串 * @return 返回字符串 */ function random($ ...
- LibVLC —— 常用对象解析
结构体.类对象 ● typedef struct libvlc_instance_t libvlc_instance_t; 功能: ...
- cocos2d_x 常用函数解析
1.menuCloseCallback 用于CCMenuItemImage的图片被用户点击后的处理. 转载于:https://www.cnblogs.com/xiao-wei-wei/archive ...
- pd.DataFrame()函数解析(最清晰的解释)
欢迎关注WX公众号:[程序员管小亮] DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表. 文章目录 欢迎关注WX公众号:[程序员管小亮] ==DataF ...
- 《深入解析sas:数据处理、分析优化与商业应用》一3.5 SAS常用函数
本节书摘来自华章出版社<深入解析sas:数据处理.分析优化与商业应用>一书中的第3章,第3.5节,作者 夏坤庄 徐唯 潘红莲 林建伟,更多章节内容可以访问云栖社区"华章计算机&q ...
最新文章
- C++中的override关键字
- 初始化方法-在类的外部给对象增加属性的隐患
- 《MySQL——join语句优化tips》
- php管道的概念,让你的php命令行程序处理管道数据
- 73. 文件上传(2)
- 总结Verilog中always语句的使用
- 麟龙指标通达信指标公式源码_麟龙四量图通达信指标公式源码
- MQTT协议测试——MQTT X工具使用
- 木疙瘩动画效果视频学习
- 计步算法 睡眠 心率 学习 PPG传感器(转))
- python广义矩估计_用EVIEWS进行估计时提示Near singular matrix解析
- 微信服务通知消息找回_抖音回应无法用微信登录疑:不清楚是否是人为因素
- 夜雨数竞笔记-中值问题(5)-泰勒中值定理
- coldfusion_ColdFusion教程:第一部分
- [AV1] AV1 帧内预测
- 字典的添加、更新、修改
- Day14:网络编程入门
- 桌面计算机找不到硬盘,计算机BIOS启动项找不到硬盘,我该怎么办?
- 实战篇ConstraintLayout的崛起之路
- 计算机语言表示教师节快乐,教师节快乐的祝福语38句