libVLC 视频截图
共 1609字,需浏览 4分钟
·
2020-08-12 13:17
1
截图方式
在观看影视的过程中,经常会出现一些精彩画面,我们可以将它保存起来、分享给朋友、或者是用作桌面背景。。。这时候截图就显得非常重要。
常见的截图方式有以下几种:
使用 PrintScreen 键 ,截取整个屏幕的内容。
使用 Alt + Printscreen 键,截取当前活动窗口的内容。
使用播放器内置的截图功能(一般会有相应的截图按钮),截取当前播放的画面。
很显然,在绝大多数情况下,内置的截图功能是最佳选择。因为无论是使用 PrintScreen 还是 Alt + Printscreen,都有可能会截取到与当前画面无关的内容。
那么,如何使用 libVLC 来实现这样一个截图功能呢?
2
主要接口
截图相对比较简单,主要涉及一个核心 API:
int libvlc_video_take_snapshot( libvlc_media_player_t *p_mi, unsigned num,
const char *psz_filepath, unsigned int i_width,
unsigned int i_height );
共有五个参数,大概说一下各自的含义:
参数一:p_mi,媒体播放器实例;
参数二:num,视频输出的数量(通常为 0,指第一个);
参数三:psz_filepath,保存截图的文件/文件夹路径;
参数四:i_width,截图的宽度;
参数五:i_height,截图的高度。
需要注意一点,如果 i_width AND i_height 为 0,则使用原始大小;如果 i_width XOR i_height 为 0,则保留原始的宽高比。
成功时返回值为 0,未找到视频时为 -1。
3
实现方式
下面,来播放一个本地视频,并进行截图:
播放 10 秒吧,截图并将其保存为名为 test.png 的图片:
int main()
{
const char * localMrl = "Sample.mkv";
libvlc_instance_t *instance;
libvlc_media_player_t *player;
libvlc_media_t *media;
instance = libvlc_new(0, nullptr);
media = libvlc_media_new_path(instance, localMrl);
player = libvlc_media_player_new_from_media(media);
libvlc_media_player_play(player);
QThread::sleep(10);
// 截图
libvlc_video_take_snapshot(player, 0, "test.png", 0, 0);
libvlc_media_release(media);
libvlc_media_player_release(player);
libvlc_release(instance);
return 0;
}
当程序退出之后,就能在当前目录下找到该图片了(如上图所示)。当然了,也可以将上面的相对路径(test.png)更改为绝对路径(例如:E:/test.png)。
·END·