libVLC 視頻截圖

1
截圖方式
在觀看影視的過程中,經(jīng)常會出現(xiàn)一些精彩畫面,我們可以將它保存起來、分享給朋友、或者是用作桌面背景。。。這時候截圖就顯得非常重要。
常見的截圖方式有以下幾種:
使用 PrintScreen 鍵 ,截取整個屏幕的內(nèi)容。
使用 Alt + Printscreen 鍵,截取當(dāng)前活動窗口的內(nèi)容。
使用播放器內(nèi)置的截圖功能(一般會有相應(yīng)的截圖按鈕),截取當(dāng)前播放的畫面。
很顯然,在絕大多數(shù)情況下,內(nèi)置的截圖功能是最佳選擇。因為無論是使用 PrintScreen 還是 Alt + Printscreen,都有可能會截取到與當(dāng)前畫面無關(guān)的內(nèi)容。
那么,如何使用 libVLC 來實現(xiàn)這樣一個截圖功能呢?
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?);
共有五個參數(shù),大概說一下各自的含義:
參數(shù)一:p_mi,媒體播放器實例;
參數(shù)二:num,視頻輸出的數(shù)量(通常為 0,指第一個);
參數(shù)三:psz_filepath,保存截圖的文件/文件夾路徑;
參數(shù)四:i_width,截圖的寬度;
參數(shù)五:i_height,截圖的高度。
需要注意一點,如果 i_width AND i_height 為 0,則使用原始大小;如果 i_width XOR i_height 為 0,則保留原始的寬高比。
成功時返回值為 0,未找到視頻時為 -1。
3
實現(xiàn)方式
下面,來播放一個本地視頻,并進行截圖:

播放 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;
}
當(dāng)程序退出之后,就能在當(dāng)前目錄下找到該圖片了(如上圖所示)。當(dāng)然了,也可以將上面的相對路徑(test.png)更改為絕對路徑(例如:E:/test.png)。
·END·
?
點個在看,么么噠!

