libVLC 视频截图

高效程序员

共 1609字,需浏览 4分钟

 · 2020-08-12

1

截图方式


在观看影视的过程中,经常会出现一些精彩画面,我们可以将它保存起来、分享给朋友、或者是用作桌面背景。。。这时候截图就显得非常重要。


常见的截图方式有以下几种:


  • 使用 PrintScreen 键 ,截取整个屏幕的内容。

  • 使用 Alt + Printscreen 键,截取当前活动窗口的内容。

  • 使用播放器内置的截图功能(一般会有相应的截图按钮),截取当前播放的画面。


很显然,在绝大多数情况下,内置的截图功能是最佳选择。因为无论是使用 PrintScreen 还是 Alt + Printscreen,都有可能会截取到与当前画面无关的内容。


那么,如何使用 libVLC 来实现这样一个截图功能呢?



2

主要接口


截图相对比较简单,主要涉及一个核心 API:


int libvlc_video_take_snapshotlibvlc_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(0nullptr);
    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"00);

    libvlc_media_release(media);
    libvlc_media_player_release(player);
    libvlc_release(instance);

    return 0;
}


当程序退出之后,就能在当前目录下找到该图片了(如上图所示)。当然了,也可以将上面的相对路径(test.png)更改为绝对路径(例如:E:/test.png)。


·END·
 

作者:一去、二三里
爱学习,爱编程,爱生活。
欢迎来撩,一起畅谈程序人生!

点个在看,么么哒!

浏览 92
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报